1. 程式人生 > >MGP(MYSQL組複製)實現高可靠的 MySQL 叢集服務

MGP(MYSQL組複製)實現高可靠的 MySQL 叢集服務

什麼是MGP:

MySQL 組複製提供了高可用、高擴充套件、
高可靠的 MySQL 叢集服務。高一致性,基於原生複製及 paxos 協議的組複製技術,
並以外掛的方式提供,提供一致資料安全保證;高容錯性,只要不是大多數節點
壞掉就可以繼續工作,有自動檢測機制,當不同節點產生資源爭用衝突時,不會
出現錯誤,按照先到者優先原則進行處理,並且內建了自動化腦裂防護機制;高
擴充套件性,節點的新增和移除都是自動的,新節點加入後,會自動從其他節點上同
步狀態,直到新節點和其他節點保持一致,如果某節點被移除了,其他節點自動
更新組資訊,自動維護新的組資訊;高靈活性,有單主模式和多主模式,單主模
式下,會自動選主,所有更新操作都在主上進行;多主模式下,所有 server
都 可以同時處理更新操作。

實驗環境使用了全新的虛擬機器:

server1:172.25.254.1
server2:172.25.254.2
server3:172.25.254.3

在三個節點均安裝mysql相關安裝包,開啟mysqld:
安裝包:

mysql-community-client-5.7.17-1.el6.x86_64.rpm
mysql-community-common-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-compat
-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm

這裡寫圖片描述
三個節點均做搭建最初實驗環境:

[root@server1 ~]# /etc/init.d/mysqld start
Initializing MySQL database:                               [  OK  ]
Installing validate password plugin:                       [  OK  ]
Starting mysqld:                                           [  OK
]

這裡寫圖片描述
在server1:

[[email protected] ~]# /etc/init.d/mysqld stop
Stopping mysqld:                                           [  OK  ]
[[email protected] ~]# cd /var/lib/mysql
[[email protected] mysql]# ls
auto.cnf         client-key.pem  ib_logfile1         public_key.pem
ca-key.pem       ib_buffer_pool  mysql               server-cert.pem
ca.pem           ibdata1         performance_schema  server-key.pem
client-cert.pem  ib_logfile0     private_key.pem     sys
[[email protected] mysql]# rm -fr *
[[email protected] mysql]# vim /etc/my.cnf
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server_id=1
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="ae6473bb-9cad-11e8-8abc-52540089f226"
告知外掛,正在加入或建立的組要命名為
loose-group_replication_start_on_boot=off
指示外掛在 server 啟動時不自動啟動組複製。
loose-group_replication_local_address= "172.25.254.1:24901"
告訴外掛使用 IP 地址 127.0.0.1 或本地主機,埠 24901 用於接受來自組中其他成員的傳入連線。
loose-group_replication_group_seeds="172.25.254.1:24901,172.25.254.2:24901,172.25.254.3:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off
loose-group_replication_enforce_update_everywhere_checks=on
loose-group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"

UUID在任何一個虛擬機器檢視即可
這裡寫圖片描述
這裡寫圖片描述

[root@server1 mysql]# /etc/init.d/mysqld start
Initializing MySQL database:                               [  OK  ]
Installing validate password plugin:                       [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@server1 mysql]# grep password /var/log/mysqld.log  檢視密碼
2018-08-10T14:59:24.605148Z 1 [Note] A temporary password is generated for root@localhost: W7zPaE7qr9<e
[root@server1 mysql]# mysql -p

這裡寫圖片描述

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user [email protected] identified by '[email protected]+123456';  必須更改密碼才可以進行操作資料庫
Query OK, 0 rows affected (0.12 sec)

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

mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected]'%' IDENTIFIED BY '[email protected]+123456';  授權
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;  重新整理
Query OK, 0 rows affected (0.00 sec)

mysql> reset master;  刪除master資訊日誌
Query OK, 0 rows affected (0.73 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]+123456' FOR CHANNEL 'group_replication_recovery';  連線
Query OK, 0 rows affected, 2 warnings (1.66 sec)

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';  安裝外掛
Query OK, 0 rows affected (0.29 sec)

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

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.95 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 | f84fdfe5-9cad-11e8-a395-5254009ac5cd | server1     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)

mysql> create database test;  建立資料庫插入欄位進行測試資料同步
Query OK, 1 row affected (0.22 sec)

mysql> use test
Database changed
mysql> create table t1 (c1 int primary key, c2 text not null);
Query OK, 0 rows affected (1.56 sec)

mysql> select * from t1;
Empty set (0.01 sec)

mysql> insert into t1 values('1','lurci')
    -> ;
Query OK, 1 row affected (0.24 sec)

mysql> select * from t1;
+----+-------+
| c1 | c2    |
+----+-------+
|  1 | lurci |
+----+-------+
1 row in set (0.00 sec)

這裡寫圖片描述
在server2,id號和本地IP不同即可,其他的均和server1相同:

[root@server2 ~]# vim /etc/my.cnf
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server_id=2
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
loose-group_replication_group_name="ae6473bb-9cad-11e8-8abc-52540089f226"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.254.2:24901"
loose-group_replication_group_seeds="172.25.254.1:24901,172.25.254.2:24901,172.25.254.3:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off
loose-group_replication_enforce_update_everywhere_checks=on
loose-group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"
[root@server2 ~]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@server2 ~]# mysql [email protected]+123456   已經做過了初始化資料庫

這裡寫圖片描述

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; 安裝外掛
Query OK, 0 rows affected (0.12 sec)

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

mysql> set sql_log_bin=0;  不進行二進位制日誌記錄
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to [email protected]'%' identified by '[email protected]+123456'; 授權
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> reset master; 刪除master日誌資訊
Query OK, 0 rows affected (0.52 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]+123456' FOR CHANNEL 'group_replication_recovery';  連線
Query OK, 0 rows affected, 2 warnings (1.51 sec)

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';  安裝外掛
Query OK, 0 rows affected (0.24 sec)

這裡寫圖片描述

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

mysql> select * from performance_schema.replication_group_members;  檢視組成員已經為2
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 56b66e2c-9cac-11e8-816f-52540089f226 | server2     |        3306 | ONLINE       |
| group_replication_applier | f84fdfe5-9cad-11e8-a395-5254009ac5cd | server1     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> select * from t1;  可以檢視server1建立的資料欄位資訊
+----+-------+
| c1 | c2    |
+----+-------+
|  1 | lurci |
+----+-------+
1 row in set (0.00 sec)

這裡寫圖片描述
在server3進行和server2相同的步驟:

[[email protected] ~]# vim /etc/my.cnf  除了server-id和本地IP不同
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server_id=3
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
loose-group_replication_group_name="ae6473bb-9cad-11e8-8abc-52540089f226"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.254.3:24901"
loose-group_replication_group_seeds="172.25.254.1:24901,172.25.254.2:24901,172.25.254.3:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off
loose-group_replication_enforce_update_everywhere_checks=on
loose-group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"
[[email protected] ~]#  /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

這裡寫圖片描述
更改密碼資料庫可以登陸操作:

[root@server3 ~]# grep password /var/log/mysqld.log  檢視日誌獲取初始化密碼
2018-08-10T14:47:44.789304Z 1 [Note] A temporary password is generated for root@localhost: 62tP(MvfsNMM
[root@server3 ~]# mysql -p

這裡寫圖片描述

mysql> show databases;  不更改密碼不能進行操作資料庫
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user [email protected] identified by '[email protected]+123456';  修改密碼
Query OK, 0 rows affected (0.11 sec)

mysql> set global rpl_semi_sync_slave_enabled = ON;
ERROR 1193 (HY000): Unknown system variable 'rpl_semi_sync_slave_enabled'
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';  安裝外掛
Query OK, 0 rows affected (0.20 sec)

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

mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to [email protected]'%' identified by '[email protected]+123456'; 授權
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> reset master; 刪除master日誌資訊
Query OK, 0 rows affected (0.66 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]+123456' FOR CHANNEL 'group_replication_recovery'; 連線
Query OK, 0 rows affected, 2 warnings (1.42 sec)

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';安裝外掛
Query OK, 0 rows affected (0.24 sec)

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

這裡寫圖片描述
三個節點已經可以連線:

mysql> select * from performance_schema.replication_group_members; 
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 56b66e2c-9cac-11e8-816f-52540089f226 | server2     |        3306 | ONLINE       |
| group_replication_applier | 5734ab63-9cac-11e8-8345-5254004639f4 | server3     |        3306 | RECOVERING   |
| group_replication_applier | f84fdfe5-9cad-11e8-a395-5254009ac5cd | server1     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> use test 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from t1;  可以檢視server1建立的欄位資訊
+----+-------+
| c1 | c2    |
+----+-------+
|  1 | lurci |
+----+-------+
1 row in set (0.00 sec)

這裡寫圖片描述
測試用server3插入欄位資訊:

mysql> insert into t1 values (2,'ricci');
Query OK, 1 row affected (0.55 sec)

mysql> select * from t1;
+----+-------+
| c1 | c2    |
+----+-------+
|  1 | lurci |
|  2 | ricci |
+----+-------+
2 rows in set (0.00 sec)

這裡寫圖片描述
用server2和server1檢視資料表的欄位資訊已經完全同步:
這裡寫圖片描述
這裡寫圖片描述
用server2插入欄位資訊:

mysql> insert into t1 values(3,'aa');
Query OK, 1 row affected (0.53 sec)

mysql> select * from t1;
+----+-------+
| c1 | c2    |
+----+-------+
|  1 | lurci |
|  2 | ricci |
|  3 | aa    |
+----+-------+
3 rows in set (0.00 sec)

這裡寫圖片描述
用server3和server1檢視資料表的欄位資訊已經完全同步:
這裡寫圖片描述
這裡寫圖片描述

相關推薦

MGPMYSQL複製實現可靠MySQL 叢集服務

什麼是MGP: MySQL 組複製提供了高可用、高擴充套件、 高可靠的 MySQL 叢集服務。高一致性,基於原生複製及 paxos 協議的組複製技術, 並以外掛的方式提供,提供一致資料安全保證;高容錯性,只要不是大多數節點 壞掉就可以繼續工作,有自動檢測機

MySQL複製技術實現與資料庫效能測試工具

測試環境 本文件是在 99Cloud Lab OpenStack 平臺虛機上面測試,僅供參考。 系統: CentOS 7.3 虛機: 2 核 4G 版本: MySQL 5.7 技術架構 MySQL Group Replication(簡稱 MGR)是官方推出的高可用解決方案,原生複製技術,基於外掛

Corosync+pacemaker+DRBD+mysqlmariadb實現可用hamysql集群centos7

corosync+pacemaker+drbd+mysql(mariadb)實現高可用(ha)的mysql集群(centos7)Corosync+pacemaker+DRBD+mysql(mariadb)實現高可用(ha)的mysql集群(centos7)目錄:介紹環境借助pcs安裝與配置corosync和p

MySQL 可用:主主複製雙主複製

########################################################################################### linux: CentOS 5.6 mysql: 5.6.22

使用spring實現讀寫分離mysql主從複製五:一主多從的實現

很多實際使用場景下都是採用“一主多從”的架構的,使用輪詢演算法實現,目前只需要修改DynamicDataSource即可。   1.1. 實現 import java.lang.reflect.Field; import java.util.ArrayList; impo

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

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

MySQL複製Group Replication

本文將介紹一下MySQL組複製以及如何安裝和配置、監控組。 組複製是MySQL伺服器外掛,通過這種外掛可以實現彈性、高可用、容錯複製拓撲結構。 複製組能夠以一種自動優先選擇的單主模式執行,在某個時間只有一個伺服器接受更新 。但是對於更高優先順序的使用者,組能夠

MySQL複製MGR-- 技術概述

(一)複製技術的發展MySQL的複製技術主要經歷了非同步主從複製,半同步複製,組複製(Group Replication)3個階段。(1)傳統的非同步主從複製傳統的MySQL提供了一種簡單的主從複製方法。有1個主伺服器(master),有1個或多個從伺服器(slave),主伺服器執行事務,然後提交,從伺服器非

聊聊並發三十二實現一個基於鏈表的無鎖Set集合

target 方向 刪除 元素 min 集合 date 變量 find Set表示一種沒有反復元素的集合類,在JDK裏面有HashSet的實現,底層是基於HashMap來實現的。這裏實現一個簡化版本號的Set,有下面約束: 1. 基於鏈表實現。鏈表節點依照對象的h

MySQL 5.7 多主一從多源複製同步配置

下載網站:www.SyncNavigator.CN   客服QQ1793040 ----------------------------------------------------------     關於HKROnline

Centos 7.4 Mysql 8.0 Setting up master-master replication主-主複製叢集模式

介紹 主主模式基於上一篇文章主從模式,為了排版好看我省略上一篇的內容,以下是連線 https://blog.csdn.net/ciqingloveless/article/details/82866462 上一篇文章配置的是Mater傳送資料到Slave節點,這

分散式mysql的配置全同步複製

一.基本原理 全同步是主從同步資料的增強 主從同步只有在主資料庫上寫入,從資料庫自動同步資料,但從資料庫作出改變,主資料庫不會改變,導致資料不一致。 全同步恰好解決這一問題,只有一個數據庫發生改變,與它在同一個組的資料庫也會發生改變,同組資料庫沒有等級之分,可以理解為

用柵欄CyclicBarrier實現併發測試

public class TestCyclic { @Test public void test01() { int count = 10000;//併發執行緒數

稀疏矩陣的實現三元儲存C++

通過三元組儲存稀疏矩陣,壓縮儲存空間 /* 稀疏矩陣的實現 */ #include<iostream> #include<fstream> #include<string> using namespace std; //儲存域 const

[2011山東ACM省賽] Binomial Coeffcients合數

取余 cor memory -s sin mage pad ruby end Binomial Coeffcients Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裏^_^ 題目描寫敘述 輸入 輸

lightoj 1095 - Arrange the Numbersdp+合數

鏈接 簡單 turn amp using ace ring ++ ber 題目鏈接:http://www.lightoj.com/volume_showproblem.php?problem=1095 題解:其實是一道簡單的組合數只要推導一下錯排就行了。在這裏就推導

用PHP嘗試RabbitMQamqp擴展實現消息的發送和接收

創建 hive 路由 arc href nbsp str rabbit strong 消費者:接收消息 邏輯:創建連接-->創建channel-->創建交換機-->創建隊列-->綁定交換機/隊列/路由鍵-->接收消息 生產者:發送消息 邏輯

移動端二三事【四】:陀螺儀重力感應器實現手機位置、加速度感應以及常見應用。

效果 防止 size tro 通過 select 代碼 陀螺儀 prime 首先說明一下:陀螺儀感應需在真機環境下進行調試,PC端無效果。 1.獲取感應器 需在window上監聽devicemotion事件,再通過事件對象獲取accelerationIncludingG

網頁導航菜單的子菜單平鋪帶背景欄實現

body hover 動態設置 ive 要求 解決方案 滿了 gpo 位置 - 之前給公司做的一個小型知識庫管理網站時遇到一個問題,在這裏記錄下解決的過程。 公司的美工要求首頁導航菜單 要跟他們公司的網站風格保持一致,如圖所示 (子菜單是平鋪的)

Mysql數據庫實現可用

ide 接下來 自動 內容 eth1 code 源碼安裝 網絡 ole Mysql實現高可用 MMM MMM(master-master replication manager for mysql)mysql主主復制管理器。 MMM是一套靈活的腳本程序,基於