本文共 5881 字,大约阅读时间需要 19 分钟。
本文介绍在kubernetes环境中部署mysql主从集群,数据持久化采用nfs。
一、环境介绍
Mysql版本:5.7Mysql master节点:
主机名:vm1IP地址:192.168.115.5/24Mysql slave节点:
主机名:vm2IP地址:192.168.115.6/24NFS节点:
主机名:vm2IP地址: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设置为1RUN sed -i '/\[mysqld\]/a server-id=1\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf
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[@]}"
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
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[@]}"
# 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
# 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
# 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
# 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查看复制的状态,发现状态是connectingmysql> 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账号可以正常连接
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;
转载地址:http://hnxel.baihongyu.com/