MySQL搭建集群有多種方式,現在單獨說說MGR方式的單主模式(一個主節點),MGR全稱MySQL Group Replication(Mysql組復制)
一、環境准備
服務器:192.168.7.121、192.168.7.131、192.168.7.141,在三台服務器上分別安裝MySQL及MySQL-shell
安裝MySQL:https://www.cnblogs.com/javasl/p/14650316.html
安裝MySQL-shell:https://www.cnblogs.com/javasl/p/14652345.html
二、MySQL配置
121服務器配置
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id=1 gtid_mode=on enforce_gtid_consistency=on binlog_checksum=none transaction_write_set_extraction = XXHASH64 loose-group_replication_recovery_use_ssl= ON loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446' loose-group_replication_start_on_boot = OFF loose-group_replication_local_address = '192.168.7.121:24901' loose-group_replication_group_seeds = '192.168.7.121:24901,192.168.7.131:24902,192.168.7.141:24903' loose-group_replication_bootstrap_group = OFF
131服務器配置
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id=2 gtid_mode=on enforce_gtid_consistency=on binlog_checksum=none log_slave_updates = ON loose-group_replication_recovery_get_public_key= ON loose-group_replication_recovery_use_ssl= ON loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446' loose-group_replication_start_on_boot = OFF loose-group_replication_local_address = '192.168.7.131:24902' loose-group_replication_group_seeds = '192.168.7.121:24901,192.168.7.131:24902,192.168.7.141:24903' loose-group_replication_bootstrap_group = OFF
141服務器配置
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id=3 gtid_mode=on enforce_gtid_consistency=on binlog_checksum=none log_slave_updates = ON loose-group_replication_recovery_get_public_key= ON loose-group_replication_recovery_use_ssl= ON loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446' loose-group_replication_start_on_boot = OFF loose-group_replication_local_address = '192.168.7.141:24903' loose-group_replication_group_seeds = '192.168.7.121:24901,192.168.7.131:24902,192.168.7.141:24903' loose-group_replication_bootstrap_group = OFF
三、服務器配置
1)映射3台服務器的主機名(每台服務器都如下配置)。文件路徑:/etc/hosts
192.168.7.121 mysql121 192.168.7.131 mysql131 192.168.7.141 mysql141
2)關閉3台服務器的SELINUX(暫時簡單粗暴的處理)。文件路徑:/etc/selinux/config
SELINUX=disabled
3)關閉3台服務器的防火牆(暫時簡單粗暴的處理)
systemctl disabled firewalld
4)設置3台服務器之間免秘鑰登錄。在121服務器上執行
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.7.131 ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.7.141
服務器配置完重啟一下。
四、創建集群
1、准備工作
1)每台機器的mysqlsh都連接一下3台機器的MySQL(三台服務器上都執行如下操作),以121舉例。
[root@localhost ~]# mysqlsh MySQL Shell 8.0.20 Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. MySQL JS > \c root@mysql121:3306 Creating a session to 'root@mysql121:3306' Please provide the password for 'root@mysql121:3306': ********** Save password for 'root@mysql121:3306'? [Y]es/[N]o/Ne[v]er (default No): y Fetching schema names for autocompletion... Press ^C to stop. Your MySQL connection id is 37 Server version: 8.0.20 MySQL Community Server - GPL No default schema selected; type \use <schema> to set one. MySQL mysql121:3306 ssl JS > \c root@mysql131:3306 Creating a session to 'root@mysql131:3306' Please provide the password for 'root@mysql131:3306': ********** Save password for 'root@mysql131:3306'? [Y]es/[N]o/Ne[v]er (default No): y Fetching schema names for autocompletion... Press ^C to stop. Closing old connection... Your MySQL connection id is 12 Server version: 8.0.20 MySQL Community Server - GPL No default schema selected; type \use <schema> to set one. MySQL mysql131:3306 ssl JS > \c root@mysql141:3306 Creating a session to 'root@mysql141:3306' Please provide the password for 'root@mysql141:3306': ********** Save password for 'root@mysql141:3306'? [Y]es/[N]o/Ne[v]er (default No): y Fetching schema names for autocompletion... Press ^C to stop. Closing old connection... Your MySQL connection id is 12 Server version: 8.0.20 MySQL Community Server - GPL No default schema selected; type \use <schema> to set one. MySQL mysql141:3306 ssl JS >
2)3台服務器都執行如下操作,以121服務器舉例。
MySQL mysql121:3306 ssl JS > dba.configureInstance();
MySQL mysql121:3306 ssl JS > dba.checkInstanceConfiguration("root@mysql121:3306");
2、創建集群
1)安裝組復制插件,3台服務器器都執行如下操作
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
2)創建集群(只在一台服務器執行即可)
MySQL mysql141:3306 ssl JS > var cluster = dba.createCluster('myCluster');
備注:只在主節點執行,怎么判斷哪台是主節點呢?先嘗試執行,如果是只讀的話,則換一台執行,或者在誰執行,誰是主節點?
3)添加121節點
cluster.addInstance('root@mysql121:3306');
4)添加131節點,同理,如上,地址改為mysql131
5)查看集群狀態
MySQL mysql141:3306 ssl JS > cluster.status()
MySQL mysql141:3306 ssl JS > cluster.status() { "clusterName": "myCluster", "defaultReplicaSet": { "name": "default", "primary": "mysql141:3306", "ssl": "REQUIRED", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "mysql121:3306": { "address": "mysql121:3306", "mode": "R/O", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.20" }, "mysql131:3306": { "address": "mysql131:3306", "mode": "R/O", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.20" }, "mysql141:3306": { "address": "mysql141:3306", "mode": "R/W", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.20" } }, "topologyMode": "Single-Primary" }, "groupInformationSourceMember": "mysql141:3306" }
6)查詢節點信息(隨便登錄一個節點)
mysql> select * from performance_schema.replication_group_members;
五、安裝MySQL-router
1、下載:https://downloads.mysql.com/archives/router/
2、安裝:rpm -ivh mysql-router-community-8.0.20-1.el7.x86_64.rpm
3、配置:vim /etc/mysqlrouter/mysqlrouter.conf。添加如下配置:
[routing:read_writer] bind_address = 192.168.7.121 bind_port = 7001 mode = read-write destinations = mysql121:3306,mysql131:3306,mysql141:3306 max_connections = 1024 protocol = classic [routing:read_only] bind_address = 192.168.7.121 bind_port = 7002 mode = read-only destinations = mysql121:3306,mysql131:3306,mysql141:3306 max_connections = 1024 protocol = classic
4、啟動:mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf &
六、測試集群
1、宕掉主節點A后,會從另外兩個中選擇出一個作為主節點,且A恢復后,不會成為主節點。
2、使用客戶端工具Navicat可以連接路由節點,IP:192.168.7.121,端口7001,用戶名密碼與實例節點一致。
3、JavaWeb應用程序,連接路由節點,且任意宕掉其中一個或兩個實例節點后,應用程序不受影響。