Centos8下 K8S 安裝配置Mysql8 多主MGR

一.環境配置

k8s環境:1臺master節點,3臺node節點。

192.168.37.128 k8s1192.168.37.130 k8s2192.168.37.131 k8s3192.168.37.129 k8s4
Centos8下 K8S 安裝配置Mysql8 多主MGR

二.搭建步

1、準備MySQL鏡像

拉取MySQL最新的鏡像
docker pull mysql

2、準備相關yaml文件

準備namespace文件

cat namespace.yaml 
apiVersion: v1
kind: Namespace
metadata:
 name: mysqldb

準備service文件


cat service.yaml 
apiVersion: v1
kind: Service
metadata:
name: mgrtest
 namespace: mysqldb
spec:
clusterIP: None
 selector:
  name: mysql-mgr  
ports:
 – name: foo
   port: 3306
   targetPort: 3306

MySQL參數配置文件configmap(節點1)

節點1:
cat mysql-mgr-cnf-0.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
 name: mysql-mgr-0-cnf
namespace: mysqldb
data:
 mysql-mgr-0.cnf: |
  [mysqld]
   port = 3306
   character_set_server = utf8
   server_id = 1
   log_bin = mysql-bin
  relay-log = relay-bin
   #back_log = 500
  #max_connections = 3000
   #wait_timeout = 5022397
  interactive_timeout = 5022397
   max_connect_errors = 1000
  relay-log-recovery=1
   #max_allowed_packet = 32M
  sort_buffer_size = 4M
   read_buffer_size = 4M
  join_buffer_size = 8M
   thread_cache_size = 64
  #tmp_table_size = 256M
   log_slave_updates=1
  long_query_time = 1
   slow_query_log = 1
  skip-name-resolve
   innodb_buffer_pool_size=700M
  #innodb_data_file_path = ibdata1:1024M:autoextend
  innodb_flush_log_at_trx_commit=1
   innodb_log_buffer_size = 16M
   innodb_log_file_size = 256M
  innodb_log_files_in_group = 2
   innodb_max_dirty_pages_pct = 50
   sync_binlog=1
   master_info_repository=TABLE
  relay_log_info_repository=TABLE
   log_timestamps=SYSTEM
  gtid_mode = ON
   enforce_gtid_consistency = ON
  master_info_repository = TABLE
   relay_log_info_repository = TABLE
   log_slave_updates = ON
   binlog_checksum = NONE
   log_slave_updates = ON
  slave_parallel_type=LOGICAL_CLOCK
  slave_parallel_workers=8
   slave-preserve-commit-order=on
  #group_replication_compression_threshold=200000
  plugin_load_add=’group_replication.so’
  transaction_write_set_extraction = XXHASH64
  loose-group_replication_group_name=”01e5fb97-be64-41f7-bafd-3afc7a6ab555″
  loose-group_replication_start_on_boot=off
  loose-group_replication_local_address=”k8s2.mgrtest.mysqldb.svc.cluster.local:13306″
  loose-group_replication_group_seeds=”k8s2.mgrtest.mysqldb.svc.cluster.local:13306,k8s3.mgrtest.mysqldb.svc.cluster.local:13306,k8s4.mgrtest.mysqldb.svc.cluster.local:13306″
  loose-group_replication_bootstrap_group = off
  loose-group_replication_ip_whitelist=’10.96.0.0/16,172.16.0.0/16,192.168.0.0/16,172.17.0.0/16,127.0.0.1/8′
  report_host = k8s2.mgrtest.mysqldb.svc.cluster.local
  [mysqldump]
   quick
   max_allowed_packet = 32M

MySQL參數配置文件configmap(節點2)

cat mysql-mgr-cnf-1.yaml  
apiVersion: v1
kind: ConfigMap
metadata:
 name: mysql-mgr-1-cnf
namespace: mysqldb
data:
 mysql-mgr-1.cnf: |
  [mysqld]
   port = 3306
   character_set_server = utf8
   server_id = 2
   log_bin = mysql-bin
  relay-log = relay-bin
   #back_log = 500
  #max_connections = 3000
   #wait_timeout = 5022397
  interactive_timeout = 5022397
   max_connect_errors = 1000
  relay-log-recovery=1
   #max_allowed_packet = 32M
  sort_buffer_size = 4M
   read_buffer_size = 4M
  join_buffer_size = 8M
   thread_cache_size = 64
  #tmp_table_size = 256M
   log_slave_updates=1
  long_query_time = 1
   slow_query_log = 1
  skip-name-resolve
   innodb_buffer_pool_size=700M
  #innodb_data_file_path = ibdata1:1024M:autoextend
  innodb_flush_log_at_trx_commit=1
   innodb_log_buffer_size = 16M
   innodb_log_file_size = 256M
  innodb_log_files_in_group = 2
   innodb_max_dirty_pages_pct = 50
   sync_binlog=1
   master_info_repository=TABLE
  relay_log_info_repository=TABLE
   log_timestamps=SYSTEM
  gtid_mode = ON
   enforce_gtid_consistency = ON
  master_info_repository = TABLE
   relay_log_info_repository = TABLE
   log_slave_updates = ON
   binlog_checksum = NONE
   log_slave_updates = ON
  slave_parallel_type=LOGICAL_CLOCK
  slave_parallel_workers=8
   slave-preserve-commit-order=on
  #group_replication_compression_threshold=200000
  transaction_write_set_extraction = XXHASH64
  loose-group_replication_group_name=”01e5fb97-be64-41f7-bafd-3afc7a6ab555″
  loose-group_replication_start_on_boot=off
  loose-group_replication_local_address=”k8s3.mgrtest.mysqldb.svc.cluster.local:13306″
  loose-group_replication_group_seeds=”k8s2.mgrtest.mysqldb.svc.cluster.local:13306,k8s3.mgrtest.mysqldb.svc.cluster.local:13306,k8s4.mgrtest.mysqldb.svc.cluster.local:13306″
  loose-group_replication_bootstrap_group = off
  loose-group_replication_ip_whitelist=’10.96.0.0/16,172.16.0.0/16,192.168.0.0/16,172.17.0.0/16,127.0.0.1/8′
  report_host = k8s3.mgrtest.mysqldb.svc.cluster.local
  [mysqldump]
   quick
   max_allowed_packet = 32M

MySQL參數配置文件configmap(節點3)

cat mysql-mgr-cnf-2.yaml  
apiVersion: v1
kind: ConfigMap
metadata:
 name: mysql-mgr-2-cnf
namespace: mysqldb
data:
 mysql-mgr-2.cnf: |
  [mysqld]
   port = 3306
   character_set_server = utf8
   server_id = 3
   log_bin = mysql-bin
  relay-log = relay-bin
   #back_log = 500
  #max_connections = 3000
   #wait_timeout = 5022397
  interactive_timeout = 5022397
   max_connect_errors = 1000
  relay-log-recovery=1
   #max_allowed_packet = 32M
  sort_buffer_size = 4M
   read_buffer_size = 4M
  join_buffer_size = 8M
   thread_cache_size = 64
  #tmp_table_size = 256M
   log_slave_updates=1
  long_query_time = 1
   slow_query_log = 1
  skip-name-resolve
   innodb_buffer_pool_size=700M
  #innodb_data_file_path = ibdata1:1024M:autoextend
  innodb_flush_log_at_trx_commit=1
   innodb_log_buffer_size = 16M
   innodb_log_file_size = 256M
  innodb_log_files_in_group = 2
   innodb_max_dirty_pages_pct = 50
   sync_binlog=1
   master_info_repository=TABLE
  relay_log_info_repository=TABLE
   log_timestamps=SYSTEM
  gtid_mode = ON
   enforce_gtid_consistency = ON
  master_info_repository = TABLE
   relay_log_info_repository = TABLE
   log_slave_updates = ON
   binlog_checksum = NONE
   log_slave_updates = ON
  slave_parallel_type=LOGICAL_CLOCK
  slave_parallel_workers=8
   slave-preserve-commit-order=on
  #group_replication_compression_threshold=200000
  transaction_write_set_extraction = XXHASH64
  loose-group_replication_group_name=”01e5fb97-be64-41f7-bafd-3afc7a6ab555″
  loose-group_replication_start_on_boot=off
  loose-group_replication_local_address=”k8s4.mgrtest.mysqldb.svc.cluster.local:13306″
  loose-group_replication_group_seeds=”k8s2.mgrtest.mysqldb.svc.cluster.local:13306,k8s3.mgrtest.mysqldb.svc.cluster.local:13306,k8s4.mgrtest.mysqldb.svc.cluster.local:13306″
  loose-group_replication_bootstrap_group = off
  loose-group_replication_ip_whitelist=’10.96.0.0/16,172.16.0.0/16,192.168.0.0/16,172.17.0.0/16,127.0.0.1/8′
  report_host = k8s4.mgrtest.mysqldb.svc.cluster.local
  [mysqldump]
   quick
   max_allowed_packet = 32M

準備pod文件節點1

cat node1_pod.yaml 
apiVersion: v1
kind: Pod
metadata:
name: k8s2
 namespace: mysqldb
 labels:
  name: mysql-mgr
spec:
 nodeName: k8s2
 hostname: k8s2
 subdomain: mgrtest
 containers:
 – image: mysql:latest
   name: mysql-mgr-0
   imagePullPolicy: IfNotPresent    
   command: [ “/bin/bash”, “-ce”, “cd /usr/bin && mysqld –initialize-insecure –user=mysql && mysqld_safe && tail -f /dev/null” ]
   ports:
     – containerPort: 3306
  volumeMounts:
   – name: tz-config
     mountPath: /etc/localtime
   – name: mysql-data
     mountPath: /data/mysql/data/
   – name: mysql-config
    mountPath: /etc/my.cnf
     subPath: my.cnf
 volumes:
  – name: tz-config
     hostPath:
       path: /etc/localtime
   – name: mysql-data
     hostPath:
      path: /data/mysql/data/
   – name: mysql-config
    configMap:
       name: mysql-mgr-0-cnf
      items:
         – key: mysql-mgr-0.cnf
          path: my.cnf

準備pod文件節點2

cat node2_pod.yaml  
apiVersion: v1
kind: Pod
metadata:
name: k8s3
 namespace: mysqldb
 labels:
  name: mysql-mgr
spec:
 nodeName: k8s3
 hostname: k8s3
 subdomain: mgrtest
 containers:
 – image: mysql:latest
   name: mysql-mgr-1
   imagePullPolicy: IfNotPresent
   command: [ “/bin/bash”, “-ce”, “cd /usr/bin && mysqld –initialize-insecure –user=mysql && mysqld_safe && tail -f /dev/null” ]
   ports:
     – containerPort: 3306
  volumeMounts:
   – name: tz-config
     mountPath: /etc/localtime
   – name: mysql-data
     mountPath: /data/mysql/data
   – name: mysql-config
    mountPath: /etc/my.cnf
     subPath: my.cnf
 volumes:
  – name: tz-config
     hostPath:
       path: /etc/localtime
   – name: mysql-data
     hostPath:
      path: /data/mysql/data/
   – name: mysql-config
    configMap:
       name: mysql-mgr-1-cnf
      items:
         – key: mysql-mgr-1.cnf
          path: my.cnf

準備pod文件節點3

cat node3_pod.yaml  
apiVersion: v1
kind: Pod
metadata:
name: k8s4
 namespace: mysqldb
 labels:
  name: mysql-mgr
spec:
 nodeName: k8s4
 hostname: k8s4
 subdomain: mgrtest
 containers:
 – image: mysql:latest
   name: mysql-mgr-2
   imagePullPolicy: IfNotPresent
   command: [ “/bin/bash”, “-ce”, “cd /usr/bin && mysqld –initialize-insecure –user=mysql && mysqld_safe && tail -f /dev/null” ]
   ports:
     – containerPort: 3306
  volumeMounts:
   – name: tz-config
     mountPath: /etc/localtime
   – name: mysql-data
     mountPath: /data/mysql/data
   – name: mysql-config
    mountPath: /etc/my.cnf
     subPath: my.cnf
 volumes:
  – name: tz-config
     hostPath:
       path: /etc/localtime
   – name: mysql-data
     hostPath:
      path: /data/mysql/data/
   – name: mysql-config
    configMap:
       name: mysql-mgr-2-cnf
      items:
         – key: mysql-mgr-2.cnf
          path: my.cnf

3、創建namespace,service,configmap,pod

kubectl create -f namespace.yaml 
kubectl create -f service.yaml
kubectl create -f mysql-mgr-cnf-0.yaml 
kubectl create -f mysql-mgr-cnf-1.yaml 
kubectl create -f mysql-mgr-cnf-2.yaml 
kubectl create -f node1_pod.yaml
kubectl create -f node2_pod.yaml 
kubectl create -f node3_pod.yaml

4、創建完成后查看狀態

1.查看pods狀態(看到node節點的mysql已經在運行)
# kubectl get pods -n mysqldb -o wideNAME  READY   STATUS    RESTARTS   AGE    IP               NODE   NOMINATED NODE   READINESS GATESk8s2  1/1     Running   0          112s   172.16.109.65    k8s2   <none>           <none>k8s3  1/1     Running   0          112s   172.16.219.1     k8s3   <none>           <none>k8s4  1/1     Running   0          111s   172.16.106.129   k8s4   <none>           <none>

5、配置MySQL8MGR#節點1操作


kubectl exec -it k8s2 -n mysqldb /bin/bash

alter user ‘root’@’localhost’ identified by ‘Mysql123!@#’;
set sql_log_bin=0;
create user rpl_user@’%’ identified by ‘Rpl_pass@123’;
grant replication slave on *.* to rpl_user@’%’;
flush privileges;
set sql_log_bin=1;
change master to master_user=’rpl_user’,master_password=’Rpl_pass@123′ for channel ‘group_replication_recovery’;
install PLUGIN group_replication SONAME ‘group_replication.so’;

reset master;
set global group_replication_single_primary_mode=FALSE;
set global group_replication_enforce_update_everywhere_checks=TRUE;
set global group_replication_bootstrap_group=ON;
start group_replication;
set global group_replication_bootstrap_group=OFF;
select * from performance_schema.replication_group_members;


1節點執行完后可以看到狀態圖
Centos8下 K8S 安裝配置Mysql8 多主MGR

節點2操作


kubectl exec -it k8s3 -n mysqldb /bin/bash

set sql_log_bin=0;
create user rpl_user@’%’ identified by ‘Rpl_pass@123’;
grant replication slave on *.* to rpl_user@’%’;
flush privileges;
set sql_log_bin=1;
change master to master_user=’rpl_user’,master_password=’Rpl_pass@123′ for channel ‘group_replication_recovery’;
install PLUGIN group_replication SONAME ‘group_replication.so’;

reset master;
set global group_replication_single_primary_mode=FALSE;
set global group_replication_enforce_update_everywhere_checks=TRUE;
set global group_replication_recovery_get_public_key=on;
start group_replication;
select * from performance_schema.replication_group_members;
Centos8下 K8S 安裝配置Mysql8 多主MGR

節點3操作

kubectl exec -it k8s4 -n mysqldb /bin/bash

set sql_log_bin=0;
create user rpl_user@’%’ identified by ‘Rpl_pass@123’;
grant replication slave on *.* to rpl_user@’%’;
flush privileges;
set sql_log_bin=1;
change master to master_user=’rpl_user’,master_password=’Rpl_pass@123′ for channel ‘group_replication_recovery’;
install PLUGIN group_replication SONAME ‘group_replication.so’;

reset master;
set global group_replication_single_primary_mode=FALSE;
set global group_replication_enforce_update_everywhere_checks=TRUE;
set global group_replication_recovery_get_public_key=on;
start group_replication;
select * from performance_schema.replication_group_members;
Centos8下 K8S 安裝配置Mysql8 多主MGR

配置完MGR后狀態為多主狀態

圖片

6、配置過程中問題及處理

問題namespaces”mysqldb” already exists

創建mysqldb的namespace時,因為已經存在一個mysqldb的namespace,報錯如下:

kubectl create -f namespace.yamlError from server (AlreadyExists): error when creating “namespace.yaml”: object is being deleted: namespaces “mysqldb” already exists
查看狀態也是Terminating的
Centos8下 K8S 安裝配置Mysql8 多主MGR

解決方式

1.獲取mysqldb的namespace下json格式文件# kubectl get namespace mysqldb -o json > /tmp/mysqldb.json

2.刪除掉spec里面指定的內容
圖片
3.新開一個終端窗口執行kubectl proxy –port=8081,監聽本地
# kubectl proxy –port=8081Starting to serve on 127.0.0.1:80814.執行
# curl -k -H “Content-Type: application/json” -X PUT –data-binary @mysqldb.json http://127.0.0.1:8081/api/v1/namespaces/mysqldb/finalize注意以上替換mysqldb名字5.執行完后,查看namespace,mysqldb的Terminating狀態已經沒有了
Centos8下 K8S 安裝配置Mysql8 多主MGR
Centos8下 K8S 安裝配置Mysql8 多主MGR

來源:IT那活兒,本文觀點不代表自營銷立場,網址:http://www.177516.tw/p/108603

發表評論

電子郵件地址不會被公開。 必填項已用*標注

技術服務
技術服務
關注抖音
關注抖音
侵權聯系
返回頂部
足球即时比分球探比分 新疆11选5后二 排列三跨度走势图彩经网 新疆18选7中奖金额 山西快乐10分走势图派彩电子 三分彩预测软件 澳门百家乐官网_Welcome 吉林快3和值尾走势图表 一定牛四川快乐12遗漏 腾讯分分彩扫码注册 PP电子登陆—点击进入 青海快三今天开奖号码 安徽时时彩开奖走势 腾讯分分彩官网下载安装 lmg视讯网投app 河北快3形态 幸运农场走势图技巧