MySQL8.0搭建MGR集群(MySQL-shell、MySQL-router)


  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應用程序,連接路由節點,且任意宕掉其中一個或兩個實例節點后,應用程序不受影響。

 

 

 

 

  

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM