前言
MySQL一主多是从数据库生产级部署方案。第一可以实现数据的多处⾃动备份,加强了数据的安全性。第二实现数据库的拓展,通过多写分离提升数据库的负载性能。web等业务服务器的读操作由多个slave数据库实现,需要修改数据库的写操作在一个master数据库进行。数据文件会根据主从复制自动备份。
下面将通过k8s集群基于NFS,PV/PVC,ConfigMap,StatefulSet部署MySQL一主多从方案。
镜像准备
准备mysql镜像,数据库主镜像,上传到本地仓库:
docker pull mysql:5.7.36
docker tag mysql:5.7.36 easzlab.io.local:5000/myhub/mysql:5.7.36
docker push easzlab.io.local:5000/myhub/mysql:5.7.36
准备xtrabackup镜像,用于主从复制,上传到本地仓库:
docker pull registry.cn-hangzhou.aliyuncs.com/hxpdocker/xtrabackup:1.0
docker tag registry.cn-hangzhou.aliyuncs.com/hxpdocker/xtrabackup:1.0 easzlab.io.local:5000/myhub/xtrabackup:1.0
docker push easzlab.io.local:5000/myhub/xtrabackup:1.0
NFS准备
在NFS服务器192.168.100.155创建目录并共享:
# 创建3个共享目录,属主属组选root。
mkdir -p /data/k8sdata/myserver/mysql-datadir-{
1..3}
chown root.root /data/k8sdata/myserver/mysql-datadir-{
1..3}
# 提供共享服务,可共享的IP段为物理机IP,rw可读写,no_root_squash指root远程过去还是root,mysql需要root权限。
cat << EOF >> /etc/exports
/data/k8sdata/myserver/mysql-datadir-1 192.168.100.0/24(rw,no_root_squash)
/data/k8sdata/myserver/mysql-datadir-2 192.168.100.0/24(rw,no_root_squash)
/data/k8sdata/myserver/mysql-datadir-3 192.168.100.0/24(rw,no_root_squash)
EOF
# 重新加载,查看挂载情况
exportfs -r
exportfs -v
# nfs涉及端口较多,测试环境可关闭防火墙
systemctl disable --now firewalld
创建PV
一个mysql pod对应一个pv,pod数量不能大于pv总数。
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-datadir-1
namespace: myserver
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
nfs:
path: /data/k8sdata/myserver/mysql-datadir-1
server: 192.168.100.155
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-datadir-2
namespace: myserver
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
nfs:
path: /data/k8sdata/myserver/mysql-datadir-2
server: 192.168.100.155
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-datadir-3
namespace: myserver
spec:
capacity:
storage: 50Gi
accessModes