K8S系列第十篇(一键部署MySQL主从复制)
更多精彩文章,猛戳这里:kubernetes系列技术文档
更多精彩文章,猛戳这里:kubernetes系列技术文档主库部署apiVersion: v1 kind: Namespace metadata: name: mysql-master --- apiVersion: v1 kind: ConfigMap metadata: name: master-my-cnf namespace: mysql-master data: my.cnf: |- [mysqld] datadir=/var/lib/mysql server-id=1 binlog_format=row log-bin=mysql-bin skip-name-resolve gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 relay_log_purge=0 symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld_safe] log-error=/var/log/mysqld.log --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql-master namespace: mysql-master spec: selector: matchLabels: app: mysql-master template: metadata: labels: app: mysql-master spec: containers: - name: mysql-master image: mysql:5.7 imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD value: "abc123456" volumeMounts: - mountPath: /etc/mysql/my.cnf name: master-my-cnf subPath: my.cnf volumes: - name: master-my-cnf configMap: name: master-my-cnf items: - key: my.cnf # 缺少key,value path: my.cnf --- apiVersion: v1 kind: Service metadata: name: mysql-master namespace: mysql-master spec: ports: - port: 3306 targetPort: 3306 name: http protocol: TCP selector: app: mysql-master --- apiVersion: batch/v1 kind: Job metadata: name: mysql-master-job namespace: mysql-master spec: template: spec: restartPolicy: OnFailure containers: - name: mysql-create-slave-user image: mysql:5.7 command: - "/bin/bash" - "-c" - | MYSQL_MASTER_SVC_NAME=mysql-master.mysql-master.svc.cluster.local MYSQL_MASTER_PASSWORD=abc123456 MYSQL_MASTER_USERNAME=root while true do mysql -u${MYSQL_MASTER_USERNAME} -p${MYSQL_MASTER_PASSWORD} -h${MYSQL_MASTER_SVC_NAME} -e "show databases;" >/dev/null 2>&1 if [ $? -eq 0 ];then mysql -u${MYSQL_MASTER_USERNAME} -p${MYSQL_MASTER_PASSWORD} -h${MYSQL_MASTER_SVC_NAME} -e "grant replication slave on *.* to "slave"@"%" identified by "123"; flush privileges;" break; fi sleep 1; done从库部署apiVersion: v1 kind: Namespace metadata: name: mysql-node --- apiVersion: v1 kind: Secret metadata: name: node-password namespace: mysql-node data: MYSQL_ROOT_PASSWORD: MTIzNDU2Cg== --- apiVersion: v1 kind: ConfigMap metadata: name: node-my-cnf namespace: mysql-node data: my.cnf: |- [mysqld] datadir=/var/lib/mysql server-id=2 binlog_format=row log-bin=mysql-bin skip-name-resolve gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 relay_log_purge=0 symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES relay-log=mysql-relay-bin replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.% replicate-wild-ignore-table=sys.% [mysqld_safe] log-error=/var/log/mysqld.log --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql-node namespace: mysql-node # 缺少名称空间 spec: selector: matchLabels: app: mysql-node template: metadata: labels: app: mysql-node spec: containers: - name: mysql-node image: mysql:5.7 imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD value: "abc123456" volumeMounts: - mountPath: /etc/mysql/my.cnf name: node-my-cnf subPath: my.cnf volumes: - name: node-my-cnf configMap: name: node-my-cnf items: - key: my.cnf # 缺少key,value path: my.cnf --- apiVersion: v1 kind: Service metadata: name: mysql-node namespace: mysql-node spec: ports: - port: 3306 targetPort: 3306 name: http protocol: TCP selector: app: mysql-node --- apiVersion: batch/v1 kind: Job metadata: name: mysql-node-job namespace: mysql-node spec: template: spec: restartPolicy: OnFailure containers: - name: mysql-start-slave image: mysql:5.7 command: - "/bin/bash" - "-c" - | MYSQL_NODE_SVC_NAME=mysql-node.mysql-node.svc.cluster.local MYSQL_NODE_PASSWORD=abc123456 MYSQL_NODE_USERNAME=root while true do mysql -u${MYSQL_NODE_USERNAME} -p${MYSQL_NODE_PASSWORD} -h${MYSQL_NODE_SVC_NAME} -e "show databases;" >/dev/null 2>&1 if [ $? -eq 0 ];then mysql -u${MYSQL_NODE_USERNAME} -p${MYSQL_NODE_PASSWORD} -h${MYSQL_NODE_SVC_NAME} -e "show master statusG" > /tmp/log MASTER_LOG_FILE=`/bin/cat /tmp/log | /usr/bin/awk -F: "NR==2{print $2}" | /usr/bin/tr -d " "` MYSQL_LOG_POS=`/bin/cat /tmp/log | /usr/bin/awk -F: "NR==3{print $2}" | /usr/bin/tr -d " "` mysql -u${MYSQL_NODE_USERNAME} -p${MYSQL_NODE_PASSWORD} -h${MYSQL_NODE_SVC_NAME} -e "change master to master_host="mysql-master.mysql-master.svc.cluster.local",master_port=3306,master_user="slave",master_password="123",master_log_file=""${MASTER_LOG_FILE}"",master_log_pos="${MYSQL_LOG_POS}";" mysql -u${MYSQL_NODE_USERNAME} -p${MYSQL_NODE_PASSWORD} -h${MYSQL_NODE_SVC_NAME} -e "start slave;" break; fi sleep 1; done
更多精彩文章,猛戳这里:kubernetes系列技术文档
更多精彩文章,猛戳这里:kubernetes系列技术文档
更多精彩文章,猛戳这里:kubernetes系列技术文档