使用 StatefulSet 部署主从同步的 MySQL 集群是一种常见的实践,可以确保数据在多个副本之间进行持久化和同步。以下是一个基本的步骤指南:
创建 StatefulSet:
yaml
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
replicas: 3
template:
spec:
containers:
- name: mysql
image: mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: yourpassword
- name: MYSQL_DATABASE
value: yourdatabase
- name: MYSQL_USER
value: yourusername
- name: MYSQL_PASSWORD
value: yourpassword
ports:
- containerPort: 3306
创建 headless Service 来标识 StatefulSet 中的每个 Pod:
yaml
复制
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
clusterIP: None
ports:
- name: mysql
port: 3306
创建另外两个 Services,分别对应主节点和从节点:
主节点:
yaml
复制
apiVersion: v1
kind: Service
metadata:
name: mysql-master
spec:
selector:
app: mysql
ports:
- name: mysql
port: 3306
clusterIP: None
从节点:
yaml
复制
apiVersion: v1
kind: Service
metadata:
name: mysql-slave
spec:
selector:
app: mysql
ports:
- name: mysql
port: 3306
clusterIP: None
配置 MySQL 进行主从复制。在每个 MySQL Pod 中,需要手动进行以下配置: a. 编辑 /etc/my.cnf 文件并添加以下内容:
makefile
复制
[mysqld]
server-id=1,2,3...N // 与Pod的序号对应,此处为示例,实际配置请根据Pod的序号进行配置。
log-bin=mysql-bin // 启用二进制日志,用于主从复制。
binlog-do-db=yourdatabase // 指定需要复制的数据库。
b. 重启 MySQL 服务。在 Pod 中运行以下命令:systemctl restart mysqld。确保主从复制配置生效。根据实际情况,可能需要手动创建初始数据库和用户等。