mysql5.7 MGR配置


1. 規划

 

 

2 連接master報錯, 使用主機名連接,所有需要修改主機 /etc/hosts

cat /etc/hosts
127.0.0.1 localhost 172.18.12.2 master 172.18.12.3 slave1 172.18.12.4 slave2 172.18.12.5 slave3 172.18.12.6 slave4

 

 

3.設置mysql啟動參數

#關於group replication 一些參數
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery=1
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates = ON
binlog_checksum=NONE
slave_preserve_commit_order = ON #開啟並行復制相關
server_id=1 #第一個節點是1 ,第二個節點是2 ......
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=2-8 #根據cpu數量 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="172.18.12.2:23306" loose-group_replication_group_seeds="172.18.12.2:23306,172.18.12.3:23306,172.18.12.4:23306,172.18.12.5:23306,172.18.12.6:23306" loose-grup_replication_bootstrap_group=off

 

4.初始化:

mysqld --initialize


5.第一個節點啟動

mysqld --defaults-file=/etc/my.cnf &

6. 登錄到mysql, 創建一個賬戶,不記錄到binlog中

mysql -u root -p 

set
sql_log_bin=0;
create user
'feng'@'172.18.12.%'; grant replication slave on *.* to 'feng'@'172.18.12.%' identified by '123456'; set sql_log_bin=1;

 

7.  channel 的名字不能改變

root@localhost 03:07:  [(none)]> change master to master_user='feng', master_password='123456' FOR CHANNEL  'group_replication_recovery';

 

8. 安裝 加載group_replication插件

install plugin group_replication soname 'group_replication.so';
show plugins;

 

9. 查看group相關參數

root@localhost 03:11:  [(none)]> show global variables  like '%group%';

 

10. 設置第一個節點啟動為on

 set global group_replication_bootstrap_group=on;   #只在第一個節點使用

 

11. 啟動group_replication

start group_replication;

#啟動后報錯

  2020-03-25T13:31:11.636568+08:00 6 [Warning] Plugin group_replication reported: 'Group Replication requires slave-preserve-commit-order to be set to ON when using more than 1 applier threads.'

  slave_preserve_commit_order=on #並行復制相關 

 

12. 查看是否加入到組中

select * from performance_schema.replication_group_members;

root@localhost 05:50: [performance_schema]> select * from replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | a59bc963-5772-11ea-93aa-0242ac120c02 | master | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

 

 

 

 

 

二、加入二個節點172.18.12.3 節點

2.設置mysql啟動參數

#關於group replication 一些參數
master_info_repository = TABLE
relay_log_info_repository = TABLE relay_log_recovery=1 gtid_mode = on enforce_gtid_consistency = 1 log_slave_updates = ON
server_id=2 #第一個節點是1 ,第二個節點是2 ......
binlog_checksum=NONE
slave_preserve_commit_order = ON #開啟並行復制相關
slave_parallel_type=LOCIGCAL_CLOCK
slave_parallel_workers=2-8 #根據cpu數量

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="172.18.12.3:23306" loose-group_replication_group_seeds="172.18.12.2:23306,172.18.12.3:23306,172.18.12.4:23306,172.18.12.5:23306,172.18.12.6:23306" loose-grup_replication_bootstrap_group=off

 

初始化mysql,啟動mysql

mysql --initialize

mysqld --defaults-file=/etc/my.cnf &

 

 5. 登錄到mysql, 創建一個賬戶,不記錄到binlog中

mysql -u root -p 

set sql_log_bin=0; create user 'feng'@'172.18.12.%'; grant replication slave on *.* to 'feng'@'172.18.12.%' identified by '123456'; set sql_log_bin=1;

 

6.  channel 的名字不能改變

root@localhost 03:07:  [(none)]> change master to master_user='feng', master_password='123456' FOR CHANNEL  'group_replication_recovery';

 

7. 安裝 加載group_replication插件

install plugin group_replication soname 'group_replication.so';
show plugins;

 

10. 啟動group_replication

set global group_replication_allow_local_disjoint_gtids_join=ON;
start group_replication;

 

11. 查看狀態:

root@localhost 07:12:  [(none)]> show slave status for channel 'group_replication_recovery' \G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: master
                  Master_User: rpl_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: 
          Read_Master_Log_Pos: 4
               Relay_Log_File: slave1-relay-bin-group_replication_recovery.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: 
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 1534
              Until_Condition: SQL_VIEW_ID
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 2005
                Last_IO_Error: error connecting to master 'rpl_user@master:3306' - retry-time: 60  retries: 1
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0
                  Master_UUID: 
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 1
                  Master_Bind: 
      Last_IO_Error_Timestamp: 200225 07:15:55
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: group_replication_recovery
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

 

 

再次查看:

root@localhost 07:20:  [(none)]> show slave status for channel 'group_replication_recovery' \G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: <NULL>
                  Master_User: rpl_user
                  Master_Port: 0
                Connect_Retry: 60
              Master_Log_File: 
          Read_Master_Log_Pos: 4
               Relay_Log_File: slave1-relay-bin-group_replication_recovery.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: 
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 496
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0
                  Master_UUID: 
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 1
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 09440083-2b74-11ea-838b-549f3510fe78:1-4
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: group_replication_recovery
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

 

11. 查看是否加入到組中

root@localhost 07:21:  [performance_schema]> select * from replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 66576b31-579b-11ea-b037-0242ac120c02 | master      |        3306 | ONLINE       |
| group_replication_applier | 6808a18a-579b-11ea-97cd-0242ac120c03 | slave1      |        3306 | ONLINE       |
| group_replication_applier | 695065b9-579b-11ea-a932-0242ac120c05 | slave3      |        3306 | ONLINE       |
| group_replication_applier | 6bc82210-579b-11ea-bb3b-0242ac120c04 | slave2      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
4 rows in set (0.00 sec)

 

配置出現的問題:

1 [ERROR] Plugin group_replication reported: 'Gtid mode should be ON for Group Replication'

沒有打開GtID

2 Last_IO_Error: error connecting to master 'rpl_user@master:3306' - retry-time: 60  retries: 1

添加所有節點的主機名和ip的對應關系到/etc/hosts

3.  [ERROR] Plugin group_replication reported: '[GCS] Error on opening a connection to 172.17.12.6:23306 on local port: 23306.

/etc/my.cnf 配置文件 loose-group_replication_group_seeds ip地址寫錯了

 

4. 第二個節點加入MGR時報錯[

ERROR] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: f9418f39-8f6a-11ea-8e60-005056841c10:1 > Group transactions: 6c0d784d-8f66-11ea-bd2e-00505684742a:1,
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-5'
2020-05-06T16:09:46.375914+08:00 0 [ERROR] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'

解決辦法 需要設置參數,也就是兼容加入組
set global group_replication_allow_local_disjoint_gtids_join=ON;

 

12 創建測試數據庫(master可以寫入,其他節點不能寫入)

master:

root@localhost 05:52: [fengjian]> create database fengjian; root@localhost 05:52: [fengjian]> use fengjian; root@localhost 05:52: [fengjian]> create table test(id int, name varchar(60), primary key(id)); root@localhost 05:52: [fengjian]> insert into test values(1,'feng');


slave: 報錯,無法寫入

  root@localhost 08:18: [fengjian]> insert into test values(2,'su');
  ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement


查看其他節點所有節點的read_only 選項

master

 

 

slave1

 

 

 

 

 

Group replication 工作模式

1. 基於single-master 環境:

在group replication 配置中,默認模式是 single-master 模式, 只有一個節點可以進行寫操作,其他節點開啟 --super-read-only 模式, 當主幾點掛了, 其他節點會選出來一個新的master

 

在 single-master 上查看那個節點是 主節點:

root@localhost 08:25:  [performance_schema]> select variable_value from global_status where variable_name='group_replication_primary_member';
+--------------------------------------+
| variable_value                       |
+--------------------------------------+
| 43567e06-6e49-11ea-a1ef-0242ac110003 |
+--------------------------------------+

 

 

 

登錄到 其他節點上,查看 uuid

root@localhost 08:27:  [fengjian]> select @@server_uuid;
+--------------------------------------+
| @@server_uuid                        |
+--------------------------------------+
| 43567e06-6e49-11ea-a1ef-0242ac110003 |
+--------------------------------------+

 

 

multi-master 模式 (多主,性能有15%的損失)

如果要開啟multi-master 模式,需要在配置文件/etc/my.cnf 中指定

loose-group_replication_single_primary_mode=OFF; 
loose-group_replication_enforce_update_everywhere_checks=ON;

 

不管是 single-master 還是 multi-master ,我們只提供一台負責寫操作

 

集群重啟:

1. 滾動重啟

節點上執行 :  start group_replication;

 

2. 全部一起重啟(集體掉電)

第一個節點啟動(single-master 和 multi-master 都一樣)

要在每個節點執行 show master stauts; 如果那個gtid多,則設置成主節點。

set global_replication_bootstrap_group=on;

start group_replication;

 

其他節點 start  group-replication;

 

 

MGR 監控點講解:

可用性監控

root@localhost 09:28:  [performance_schema]> select member_id,member_host,member_state from replication_group_members where member_id=@@server_uuid;
+--------------------------------------+-------------+--------------+
| member_id                            | member_host | member_state |
+--------------------------------------+-------------+--------------+
| 66576b31-579b-11ea-b037-0242ac120c02 | master      | ONLINE       |
+--------------------------------------+-------------+--------------+

 

查看當前是不是可讀

root@localhost 09:32:  [performance_schema]> select * from performance_schema.global_variables where variable_name in ('read_only', 'super_read_only');
+-----------------+----------------+
| VARIABLE_NAME   | VARIABLE_VALUE |
+-----------------+----------------+
| read_only       | OFF            |
| super_read_only | OFF            |
+-----------------+----------------+

為可讀節點


復制是不是存在延遲:
對比獲得到的GTID和本節點執行的GTID是不是一致:

從遠程獲取的GTID:

SELECT Received_transaction_set FROM performance_schema.replication_connection_status WHERE Channel_name = 'group_replication_applier';


本節點執行的GTID:

select  @@global.gtid_executed;   不顯示結果

root@localhost 09:47: [performance_schema]> show global variables like '%gtid_executed%';
+----------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------+--------------------------------------------+
| gtid_executed | 09440083-2b74-11ea-838b-549f3510fe78:1-977 |


遠程獲取的GTID - 本節點執行的GTID = 延遲的GTID數

 

本節點執行隊列是不是有堆積(大於0表示有延遲):

select count_transactions_in_queue from replication_group_member_stats where member_id=@@server_uuid;

 

流控(flow control)
在MGR中如果節點落后集群中其它成員太多,就會發起讓其它節點等他完成在做的控制,這個叫流控。

當啟用: 
group_replication_flow_control_mode=QUOTA 是表示啟用流控。 流控默認通過兩個參數控制: group_replication_flow_control_applier_threshold (默認: 25000) group_replication_flow_control_certifier_threshold (默認: 25000)
也就說默認延遲在25000個GTID時,會對整個集群Block住寫操作。

 

當然,也可以允許,節點延遲,就如同我們主從結構,從節點延遲,不往上面發請求就可以。

關閉流控:

set global group_replication_flow_control_mode='DISABLED';

 

提示: 關閉流控制,注意查看是不是存在延遲,如果延遲,自已控制閥值不向上面發請求即可。 多IDC結構的MGR,建議關閉流控。

 

MGR調優參數


因為基本復制結構,所有的數據復制,還是邏輯的重放,所以優化也是復制優化點。
更改:

slave_parallel_type -> LOGICAL_CLOCK   #增強sql_thread個數:
slave_parallel_workers -> 2-8          #如果CPU瓶頸,網絡沒問題,減少CPU壓縮:
group_replication_compression_threshold = 1000000 -> 2000000
由原來的1M變成2M,再進行壓縮(主要針對大事務傳述優化)

 

 

MGR備份及新節點的加入

 

1. 通過備份工具,建立備份
2. 加載MGR插件
3. mysqldump -u root --single-transaction -A > full_bak.sql  其他從庫,備份
4. 新加入的mgr節點配置文件

  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="172.18.12.7:23306"
  loose-group_replication_group_seeds="172.18.12.2:23306,172.18.12.3:23306,172.18.12.4:23306,172.18.12.5:23306,172.18.12.6:23306,172.18.12.7:23306"
  loose-group_replication_bootstrap_group=off

5. mysql -u root -p  ; reset master ; mysql -u root -p < full_bak.sql
6. 可以加入集群的關鍵點: set global gtid_purged='xxx-xxxx-xxxx:id'
7. start group_replication;
8. use performance_schema; select * from replication_group_members;
 

root@localhost 08:52: [performance_schema]> show slave status FOR CHANNEL 'group_replication_recovery' \G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: <NULL>
Master_User: rpl_user
Master_Port: 0
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: slave3-relay-bin-group_replication_recovery.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 496
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_UUID:
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 1
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 09440083-2b74-11ea-838b-549f3510fe78:1-896
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name: group_replication_recovery
Master_TLS_Version:

 
        

如果binlog已經過期, start group_replication 啟動報錯,因為從庫的gtid信息已經刪除了,

 

 

 

 

引用

https://www.cnblogs.com/manger/p/7212039.html

 


免責聲明!

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



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