前言
前几篇文章重点研究了mysql数据库的部署,留下了一个问题,在K8S中如何实现mysql数据库的主备部署,以及如何实现主备数据同步,这是数据库应用中的一个关键问题,今天我们就重点研究这个问题。
一、mysql数据库主备部署
根据前面几篇的研究,我们需要使用有状态部署的方式StatefulSet来部署mysql应用,需要使用PVC来持久化数据,需要使用ConfigMap来初始化数据。在此基础上,做mysql的主备部署还需要考虑my.cnf配置文件中server-id需要不同,做主备数据同步需要设置对端mysql的信息。参考第四篇所讲,我们可以使用ConfigMap来实现my.cnf的配置。要知道对端的信息,我们可以让主备mysql对外提供服务,即Service服务。
1.部署主用
主用mysql部署文件mysql-master.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-master-config
data:
my.cnf: |
[mysqld]
log-bin=mysql-bin
server-id=1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-master-sts
spec:
selector:
matchLabels:
app: mysql-master-pod
serviceName: "mysql-master"
replicas: 1
template:
metadata:
labels:
app: mysql-master-pod
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
volumeMounts:
- name: mysql-persistent-storage