ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

K8S中部署mysql-ha高可用集群

2021-03-21 07:02:27  阅读:1705  来源: 互联网

标签:ha -- root master mysql adm mysqlha K8S


作者:李毓

约定:
k8s:1.18
helm:v3
mysql:5.7.13
ceph:rbd模式

按照之前的教程,先添加好仓库

[root@adm-master ~]# helm repo list
NAME        URL                                                   
charts      https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
stable      http://mirror.azure.cn/kubernetes/charts              
aliyuncs    https://apphub.aliyuncs.com        
[root@adm-master ~]# helm pull aliyuncs/mysqlha
[root@adm-master ~]# tar -zxvf mysqlha-1.0.0.tgz
[root@adm-master mysqlha]# ls
Chart.yaml  OWNERS  README.md  templates  values.yaml

官方的模板里面有个坑

K8S中部署mysql-ha高可用集群

这里原本是没有的,要给他加上。

[root@adm-master mysqlha]# vim templates/statefulset.yaml 

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {{ template "fullname" . }}
  labels:
    app: {{ template "fullname" . }}
    chart: "{{ template "mysqlha.chart" . }}"
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
spec:
  serviceName: {{ template "fullname" . }}
  replicas: {{ .Values.mysqlha.replicaCount }}
  selector:
    matchLabels:
      app: {{ template "fullname" . }}

执行命令

[root@adm-master mysqlha]# helm install mysql . -f ./values.yaml
NAME: mysql
LAST DEPLOYED: Sat Mar 20 20:54:20 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The MySQL cluster is comprised of 3 MySQL pods: 1 master and 2 slaves. Each instance is accessible within the cluster through:

    <pod-name>.mysql-mysqlha

`mysql-mysqlha-0.mysql-mysqlha` is designated as the master and where all writes should be executed against. Read queries can be executed against the `mysql-mysqlha-readonly` service which distributes connections across all MySQL pods.

To connect to your database:

1. Obtain the root password: 

    kubectl get secret --namespace default mysql-mysqlha -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo

2. Run a pod to use as a client:

    kubectl run mysql-client --image=mysql:5.7.13 -it --rm --restart='Never' --namespace default -- /bin/sh

3. To connect to Master service (read/write):

    mysql -h mysql-mysqlha-0.mysql-mysqlha -u root -p

4. To connect to slave service (read-only):

   mysql -h mysql-mysqlha-readonly -u root -p

K8S中部署mysql-ha高可用集群

有必要验证一下读写分离

先获取密码
K8S中部署mysql-ha高可用集群

进行base64反编码

[root@adm-master mysqlha]# echo -n MjIzRjBNTkFFV2hh | base64 --decode
223F0MNAEWha
[root@adm-master mysqlha]# echo -n a3FOdzZUbktGVjNq | base64 --decode
kqNw6TnKFV3j

进入容器

[root@adm-master mysqlha]# kubectl get pods -o wide
NAME                                     READY   STATUS    RESTARTS   AGE    IP             NODE        NOMINATED NODE   READINESS GATES
mysql-mysqlha-0                          2/2     Running   0          31m    10.244.2.227   adm-node2   <none>           <none>
mysql-mysqlha-1                          2/2     Running   0          30m    10.244.1.193   adm-node1   <none>           <none>
mysql-mysqlha-2                          2/2     Running   0          29m    10.244.2.228   adm-node2   <none>           <none>
nfs-client-provisioner-cc544b949-k8n2s   1/1     Running   29         109d   10.244.1.186   adm-node1   <none>           <none>
rbd-provisioner-c968dcb4b-wbhlc          1/1     Running   1          26h    10.244.1.187   adm-node1   <none>           <none>

[root@adm-master mysqlha]# kubectl exec -it mysql-mysqlha-0 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Defaulting container name to mysql.
Use 'kubectl describe pod/mysql-mysqlha-0 -n default' to see all of the containers in this pod.
# 
# mysql -h10.244.2.227 -uroot -pkqNw6TnKFV3j
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 203
Server version: 5.7.13-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

创建数据

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| mysql                  |
| performance_schema     |
| sys                    |
| xtrabackup_backupfiles |
+------------------------+
5 rows in set (0.00 sec)

mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.02 sec)

mysql> CREATE TABLE test.messages (message VARCHAR(250));
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO test.messages VALUES ('hello');
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| mysql                  |
| performance_schema     |
| sys                    |
| test                   |
| xtrabackup_backupfiles |
+------------------------+
6 rows in set (0.00 sec)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from messages;
+---------+
| message |
+---------+
| hello   |
+---------+
1 row in set (0.00 sec)

K8S中部署mysql-ha高可用集群

# mysql -uroot -h10.1.195.242 -pkqNw6TnKFV3j
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 265
Server version: 5.7.13 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases ;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| mysql                  |
| performance_schema     |
| sys                    |
| test                   |
| xtrabackup_backupfiles |
+------------------------+
6 rows in set (0.01 sec)

标签:ha,--,root,master,mysql,adm,mysqlha,K8S
来源: https://blog.51cto.com/14783669/2667194

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有