mysql mgr集群部署


Mysql Mgr(MySQL Group Replication)集群部署

環境:

OS:Centos 7

Mysql版本:社區版 5.7.22

 

 

1.安裝步驟

1.1 環境部署

 

節點角色

ip

節點1

192.168.1.134

節點2

192.168.1.135

節點3

192.168.1.136

 

 

 

 

 

 

 

 

1.2 下載安裝介質

可以到mysql官網下載,我這里下載的版本是:5.7.27

 

1.3 節點1(192.168.1.134)安裝

 

1.3.1   解壓安裝

[root@localhost soft]# tar -xvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz

轉移到安裝目錄

[root@localhost soft]# mv mysql-5.7.27-linux-glibc2.12-x86_64 /opt/mysql_mgr

  

1.3.2   創建相應的目錄

  

[root@localhost mysql_mgr]# cd /opt/mysql_mgr

[root@localhost mysql_mgr]# mkdir data      ##數據文件目錄            

[root@localhost mysql_mgr]# mkdir conf      ## 配置文件目錄

[root@localhost mysql_mgr]# mkdir -p mysqllog/relaylog ##主從環境relaylog

[root@localhost mysql_mgr]# mkdir -p mysqllog/logfile  ##錯誤日志文件

[root@localhost mysql_mgr]# mkdir -p mysqllog/binlog   ##binlog文件

 修改目錄權限給到mysql用戶(若系統沒有該用戶的話,可以創建)

 [root@localhost mysql_mgr]# cd /opt

[root@localhost opt]# chown -R mysql:mysql ./mysql_mgr

 

1.3.3   創建配置文件

 

[mysqld]

port=3306

basedir=/opt/mysql_mgr

datadir=/opt/mysql_mgr/data

character-set-server=utf8mb4

max_connections = 1500

show_compatibility_56=on

 

 

server_id=1

gtid_mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE

 

log_bin=/opt/mysql_mgr/mysqllog/binlog/binlog

log_slave_updates=ON

binlog_format=ROW

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_index=/opt/mysql_mgr/mysqllog/relaylog/slave-relay-bin.index

relay_log=/opt/mysql_mgr/mysqllog/relaylog/relaylog-binlog

 

##集群部分

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=OFF

loose-group_replication_local_address= "192.168.1.134:33061"

loose-group_replication_group_seeds= "192.168.1.134:33061,192.168.1.135:33061,192.168.1.136:33061"

loose-group_replication_bootstrap_group=OFF

report_host=192.168.1.134

report_port=3306

 

 

1.3.4   初始化數據庫

[mysql@localhost bin]$ cd /opt/mysql_mgr/bin

[mysql@localhost bin]$ ./mysqld --initialize-insecure --basedir=/opt/mysql_mgr --datadir=/opt/mysql_mgr/data --user=mysql

 

2019-09-03T03:00:25.190551Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2019-09-03T03:00:26.960483Z 0 [Warning] InnoDB: New log files created, LSN=45790

2019-09-03T03:00:27.273154Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2019-09-03T03:00:27.411863Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: fb59af57-cdf6-11e9-bf83-525400c8dc1f.

2019-09-03T03:00:27.435468Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2019-09-03T03:00:27.436258Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

 

 

 

1.3.5   啟動數據庫

 

./mysqld_safe --defaults-file=/opt/mysql_mgr/conf/my.cnf --user=mysql &

  

1.3.6   登陸

這里密碼為空,不用輸入密碼,為了安全起見安裝完成后自行修改密碼

[mysql@localhost bin]$ ./mysql -h localhost -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.7.27-log MySQL Community Server (GPL)

 

Copyright (c) 2000, 2019, 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 '\h' for help. Type '\c' to clear the current input statement.

 

mysql> show databases

    -> ;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

4 rows in set (0.01 sec)

 

mysql> select version();

+------------+

| version()  |

+------------+

| 5.7.27-log |

+------------+

1 row in set (0.00 sec)

 

 

1.4 節點2(192.168.1.135)安裝

 

安裝部署跟節點1一致,只是配置文件需要適當修改

1.4.1   創建配置文件

拷貝一個節點1的過來修改即可,修改紅色部分

 

[mysqld]

port=3306

basedir=/opt/mysql_mgr

datadir=/opt/mysql_mgr/data

character-set-server=utf8mb4

max_connections = 1500

show_compatibility_56=on

 

 

server_id=135

gtid_mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE

 

log_bin=/opt/mysql_mgr/mysqllog/binlog/binlog

log_slave_updates=ON

binlog_format=ROW

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_index=/opt/mysql_mgr/mysqllog/relaylog/slave-relay-bin.index

relay_log=/opt/mysql_mgr/mysqllog/relaylog/relaylog-binlog

 

##集群部分

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=OFF

loose-group_replication_local_address= "192.168.1.135:33061"

loose-group_replication_group_seeds= "192.168.1.134:33061,192.168.1.135:33061,192.168.1.136:33061"

loose-group_replication_bootstrap_group=OFF

report_host=192.168.1.135

report_port=3306

 

 

 

1.4.2   啟動數據庫

 

./mysqld_safe --defaults-file=/opt/mysql_mgr/conf/my.cnf --user=mysql &

 

 

1.5 節點3(192.168.1.136)安裝

1.5.1   創建配置文件

 

[mysqld]

port=3306

basedir=/opt/mysql_mgr

datadir=/opt/mysql_mgr/data

character-set-server=utf8mb4

max_connections = 1500

show_compatibility_56=on

 

 

server_id=136

gtid_mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE

 

log_bin=/opt/mysql_mgr/mysqllog/binlog/binlog

log_slave_updates=ON

binlog_format=ROW

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_index=/opt/mysql_mgr/mysqllog/relaylog/slave-relay-bin.index

relay_log=/opt/mysql_mgr/mysqllog/relaylog/relaylog-binlog

 

##集群部分

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=OFF

loose-group_replication_local_address= "192.168.1.136:33061"

loose-group_replication_group_seeds= "192.168.1.134:33061,192.168.1.135:33061,192.168.1.136:33061"

loose-group_replication_bootstrap_group=OFF

report_host=192.168.1.136

report_port=3306

 

 

1.5.2     啟動數據庫

 

./mysqld_safe --defaults-file=/opt/mysql_mgr/conf/my.cnf --user=mysql &

 

 

1.6 單組模式配置集群

1.6.1 安裝MGR插件(所有節點執行)

 

每個節點上都要執行

[mysql@localhost bin]$ ./mysql -h localhost -uroot

mysql> install plugin group_replication soname 'group_replication.so';

Query OK, 0 rows affected (0.04 sec)

 

1.6.2 設置復制賬號(所有節點執行)

  

#設置復制賬號

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER repl@'%' IDENTIFIED BY 'repl';

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

 

 

1.6.3 啟動MGR單主模式(節點上192.168.1.134執行)

 # 啟動MGR,在主庫(192.168.1.134)上執行

mysql> set global group_replication_bootstrap_group=on;

mysql> start group_replication;

mysql> set global group_replication_bootstrap_group=off;

查看mgr組信息

mysql> SELECT * FROM performance_schema.replication_group_members;

 

 

#其他節點加入MGR,在從庫(192.168.1.135,192.168.1.136)上執行

mysql> start group_replication;

 

在節點1上查看mgr組信息

mysql> SELECT * FROM performance_schema.replication_group_members;

 

 

查看那個是主節點:

  

mysql> select * from performance_schema.global_status where variable_name='group_replication_primary_member';

  

可以看出目前192.168.1.134是主節點

  

1.6.4   驗證

1.6.4.1 主庫寫入重庫查詢

在主庫上(192.168.1.134)創建數據庫並創建表寫入測試數據

 

create table tb_test

(id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵id',

name varchar(64),

PRIMARY KEY (id)

);

 

insert into tb_test values(1,'name1');

insert into tb_test values(2,'name2');

insert into tb_test values(3,'name3');

insert into tb_test values(4,'name4');

insert into tb_test values(5,'name5');

insert into tb_test values(6,'name6');

insert into tb_test values(7,'name7');

insert into tb_test values(8,'name8');

insert into tb_test values(9,'name9');

insert into tb_test values(10,'name10');

 

 

分別從另外2個從庫查詢數據

192.168.1.135從庫查詢

mysql> select * from tb_test;

+----+--------+

| id | name   |

+----+--------+

|  1 | name1  |

|  2 | name2  |

|  3 | name3  |

|  4 | name4  |

|  5 | name5  |

|  6 | name6  |

|  7 | name7  |

|  8 | name8  |

|  9 | name9  |

| 10 | name10 |

+----+--------+

10 rows in set (0.00 sec)

 

 

192.168.1.136從庫查詢

mysql> select * from tb_test;

+----+--------+

| id | name   |

+----+--------+

|  1 | name1  |

|  2 | name2  |

|  3 | name3  |

|  4 | name4  |

|  5 | name5  |

|  6 | name6  |

|  7 | name7  |

|  8 | name8  |

|  9 | name9  |

| 10 | name10 |

+----+--------+

10 rows in set (0.00 sec)

 

1.6.4.2 嘗試從庫寫入

192.168.1.135從庫嘗試寫入

mysql> insert into tb_test values(11,'name11');

ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

 

192.168.1.136從庫嘗試寫入

mysql> insert into tb_test values(11,'name11');

ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

 

 

1.6.4.3 關閉主庫

關閉主庫節點192.168.1.134

[mysql@localhost bin]$ ./mysqladmin -h localhost -uroot shutdown

 

登陸其中一個從庫檢查mgr組信息\

SELECT * FROM performance_schema.replication_group_members;

  

可以發現當前的節點只有2個了,下面看下目前那個是主庫

select * from performance_schema.global_status where variable_name='group_replication_primary_member';

  

 

可以發現192.168.1.136已經成為主節點,嘗試在該節點上寫入數據

mysql> insert into tb_test values(11,'name11');

Query OK, 1 row affected (0.09 sec)

 

寫入成功

 

1.6.4.4 啟動之前關閉的主庫

192.168.1.134上操作

[mysql@localhost bin]$ ./mysqld_safe --defaults-file=/opt/mysql_mgr/conf/my.cnf --user=mysql &

 

SELECT * FROM performance_schema.replication_group_members;

 

select * from performance_schema.global_status where variable_name='group_replication_primary_member';

 

 

可以看到當前該節點沒有加入到mgr,這個時候需要執行如下命令

mysql> start group_replication;

啟動后成為從庫

  

可以看到啟動后該節點不會為主庫,而是成為從庫

 

 

1.6.4.5 所有的節點都關閉然后啟動

三個節點執行關閉命令

./mysqladmin -h localhost -uroot shutdown 

 

然后啟動

./mysqld_safe --defaults-file=/opt/mysql_mgr/conf/my.cnf --user=mysql &

 

啟動后發現目前是沒有mgr組信息的

  

需要執行如下命令啟動mgr

 主節點執行(要想那個成為主節點就執行如下命令):

set global group_replication_bootstrap_group=on;

start group_replication;

set global group_replication_bootstrap_group=off;

 

  其他從節點執行:

start group_replication;

 

 

1.7 單主切換到多主模式

 

# 停止組復制(所有節點執行):

mysql> stop group_replication;

mysql> set global group_replication_single_primary_mode=off;

mysql> set global group_replication_enforce_update_everywhere_checks=on;

 

# 隨便選擇某個節點執行

mysql> set global group_replication_bootstrap_group=on;

mysql> start group_replication;

mysql> set global group_replication_bootstrap_group=off;

 

# 其他節點執行

mysql> start group_replication;

  

查看節點信息

 

 可以發現group_replication_primary_member為空,說明該模式為多主模式

 

嘗試每個節點寫入數據:

192.168.1.134節點寫入:

insert into tb_test values(12,'name12');

 

192.168.1.135節點寫入:

insert into tb_test values(13,'name13');

 

192.168.1.136節點寫入:

insert into tb_test values(14,'name14');

 

 說明當前每個節點都是主節點同時可以寫入

  

1.8 多主切換回到單主模式

 

# 所有節點執行

mysql> stop group_replication;

mysql> set global group_replication_enforce_update_everywhere_checks=OFF;

mysql> set global group_replication_single_primary_mode=ON;

 

#主節點執行

set global group_replication_bootstrap_group=on;

start group_replication;

set global group_replication_bootstrap_group=off;

 

 

##其他節點

start group_replication;

   

查看當前主節點

 

 

1.9 遇到的錯誤

1.9.1   表必須有主鍵

mysql> insert into tb_test values(1,'name1');

ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.

 

 

附上文檔:

 


免責聲明!

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



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