一.環境信息
mysql版本?:8.0
k8s 版本1.22
使用nfs作為共享存儲
二.配置mysql主節點yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-master-confignamespace: mysqllabels:app: mysql-master-config
data:my.cnf: |+[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8lower_case_table_names=1sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONcollation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolvepid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqlsecure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# 主從同步server-id = 1log-bin = mysql-binsync_binlog = 1binlog_checksum = nonebinlog_format = mixedslave-skip-errors = allevent_scheduler = 1max_allowed_packet = 64M# Custom config should go here!includedir /etc/mysql/conf.d/
---
# headless service
apiVersion: v1
kind: Service
metadata:name: mysql-master-svcnamespace: mysqllabels:app: mysql-master-svc
spec:clusterIP: Noneports:- name: master-portport: 3306selector:app: mysql-master
---
# NodePort service
apiVersion: v1
kind: Service
metadata:name: mysql-master-nodeportnamespace: mysqllabels:app: mysql-master-nodeport
spec:clusterIP:ports:- name: master-portport: 3306nodePort: 31306targetPort: 3306selector:app: mysql-mastertype: NodePorttarget-port:externalTrafficPolicy: Cluster
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-masternamespace: mysql
spec:serviceName: "mysql-master-svc"replicas: 1selector:matchLabels:app: mysql-mastertemplate:metadata:labels:app: mysql-masterspec:containers:- name: mysql-masterimage: mysql:8.0.20ports:- containerPort: 3306name: master-portenv:- name: MYSQL_ROOT_PASSWORDvalue: "root"- name: TZvalue: "Asia/Shanghai"volumeMounts:- name: mycnfmountPath: /etc/mysql/my.cnfsubPath: my.cnf- name: mysql-master-datamountPath: /var/lib/mysqlvolumes:- name: mycnfconfigMap:name: mysql-master-config- name: mysql-master-datanfs:server: 192.168.110.190 path: /data/data/mysql-master
三.配置mysql從節點yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-slave-confignamespace: mysqllabels:app: mysql-slave-config
data:my.cnf: |+[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8lower_case_table_names=1sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONcollation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolvepid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqlsecure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# 主從同步server-id = 2log-bin = mysql-binsync_binlog = 1binlog_checksum = nonebinlog_format = mixedslave-skip-errors = allevent_scheduler = 1max_allowed_packet = 64Mread-only=1# Custom config should go here!includedir /etc/mysql/conf.d/
---
# headless service
apiVersion: v1
kind: Service
metadata:name: mysql-slave-svcnamespace: mysqllabels:app: mysql-slave-svc
spec:clusterIP: Noneports:- name: slave-portport: 3306selector:app: mysql-slave
---
# NodePort service
apiVersion: v1
kind: Service
metadata:name: mysql-slave-nodeportnamespace: mysqllabels:app: mysql-slave-nodeport
spec:clusterIP:ports:- name: slave-portport: 3306nodePort: 31307targetPort: 3306selector:app: mysql-slavetype: NodePorttarget-port:externalTrafficPolicy: Cluster
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-slavenamespace: mysql
spec:serviceName: "mysql-slave-svc"replicas: 1selector:matchLabels:app: mysql-slavetemplate:metadata:labels:app: mysql-slavespec:containers:- name: mysql-slaveimage: mysql:8.0.20ports:- containerPort: 3306name: slave-portenv:- name: MYSQL_ROOT_PASSWORDvalue: "root"- name: TZvalue: "Asia/Shanghai"volumeMounts:- name: mycnfmountPath: /etc/mysql/my.cnfsubPath: my.cnf- name: mysql-slave-datamountPath: /var/lib/mysqlvolumes:- name: mycnfconfigMap:name: mysql-slave-config- name: mysql-slave-datanfs:server: 192.168.110.190 path: /data/data/mysql-slave
三、主從配置
主節點操作
獲取mysql的內部ip?
kubectl get svc -n mysql
1.登錄主節點
MySQL mysql -h 192.168.40.12 -P 31306 -u root -proot
show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File ? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | ? ? ?152 | ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? |
+------------------+----------+--------------+------------------+-------------------+
2.創建從節點數據同步用戶
CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'replica123';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
?
?從節點操作
1.登錄從節點
mysql -h 192.168.110.190 -P 31307 ?-u root -proot
2.同步指向主節點
CHANGE MASTER TO MASTER_HOST='mysql-master-svc',MASTER_USER='replica',MASTER_PASSWORD='replica123',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=152,MASTER_PORT=3306;
3.開啟同步
start slave;