博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在kubernetes集群中部署mysql主从
阅读量:7121 次
发布时间:2019-06-28

本文共 5881 字,大约阅读时间需要 19 分钟。

本文介绍在kubernetes环境中部署mysql主从集群,数据持久化采用nfs。

一、环境介绍

Mysql版本:5.7

Mysql master节点:

主机名:vm1
IP地址:192.168.115.5/24

Mysql slave节点:

主机名:vm2
IP地址:192.168.115.6/24

NFS节点:

主机名:vm2
IP地址:192.168.115.6/24
共享目录:/home/mysql_master、/home/mysql_slave

二、准备mysql主从的镜像环境

dockerfile、docker-entrypoint.sh 文件下载地址如下
由于我们要配置mysql主从,所以需要对dockerfile、docker-entrypoint.sh 文件做一点的修改,主要是在mysql主从配置部分。

准备master的镜像

将Dockerfile, docker-entrypoint.sh复制一份用于build master镜像文件。
在Dockerfile中添加如下内容,将mysql master的server-id设置为1

RUN sed -i '/\[mysqld\]/a server-id=1\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf

在kubernetes集群中部署mysql主从

在docker-entrypoint.sh中添加如下内容,创建一个复制用户并赋权限,刷新系统权限表

echo "CREATE USER '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}" echo "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}" echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"

在kubernetes集群中部署mysql主从

准备slave的镜像
将Dockerfile, docker-entrypoint.sh复制一份用于build slave镜像文件。
在Dockerfile中添加如下内容,将mysql slave的server-id设置为一个随机数

RUN RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})" && sed -i '/\[mysqld\]/a server-id='$RAND'\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf

在kubernetes集群中部署mysql主从

在docker-entrypoint.sh中添加如下内容,配置连接master主机的host、user、password等参数,并启动复制进程。

echo "STOP SLAVE;" | "${mysql[@]}" echo "CHANGE MASTER TO master_host='$MYSQL_MASTER_SERVICE_HOST', master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}" echo "START SLAVE;" | "${mysql[@]}"

在kubernetes集群中部署mysql主从

三、开始使用修改好的dockerfile创建mysql master和slave镜像

# cd /root/kubernetes/lnmp/mysql/Dockerfiles/Master# docker build -t registry.fjhb.cn/mysql-master:0.1 .# cd /root/kubernetes/lnmp/mysql/Dockerfiles/Slave# docker build -t registry.fjhb.cn/mysql-slave:0.1 .# docker push registry.fjhb.cn/mysql-master:0.1# docker push registry.fjhb.cn/mysql-slave:0.1

在kubernetes集群中部署mysql主从

四、创建pv和pvc,用于mysql主从存储持久化数据
在nfs服务器上把目录创建出来

# cd /home/# mkdir mysql_master mysql_slave

通过yaml文件创建出两组pv和pvc

# cd /root/kubernetes/lnmp/mysql/Storage# cat nfs-pv-master.yamlapiVersion: v1kind: PersistentVolumemetadata:  name: pv-nfs-mysql-masterspec:  capacity:    storage: 5Gi   accessModes:  - ReadWriteOnce  nfs:     path: /home/mysql_master    server: 192.168.115.6  persistentVolumeReclaimPolicy: Recycle # cat nfs-pvc-master.yamlkind: PersistentVolumeClaimapiVersion: v1metadata:  name: pv-nfs-mysql-masterspec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 5Gi# cat nfs-pv-slave.yaml apiVersion: v1kind: PersistentVolumemetadata:  name: pv-nfs-mysql-slavespec:  capacity:    storage: 6Gi   accessModes:  - ReadWriteOnce  nfs:     path: /home/mysql_slave    server: 192.168.115.6  persistentVolumeReclaimPolicy: Recycle # cat nfs-pvc-slave.yaml kind: PersistentVolumeClaimapiVersion: v1metadata:  name: pv-nfs-mysql-slavespec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 6Gi# kubectl create -f nfs-pv-master.yaml# kubectl create -f nfs-pvc-master.yaml# kubectl create -f nfs-pv-slave.yaml # kubectl create -f nfs-pvc-slave.yaml

在kubernetes集群中部署mysql主从

五、根据yaml文件创建mysql master ReplicationController和services

# cat mysql-master-rc.yaml apiVersion: v1kind: ReplicationControllermetadata: name: mysql-master labels:  name: mysql-masterspec:  replicas: 1  selector:   name: mysql-master  template:   metadata:    labels:     name: mysql-master   spec:    containers:    - name: mysql-master      image: registry.fjhb.cn/mysql-master:0.1      volumeMounts:        - mountPath: /var/lib/mysql          name: mysql-master-data      ports:      - containerPort: 3306      env:      - name: MYSQL_ROOT_PASSWORD        value: "12345678"      - name: MYSQL_REPLICATION_USER        value: "repl"      - name: MYSQL_REPLICAITON_PASSWORD        value: "12345678"    volumes:     - name: mysql-master-data       persistentVolumeClaim:        claimName: pv-nfs-mysql-master# cat mysql-master-svc.yaml apiVersion: v1kind: Servicemetadata:  name: mysql-master  labels:   name: mysql-masterspec:  type: NodePort  ports:  - port: 3306    targetPort: 3306    name: http    nodePort: 30066  selector:    name: mysql-master# kubectl create -f mysql-master-rc.yaml # kubectl create -f mysql-master-svc.yaml

在kubernetes集群中部署mysql主从

在kubernetes集群中部署mysql主从
使用mysql客户端连接master测试
在kubernetes集群中部署mysql主从
六、根据yaml文件创建mysql slave ReplicationController和services

# cat mysql-slave-rc.yaml apiVersion: v1kind: ReplicationControllermetadata: name: mysql-slave labels:  name: mysql-slavespec:  replicas: 1  selector:   name: mysql-slave  template:   metadata:    labels:     name: mysql-slave   spec:    containers:    - name: mysql-slave      image: registry.fjhb.cn/mysql-slave:0.1      volumeMounts:        - mountPath: /var/lib/mysql          name: mysql-slave-data      ports:      - containerPort: 3306      env:      - name: MYSQL_ROOT_PASSWORD        value: "12345678"      - name: MYSQL_REPLICATION_USER        value: "repl"      - name: MYSQL_REPLICAITON_PASSWORD        value: "12345678"    volumes:     - name: mysql-slave-data       persistentVolumeClaim:        claimName: pv-nfs-mysql-slave# cat mysql-slave-svc.yaml apiVersion: v1kind: Servicemetadata:  name: mysql-slave  labels:   name: mysql-slavespec:  type: NodePort  ports:  - port: 3306    targetPort: 3306    name: http    nodePort: 30067  selector:    name: mysql-slave# kubectl create -f mysql-slave-rc.yaml # kubectl create -f mysql-slave-svc.yaml

七、测试与排错

通过mysql命令行连接slave查看复制的状态,发现状态是connecting
在kubernetes集群中部署mysql主从
使用slave 容器连接master,发现使用root账号可以正常连接,而使用repl账号无法正常连接,提示access deny
在kubernetes集群中部署mysql主从
修改master上的repl用户密码

mysql> alter user repl@'%' identified by "12345678";Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)

完成上述修改后在slave上进行验证一下,repl账号可以正常连接

在kubernetes集群中部署mysql主从
在slave上进行change master操作,因为创建镜像的时候并未配置GTID参数,所以这里不能使用MASTER_AUTO_POSITION=1参数,如果要开启,需要去修改Dockerfile,重新生成镜像。

mysql> stop slave;mysql> set global sql_slave_skip_counter=1;CHANGE MASTER TO \MASTER_HOST='mysql-master', \MASTER_USER='repl', \MASTER_PASSWORD='12345678';mysql> start slave;

在kubernetes集群中部署mysql主从

在kubernetes集群中部署mysql主从
参考文档:

转载地址:http://hnxel.baihongyu.com/

你可能感兴趣的文章
vsftpd虚拟用户
查看>>
iOS逆向之自动化重签名
查看>>
Angular2之路由学习笔记
查看>>
Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
查看>>
镜像的使用(6-13)
查看>>
小学期实践心得(2)
查看>>
关于BOF改进方法的一些introduction
查看>>
kafka 控制台命令
查看>>
【转】Linux内核结构详解
查看>>
谷歌:全球10大爬升最快搜索关键字排行榜 Google Zeitgeist 2011
查看>>
当机器人具有自我知觉,并能自适应环境,真的不可怕吗?
查看>>
Linux文件系统的目录结构详解
查看>>
二分法在生活中的一次应用
查看>>
notepad++实用快捷键
查看>>
修改Hadoop作业调度算法过程解析
查看>>
Revit中如何自定义快捷键
查看>>
并发抢购
查看>>
操他妈的,jquery1.4以上不能用toggle()轮流切换函数
查看>>
what difference between libfm and libffm
查看>>
利用java concurrent 包实现日志写数据库的并发处理
查看>>