站長資訊網
        最全最豐富的資訊網站

        Mysql組復制

        組復制是一種可用于實現容錯系統的技術。 復制組是一個通過消息傳遞相互交互的 server 集群。通信層提供了原子消息(atomic message)和完全有序信息交互等保障機制。 這些是非常強大的功能,我們可以據此架構設計更高級的數據庫復制解決方案。

        MySQL 組復制以這些功能和架構為基礎,實現了基于復制協議的多主更新。復制組由多個 server成員構成,并且組中的每個 server 成員可以獨立地執行事務。但所有讀寫(RW)事務只有在沖突檢測成功后才會提交。只讀(RO)事務不需要在沖突檢測,可以立即提交。換句話說,對于任何 RW 事務,提交操作并不是由始發 server 單向決定的,而是由組來決定是否提交。準確地說,在始發 server 上,當事務準備好提交時,該 server 會廣播寫入值(已改變的行)和對應的寫入集(已更新的行的唯一標識符)。然后會為該事務建立一個全局的順序。最終,這意味著所有 server 成員以相同的順序接收同一組事務。因此,所有 server 成員以相同的順序應用相同的更改,以確保組內一致。
        在不同 server 上并發執行的事務可能存在沖突。 根據組復制的沖突檢測機制,對兩個不同的并發事務的寫集合進行檢測。如在不同的 server 成員執行兩個更新同一行的并發事務,則會出現沖突。排在最前面的事務可以在所有 server 成員上提交,第二個事務在源 server 上回滾,并在組中的其他 server 上刪除。 這就是分布式的先提交當選規則。

        復制組能夠以一種自動優先選擇的單主模式運行,在某個時間只有一個服務器接受更新 。但是對于更高優先級的用戶,組能夠以多主模式部署,所有的服務器都能夠接受更新,即使他們是同時發生的。

        組 復制中存在著一種內建的組成員關系服務用來保持組的視圖一致,并且在任意時間對于組中的所有的服務器都可用。MySQL服務器能夠退出或者加入組 中,而且視圖也會相應的更新。有時服務器可能會意外的退出組(故障),在這種情況下失敗檢測機制檢測這種情況并且告知復制組視圖發生了變化,這所有的一切 都是自動實現的。

        組復制是一種 share-nothing 復制方案,其中每個 server 成員都有自己的完整數據副本。

        MySQL 組復制協議:

        Mysql組復制

        在單主模式下部署組復制

        組中的每個 server 實例可以在獨立的物理機器上運行,也可以在同一臺機器上運行。 本節介紹如何在一臺物理機上創建具有三個 MySQL Server 實例的復制組。 這意味著需要三個數據目錄,每個 server 實例一個,每個實例都需要單獨配置。

        組架構圖:

        Mysql組復制

        第一步部署 MySQL 服務器的三個實例。

        安裝好MySQL服務之后首先要進行配置文件修改(三臺都要,注意server-id和loose-group_replication_local_address對應每臺主機),在原有配置基礎上增加以下內容:

        server5:(刪除之前的配置)

        [root@server5 ~]# cd /var/lib/mysql

        [root@server5 mysql]# rm -fr *

        [root@server5 mysql]# vim /etc/my.cnf

        server-id=5 (三臺主機Id不同即可)
        gtid_mode=ON
        enforce-gtid-consistency=true
        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="9433c640-cace-11e8-8a9d-525400c143b6" #表示將加入或者創建的復制組命名,可以自己指定.(這里加的是server6的uuid)
        loose-group_replication_start_on_boot=off #設置為Server啟動時不自動啟動組復制.
        loose-group_replication_local_address="172.25.0.121:24901"#綁定本地的172.25.0.121以及25901端口接受其他組成員的連接,IP地址必須為其他組成員可正常訪問.
        loose-group_replication_group_seeds="172.25.0.121:24901,172.25.0.122:24901,172.25.0.123:24901" #本行為告訴服務器當服務器加入組時,應當連接到這些IP種子服務器進行配置。本設置可以不是全部的組成員服務地址.
        loose-group_replication_bootstrap_group= off #配置是否自動引導組.

        loose-group_replication_single_primary_mode=FALSE #設置組自動選擇一個server來處理讀/寫工作。這個server是主(PRIMARY),所有其他的都是從.
        loose-group_replication_enforce_update_everywhere_checks=on #多主模式下為多主更新啟用或禁用嚴格一致性檢查。
        loose-group_replication_ip_whitelist=""172.25.0.0/24,127.0.0.1/8""#開啟白名單,認情況下只允許白名單連接到復制組如果是其他IP則需要配置。

        #使用的loose-前綴是指示Server啟用時尚未加載復制插件 也將繼續啟動

        Mysql組復制

        Mysql組復制

        重啟數據庫并設置密碼

        [root@server5 mysql]# /etc/init.d/mysqld restart

        [root@server5 mysql]# grep password /var/log/mysqld.log

        [root@server5 mysql]# mysql_secure_installation

        [root@server5 mysql]# mysql -u root -p

        mysql> SET SQL_LOG_BIN=0; #以下操作不寫入日志

        mysql> grant replication slave on *.* to user@'%' identified by 'Westos+123'; #創建復制用戶及密碼

        mysql> flush privileges;

        mysql> SET SQL_LOG_BIN=1;

        mysql> change master to master_user='user',master_password='Westos+123' for channel 'group_replication_recovery';

        #這個復制跟普通的change master命令有區別,并不需要指定master是誰,但需要指定通道為’group_replication_recovery’。

        mysql> install plugin group_replication soname 'group_replication.so';#安裝組復制插件

        mysql> show plugins;

        Mysql組復制

        mysql> set global group_replication_bootstrap_group=ON;

        mysql> start group_replication;

        mysql> set global group_replication_bootstrap_group=OFF;

        mysql> select * from performance_schema.replication_group_members;

        #此引導應僅由單個 sever 獨立完成,該 server 啟動組并 且只啟動一次。 這就是為什么引導配置選項的值不保存在配置文件中的原因。 如果將其保 存在配置文件中,則在重新啟動時,server 會自動引導具有相同名稱的第二個組。 這將導致兩個不同的組具有相同的名稱.

        Mysql組復制

        server6和server7中

        修改配置文件后,重啟數據庫并設置密碼

        [root@server7 mysql]# vim /etc/my.cnf

        Mysql組復制

        mysql> SET SQL_LOG_BIN=0;

        mysql> GRANT REPLICATION SLAVE ON *.* TO user@'%' IDENTIFIED BY 'Westos+123';

        mysql>flush privileges;

        mysql> reset master;

        mysql> SET SQL_LOG_BIN=1;

        mysql>change master to master_user='user',master_password='Westos+123' for channel 'group_replication_recovery';

        mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';

        mysql> START GROUP_REPLICATION;

        mysql> SELECT * FROM performance_schema.replication_group_members;

        Mysql組復制

        server6中配置相同

        Mysql組復制

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

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品部在线观看| 亚洲精品成人区在线观看| 欧美精品在线免费| 国产亚洲综合成人91精品| 亚洲国产精品专区在线观看| 国产精品99精品视频网站| 69国产成人综合久久精品| 无码人妻精品一区二区三18禁| 国产在线国偷精品免费看| 久久精品国产99国产电影网| 久久亚洲精品成人AV| 亚洲国模精品一区| 蜜臀精品无码AV在线播放| 国产精品午夜无码AV天美传媒| 九九精品免视看国产成人| www.久久精品| av国内精品久久久久影院| 久久久久亚洲精品无码蜜桃| 中文字幕精品视频在线| 合区精品中文字幕| 欧美精品色婷婷五月综合| 99久久亚洲综合精品网站| 久久九九青青国产精品| 精品国产综合成人亚洲区| 国产成人精品免费视频动漫| 精品免费人成视频app| 久久亚洲精品中文字幕| 日韩国产精品无码一区二区三区| 亚洲精品无码久久久久| 日韩精品无码久久久久久| 日韩精品久久无码人妻中文字幕| 一本久久a久久精品综合香蕉| 久久精品亚洲欧美日韩久久| 久久亚洲国产精品123区| 欧美精品亚洲人成在线观看| 青青草97国产精品免费观看| 欧美亚洲另类精品第一页| 亚洲AV无码之日韩精品| 亚洲综合av永久无码精品一区二区 | 久久久久久一区国产精品| 国产亚洲精品拍拍拍拍拍|