分分鐘搭建MySQL Group Replication測試環境(r11筆記第83天)

jeanron100發表於2017-02-21

   最近看了下MySQL 5.7中的閃亮特性Group Replication,也花了不少做了些測試,發現有些方面的表現確實不賴。當然要模擬這麼一套環境還是需要花不少的功夫的,一般來說都是3個節點的環境,實際中要找這樣的環境也不是很容易。我們怎麼快速模擬呢。一種方式就是在一臺伺服器上搭建多例項。

   這樣一來,伺服器的問題就解決了,下面要解決的問題就要艱鉅的多了,那就是部署環境。

   可以看到各路部落格中都有了詳細的解釋,而官方文件中對於搭建過程也花了不少的額篇幅來解釋,每一個步驟,每個操作,每個引數的含義。但是儘管如此,一次性成功搭建出這個環境的成功機率還是很低。初始化的部分不說,總是在新增節點的時候會有一些問題,這些問題折磨了我好些天,很多時候排查問題要做減法,也算是熟能生巧吧。搭建了十多遍,我也把自己的經驗簡單總結出來。這樣的一個精華就是指令碼了。

   當然這是一個很初始的指令碼,沒有動態變數,沒有複雜的條件判斷,我就是順序累了這麼些程式碼,反覆嘗試,算是可以在一分鐘內搭建出一個符合基本要求的環境。

    我就直接上一個比較簡單的指令碼,其實嚴格來說不算是指令碼。初始化環境的部分

mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql/data/s1 --explicit_defaults_for_timestamp
mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql/data/s2 --explicit_defaults_for_timestamp
mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql/data/s3 --explicit_defaults_for_timestamp
配置引數檔案
chown -R mysql:mysql s1 s2 s3
cp s1.cnf s1
cp s2.cnf s2
cp s3.cnf s3

chown -R mysql:mysql s1 s2 s3
啟動MySQL服務
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/data/s1/s1.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/data/s2/s2.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/data/s3/s3.cnf &
中間停頓幾秒,保證服務能夠正常啟動
sleep 10
連線到各個例項檢視是資料庫是否可用
/usr/local/mysql/bin/mysql -P24081  -S /home/mysql/s1.sock  -e "show databases"
/usr/local/mysql/bin/mysql -P24082  -S /home/mysql/s2.sock  -e "show databases"
/usr/local/mysql/bin/mysql -P24083  -S /home/mysql/s3.sock  -e "show databases"


連線到第一個節點,執行下面的指令碼,初始化安裝GR外掛,做一個基本的配置mysql -P24081  -S /home/mysql/s1.sock -e "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
                      FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';               
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
select *from performance_schema.replication_group_members;
"

連線到第二個節點,初始化GR外掛和基礎配置,和第一個節點略有不同。mysql -P24082  -S /home/mysql/s2.sock -e   "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
        FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication;
select *from performance_schema.replication_group_members;
"

連線到第二個節點,初始化GR外掛和基礎配置,和第一個節點略有不同。mysql -P24083  -S /home/mysql/s3.sock -e   "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
        FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication ;
select *from performance_schema.replication_group_members;
"引數檔案的模板如下,除了紅色的部分,其它都保持不變即可。這裡我使用的埠是24801,不是預設的3306,當然這個沒有限制。

[mysqld]

# server configuration
datadir=/home/mysql/data/s1
basedir=/usr/local/mysql

port=24801
socket=/home/mysql/s1.sock


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
loose-group_replication_group_name="1bb1b861-f776-11e6-be42-782bcb377193"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "127.0.0.1:24901"
loose-group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
loose-group_replication_bootstrap_group= off

執行指令碼的輸出如下,最後會顯示節點都新增成功。

+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | b3684636-f83d-11e6-bd53-782bcb377193 | grtest      |       24801 | ONLINE       |
| group_replication_applier | b4a7d208-f83d-11e6-be4e-782bcb377193 | grtest      |       24802 | ONLINE       |
| group_replication_applier | b5eecf1d-f83d-11e6-80d7-782bcb377193 | grtest      |       24803 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+這個過程自己多熟悉熟悉,對於理解Group Replication的原理和基本實現是大有幫助,裡面引數的含義沒解釋?文件都解釋的很清楚了,細細看來,留給DBA操作的內容其實不是很多。



  

 



 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2134072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章