1. 程式人生 > >mysql5.7實現組複製(MGR)

mysql5.7實現組複製(MGR)

實驗主機server1,7,8:

組複製原理:

組複製是一種可用於實現容錯系統的技術。 複製組是一個通過訊息傳遞相互互動的 server 叢集。通訊層提供了原子訊息(atomic message)和完全有序資訊互動等保障機制
實現了基於複製協議的多主更新
複製組由多個 server成員構成,並且組中的每個 server 成員可以獨立地執行事務。但所有讀寫(RW)事務只有在衝突檢測成功後才會提交。只讀(RO)事務不需要在衝突檢測,可以立即提交。句話說,對於任何 RW 事務,提交操作並不是由始發 server 單向決定的,而是由組來決定是否提交。準確地說,在始發 server 上,當事務準備好提交時,該 server 會廣播寫入值(已改變的行)和對應的寫入集(已更新的行的唯一識別符號)。然後會為該事務建立一個全域性的順序。最終,這意味著所有 server 成員以相同的順序接收同一組事務。因此,所有 server 成員以相同的順序應用相同的更改,以確保組內一致。

mysql組複製協議:
這裡寫圖片描述
組複製是一種 share-nothing 複製方案,其中每個 server 成員都有自己的完整資料副本。

故障檢測:

故障檢測是提供關於哪些 server 可能已死的資訊(猜測)的分散式服務。
某個 server 無響應時觸發猜測,組中其餘成員進行協調決定以排除給定成員。如果某個 server 與組的其餘成員隔離,則它會懷疑所有其他 server 都失敗了。由於無法與組達成協議(因為它無法確保仲裁成員數),其懷疑不會產生後果。 當伺服器以此方式與組隔離時,它無法執行任何本地事務。
線上 server 列表通常稱為檢視,新成員server的加入離開,無論是自願還是被迫的離開,該組都會動態地重新規劃其配置,並觸發檢視更新

MGR的限制:
僅支援InnoDB表,並且每張表一定要有一個主鍵,用於做write set的衝突檢測;
必須開啟GTID特性,二進位制日誌格式必須設定為ROW,用於選主與write set
COMMIT可能會導致失敗,類似於快照事務隔離級別的失敗場景
目前一個MGR叢集最多支援9個節點
不支援外來鍵於save point特性,無法做全域性間的約束檢測與部分部分回滾
二進位制日誌不支援binlog event checksum

三臺主機安裝mysql5.7並初始化密碼。
編寫配置檔案:

vim /etc/my.cnf

新增:
server_id=1    #三臺主機的id號不同
gtid_mode=ON enforce_gtid_consistency=ON master_info_repository=TABLE relay_log_info_repository=TABLE binlog_checksum=NONE log_slave_updates=ON log_bin=binlog binlog_format=ROW transaction_write_set_extraction=XXHASH64 #指示Server必須為每個事務收集寫集合,並使用XXHASH64雜湊演算法將其編碼為雜湊 loose-group_replication_group_name="8053c671-0622-11e8-a300-525400b9c5e8" #表示將加入或者建立的複製組命名為8053c671-0622-11e8-a300-525400b9c5e8,可以自己指定 loose-group_replication_start_on_boot=off #設定為Server啟動時不自動啟動組複製 loose-group_replication_local_address= "172.25.92.1:24901" #繫結本地的172.25.92.1以及25901埠接受其他組成員的連線,IP地址必須為其他組成員可正常訪問 loose-group_replication_group_seeds="172.25.92.2:24901,172.25.92.7:24901,172.25.92.8:24901" #本行為告訴伺服器當伺服器加入組時,應當連線到172.25.92.2:24901,172.25.92.7:24901,172.25.92.8:24901這些種子伺服器進行配置。本設定可以不是全部的組成員服務地址 loose-group_replication_bootstrap_group= off #配置是否自動引導組 loose-group_replication_single_primary_mode=FALSE #設定組自動選擇一個 server 來處理讀/寫工作。 這個 server 是主(PRIMARY),所有其他的都是從 loose-group_replication_enforce_update_everywhere_checks=FALSE #多主模式下為多主更新啟用或禁用嚴格一致性檢查。 loose-group_replication_ip_whitelist="172.25.92.0/24" #開啟白名單,認情況下只允許白名單連線到複製組,如果是其他IP則需要配置。 #使用的loose-字首是指示Server啟用時尚未載入複製外掛也將繼續啟動

server1:


mysql -uroot -p
mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl[email protected]'%' IDENTIFIED BY '[email protected]';      #建立複製使用者及密碼

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='[email protected]' FOR CHANNEL 'group_replication_recovery';   #這個複製跟普通的change master命令有區別,並不需要指定master是誰,但需要指定通道為’group_replication_recovery’。 

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; #安裝一個group_replicaiton 的plugin
Query OK, 0 rows affected (0.16 sec) 

mysql> SHOW PLUGINS;

mysql> SET GLOBAL group_replication_bootstrap_group=ON;  #此引導應僅由單個 sever 獨立完成,該 server 啟動組並且只啟動一次。 這就是為什麼引導配置選項的值不儲存在配置檔案中的原因。 如果將其儲存在配置檔案中,則在重新啟動時,server 會自動引導具有相同名稱的第二
個組。 這將導致兩個不同的組具有相同的名稱
Query OK, 0 rows affected (0.00 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (1.78 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;  #檢視組成員狀態
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 82aae2a9-05d5-11e8-9a44-525400b9c5e8 | server1     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

server7和server8:

先修改配置檔案。
mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl[email protected]'%' IDENTIFIED BY '[email protected]';

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='[email protected]' FOR CHANNEL 'group_replication_recovery';

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.16 se
mysql> select * from plugin;
+-------------------+----------------------+
| name              | dl                   |
+-------------------+----------------------+
| group_replication | group_replication.so |
| validate_password | validate_password.so |
+-------------------+----------------------+
2 rows in set (0.03 sec)

mysql> delete from plugin where name='validate_password';
Query OK, 1 row affected (0.17 sec)

mysql> select * from plugin;
+-------------------+----------------------+
| name              | dl                   |
+-------------------+----------------------+
| group_replication | group_replication.so |
+-------------------+----------------------+
1 row in set (0.00 sec)

mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
Query OK, 0 rows affected (0.00 sec)


mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (44,88 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 379fe31a-0624-11e8-8636-525400f194e5 | server8     |        3306 | ONLINE       |
| group_replication_applier | 82aae2a9-05d5-11e8-9a44-525400b9c5e8 | server1     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+------------

配置過程常見的錯誤:
1,來源IP沒有在白名單列表中,所以連線拒絕
2,沒有配置同步賬號跟密碼,使用的是空密碼進行同步。 需要為複製通道group_replication_recovery設定同步資訊:CHANGE MASTER TO MASTER_USER=’mysqlsync’, MASTER_PASSWORD=’mysqlsync_password’ FOR CHANNEL ‘group_replication_recovery’;
3,刪除validate_password密碼驗證外掛。

相關推薦

mysql5.7實現複製MGR

實驗主機server1,7,8: 組複製原理: 組複製是一種可用於實現容錯系統的技術。 複製組是一個通過訊息傳遞相互互動的 server 叢集。通訊層提供了原子訊息(atomic message)和完全有序資訊互動等保障機制 實現了基於複製協議的多主更

mysql5.8實現複製MGR

1.什麼是MYSQL GROUP REPLICATE? MySQL Group Replication(下簡稱MGR)準確來說是官方推出的高可用解決方案,基於原生複製技術,並以外掛的方式提供。 通過Paxos協議提供資料庫叢集節點資料強一致保證,掃清了MySQL進入金融行

mysql5.7主從同步複製基於二進位制日誌檔案binary log file

MySQL資料庫自身提供的主從複製功能可以方便的實現資料的多處自動備份,實現資料庫的拓展。多個數據備份不僅可以加強資料的安全性,通過實現讀寫分離還能進一步提升資料庫的負載效能。 下圖就描述了一個多個數據庫間主從複製與讀寫分離的模型: 在一主多從的資料庫體系中,多個從伺

基於centos6的mysql5.7.13主從部署

linux mysql5.7.13 安裝 部署基於centos6的mysql5.7.13主從部署(一)一、實驗環境:兩臺主機安裝Centos6.7 32位操作系統;兩臺Linux安裝同一版本的MySQL,這裏使用mysql5.7.13;mysql1的IP:192.168.100.129mysql2的IP:1

基於centos6的mysql5.7.13主從部署

linux mysql主從 部署基於centos6的mysql5.7.13主從部署(二)一、部署主mysql說明:mysql1是主機,mysql2是備機。創建庫[[email protected]/* */ ~]# mysql -uroot -p123456mysql> create da

基於centos6的mysql5.7.13主從部署

linux mysql主從 部署基於centos6的mysql5.7.13主從部署(三) 主從測試登入(主)mysql1[[email protected]/* */ ~]# mysql -uroot -p123456mysql> unlock tables; #解鎖,對應上一章節的表的

CentOS7下安裝MySQL5.7安裝與配置YUM

centos7下安裝mysql5.7安裝與配置(yum) CentOS7下安裝MySQL5.7安裝與配置(YUM) 安裝環境:CentOS7 64位 MINI版,安裝MySQL5.71、配置YUM源 在MySQL官網中下載YUM源rpm安裝包:http://dev.mysql.co

CentOS7 64位下MySQL5.7安裝與配置YUM

isa 插件 lan 修改 文件路徑 res http off head 原文:https://www.linuxidc.com/Linux/2016-09/135288.htm 安裝環境:CentOS7 64位 MINI版,安裝MySQL5.7 1、配置YUM源 在M

物理機與遠端伺服器或者虛擬機器實現檔案複製SCP

1.使用SCP命令實現 參考:https://blog.csdn.net/yhblog/article/details/83927141 2.使用filezilla工具實現檔案複製 注:使用filezilla傳輸前需要填寫遠端伺服器ip,使用者名稱,密碼(填寫使用者名稱最好填寫要用

mysql5.7下載與安裝windows10

 官網下載地址:https://dev.mysql.com/downloads/mysql/ 我電腦是64位,所以這下載的是64位的下載檔案,點選下載      開啟下載檔案解壓到指定檔案目錄。(我這裡解壓目錄為E:\mysq

CentOS7-64位下 MySQL5.7 安裝與配置YUM

1、配置YUM源     在MySQL官網中下載YUM源rpm安裝包     http://dev.mysql.com/downloads/repo/yum/          # 下載MySQL源安裝包     [[email protected] ~]# w

mysql5.7.17安裝步驟win

寫這篇部落格主要是方便我自己下次安裝,網上的安裝流程自己總是有些感覺這裡少,那裡版本太老等等,所以在這次安裝完之後做個備份。 廢話少說,開始吧。 首先提醒一下如果自己電腦之前裝過mysql的話,很有可能會出現問題,如服務名被佔用,mysql未關閉等。 我會在第三步安裝時說明

【MySQL】mysql實現主從複製Linux

前言 原理         原理這個東西上次沒有寫,一併補上。         Master上有一個IO執行緒,Slave上有兩個執行緒,分別是IO和SQL。下面是主從複製五步原理。 1、Slav

Java中實現檔案複製servlet

String filePath = request.getParameter("filePath");filePath = request.getServletContext().getRealPath("/") + filePath;String targetPath =

MySQL5.7效能優化系列——SQL語句優化2——子查詢-派生表-檢視--概述

章節內容: 使用Semi-join連線優化子查詢、派生表、檢視 使用Materialization優化子查詢 優化派生表、檢視 使用Exist 策略優化子查詢 概述 in或者any子查詢 MySQL查詢優化器具有不同的策略來評估子查詢。對於IN(

Centos7+Mysql5.7實現主從複製

一、Master主伺服器配置(192.168.30.201) 找到mysql配置檔案my.cnf在末尾加上: find / -name my.cnf log-bin=mysql-bin #slave會基於此log-bin來做replication

Centos6.8 下 部署Mysql複製MySQL Group Replication之多主模式5.7新特性

MySQL Group Replication(簡稱MGR)是MySQL官方於2016年12月推出的一個全新的高可用與高擴充套件的解決方案。MySQL組複製提供了高可用、高擴充套件、高可靠的MySQL叢集服務。 1.關於MGR介紹 1.1提供的特性:

Mysql 5.7.1.0 實現主從複製master-slave

開始前 請 保證兩臺主機的 防火牆、防毒軟體 不會阻止兩臺主機的正常通訊 。下面通過6步操作實現主從複製!

mysql5.7配置文件僅供參考

type packet nod def lock sort commit timestamp sql [client] port = 3306 socket = /tmp/mysql.sock default-character-set = utf8 [mysqld]

Vue實現音樂播放器:輪播圖

item [] tin neo pic () client link ons 輪播圖組件 <template> <div class="slider" ref="slider"> <div class="slider-