该镜像使用的mysql数据库和备份软件版本
mysql使用官方8.0.18
xtrabackup使用的是rpm软件trabackup:8.0.9
制作xtrabackup镜像
Dockerfile 配置如下:
FROM centos:7
ADD percona-xtrabackup-80-8.0.9-1.el7.x86_64.rpm /
RUN rpm --rebuilddb && \
yum -y install wget hostname mariadb && \
yum -y install nmap-ncat.x86_64 && \
yum -y localinstall percona-xtrabackup-80-8.0.9-1.el7.x86_64.rpm
RUN rm -rf percona-xtrabackup-80-8.0.9-1.el7.x86_64.rpm
EXPOSE 3307
xtrabackup备份工具下载 :Download Percona XtraBackup 8.0
工具准备好之后构建自己的私有镜像。
下面,我们看一张MySQL主从复制的原理图:
上面的原理图告诉我们,部署这样一个一主多从的 MySQL 集群,关键在于配置 Master 节点和 Slave 节点的复制和同步。
下面我们用自然语言描述在物理机上部署这样的集群的关键步骤;
1、配置并安装好 Master 节点的 MySQL;
2、通过XtraBackup将Master节点的数据备份到指定目录;
3、将第2步备份出来的目录,连同备份信息文件,拷贝到Slave的/var/lib/mysql
下,然后执行CHANGE MASTER TO
指令;
4、启动 Slave 节点,执行START SLAVE
指令;
5、在这个集群中添加更多的Slave节点;
2.3.1 难点
不同于物理机,在 Kubernetes 上搭建一主多从的 MySQL 集群,结合容器的技术特色,我们思考以下需要解决的困难点:
2.3.2 使用cephfs做持久化存储
准备外部ceph存储,部署好ceph-csi,以及storageclass的存储名部署nacos需要用到
ceph存储:ceph v15.2.13版本[octopus]分布式集群部署
ceph-csi部署:K8S使用ceph-csi持久化存储之cephfs部署验证快照
2.3.3 ConfigMap 为 Master/Slave 节点分配不同的配置文件
根据开头介绍的ConfigMap概念可知,使用 ConfigMap 可以很好解决 MySQL集群中 Master 和 Slave 节点配置文件不一致的问题。ConfigMap 的配置信息如下:
[root@master mysql]# cat configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: mysql
labels:
app: mysql
data:
master.cnf: |
# Master配置
[mysqld]
log-bin
slave.cnf: |
# Slave配置
[mysqld]
super-read-only
这里我们定义了 master.cnf 和 slave.cnf 两个MySQL的配置文件。
创建ConfigMap和查看状态
[root@master mysql]# kubectl apply -f configmap.yaml
configmap/mysql created
[root@master mysql]# kubectl get configmap -n mysql
NAME DATA AGE
mysql 2 31d
2.3.4 Secret 为 集群配置密码
[root@master mysql]# cat secret.yaml
---
# Secret 为 mysql集群配置密码
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: mysql
labels:
app: mysql
type: Opaque
data:
password: dVVOMzgjJXBx # echo -n 'uUN38#%pq' |base64
创建并查看secret
[root@master mysql]# kubectl create -f secret.yaml
secret/mysql-secret created
[root@master mysql]# kubectl get secret -n mysql
NA