天天看點

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

Group Replication測試報告

1 組網環境

區域網路4台redhat

ip:192.168.1.181,192.168.1.182,192.168.1.211,192.168.1.212

其中181,182,是一台伺服器虛拟出來的

211,212是另外一台伺服器虛拟出來的

2個伺服器通過網線連接配接

181,182硬體資訊:

CPU(s)~2 Dual core Intel Xeon E5-2620 v4s(-HT-SMP-) speed~2096 MHz (max) Kernel~3.10.0-514.el7.x86_64 x86_64

Mem~486.1/5807.1MB

HDD~268.4GB(4.0% used)

211.212硬體資訊:

CPU~Dual core Intel Xeon E5-2603 v3(-HT-MCP-) speed~1596 MHz (max) Kernel~3.10.0-327.el7.x86_64 x86_64

Mem~404.0/7823.7MB

HDD~107.4GB(9.7% used)

資料庫版本mysql 5.7.19

測試軟體使用sysbench1.0.6

安裝yum -yinstall sysbench

2 叢集初始化

目前在試驗環境中采用4台 mysql5.7.19 資料庫組成 MGR 如下圖所示:

初始化mgr

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

3 測試項目

3.1測試mgr單點寫入

測試目的:單點寫入,檢視其它節點資料是否實時同步成功

試驗步驟:

3.1.1 創庫同步試驗

登入181

ssh [email protected]

寫入資料

mysql -uroot –p

create database test;

檢視

show databases;

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

結論:單節點建立庫,叢集其它節點可以實時同步該庫

3.1.2 建表同步

登入181

use test

create table t1 (id int);

insert into t1 value (1);

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

錯誤警示:測試證明叢集建立的表必須有主鍵才可以插入資料

drop table t1;

create table t1 (id int primary key);

insert into t1 value (1);

select * from t1;

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

測試結論:

通過上述操作,叢集可以正常同步建立的表,正常同步某節點發起删除的表,以及表内所有資料。

3.1.3測試讀寫性能

3.1.3.1 對單機mysql壓力測試(相對于叢集參考值)

登入182

ssh [email protected]

将182 設定成單機版mysql不開啟binlog

連接配接mysql

mysql -uroot -p

建立測試庫

create database test;

1 單台純寫測試

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql prepare

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

測試報告

transactions:(事物送出)                       295078 (2949.67 persec.)

queries:  (查詢)                           1787027 (17863.54per sec.)

2 單台純讀測試

sysbench --test=/usr/share/sysbench/oltp_read_only.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

報告如下

transactions:                        201933 (2018.29 persec.)

queries:                             3230928 (32292.65 persec.)

3 單台讀寫混合測試

sysbench --test=/usr/share/sysbench/oltp_read_write.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

報告如下

transactions:                        121994 (1219.35 persec.)

queries:                             2487937 (24867.34 persec.)

4單台mysql啟動binlog後測試

純寫

transactions:                        33008  (325.67 per sec.)

queries:                             207706 (2049.33per sec.)

純讀

transactions:                        200440 (2003.56 persec.)

queries:                             3207040 (32056.96per sec.)

讀寫

transactions:                        37180  (368.63 per sec.)

queries:                             822870 (8158.45per sec.)

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

結論:由于開啟binlog使得寫入性能有所下降,讀取性能浮動不大,影響因素主要是硬碟寫入速度,本硬碟測試為40.7 MB/秒

3.2對MGR叢集壓力測試

3.2.1 叢集狀态檢視

登入181

ssh [email protected]

連接配接mysql

mysql -uroot -p

建立測試庫

create database test;

此時4台機器同時線上

SELECT * FROMperformance_schema.replication_group_members;

3.2.2純寫測試

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql prepare

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

報告如下

transactions:                        14941  (146.52 per sec.)

queries:                             96092  (942.31 per sec.)

3.2.3純讀測試

sysbench --test=/usr/share/sysbench/oltp_read_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

報告如下

transactions:                        206963 (2068.62 persec.)

queries:                             3311408 (33097.92 persec.)

3.2.4 讀寫測試

sysbench --test=/usr/share/sysbench/oltp_read_write.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

報告如下

transactions:                        18654  (181.73 per sec.)

queries:                             412869 (4022.24per sec.)

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

壓力測試後發現同機器虛拟出來的182産生大量延遲,同一個伺服器上binlog日志的寫入讀取造成io阻塞,進而産生延遲

我們将182剔除mgr叢集

重新測試

stop group_replication;

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

純寫測試

transactions:                        36277  (360.42 per sec.)

queries:                             228208 (2267.30per sec.)

transactions:                        202432 (2023.43 persec.)

queries:                             3238912 (32374.89per sec.)

讀寫

transactions:                        33293  (330.87 per sec.)

queries:                             739513 (7349.46per sec.)

3.3故障節點恢複并入運作叢集測試

此時181,211,212正常運作并有資料産生,182目前屬于故障節點(之前已剔除)

此時,182此時落後,并且不能自動加入叢集

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

手動處理方法:

stop group_replication;

reset master;

SET @@GLOBAL.GTID_PURGED='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-12:1000005-1103191';

start group_replication;

此時可以順利并入mgr叢集

SELECT * FROMperformance_schema.replication_group_members;

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

結論:測試證明出現節點錯誤無法并入叢集,需要手動處理

MGR才會正常運作

3.4測試mgr斷線後重連

試驗環境内,手動斷開網線,此時 叢集狀态如下,其中 211,212狀态顯示無法連接配接

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

登入181

use test;

建表

create table t1 (id int primary key);

提示錯誤如下

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

“成員組中的多數成員失去了聯系。在網絡恢複之前,事務将阻塞。作為group_replication_unreachable_majority_timeout價值0的插件将無限期地等待網絡得到恢複。”

官網描述此問題:

對等叢集網絡掉線,如果沒有配置group_replication_unreachable_majority_timeout

會等待對方恢複網絡,并阻塞寫入資料,如果配置了則會進入隻讀狀态

不對等叢集5台掉了2台,此時多數的機器群為可寫入,少數機器群的狀态為隻讀

配置group_replication_unreachable_majority_timeout重新測試

測試結果顯示

ERROR 1290 (HY000): The MySQL server isrunning with the --super-read-only option so it cannot execute this statement

結果是4台機器直接進入隻讀error狀态是以實際應用不需要要配置這個參數

結論:測試證明結果MGR需要主機房機器數量大于備機房

3.5測試單點斷線後重連

登入211

斷開網絡連接配接

service network stop

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

此時叢集顯示隻有3台,211已經被剔除

從181上建立資料庫建表插入資料

create database test;

use test;

create table t1(id int primary key)

insert into t1 value(1);

182,212上可以看到資料

select * from test.t1;

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

然後恢複211連接配接

servicenetwork start

登入mysql

mysql-uroot -p

此時狀态error

手動恢複mgr

stopgroup_replication;

startgroup_replication;

檢視資料

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

結論:測試證明網絡斷開的情況下需要手動輸入指令啟動MGR資料會自動恢複

3.6測試mgr節點當機後重新開機

1主節點當機

登入181

關閉mysql

service mysqld stop

其他節點繼續插入資料

insert ti value (2);

重新開機mysql

service mysqld start

由于配置自動啟動mgr參數

loose-group_replication_start_on_boot=on

是以在mysql啟動的時候mgr會自動恢複資料

2 備節點當機

登入211

service mysqld stop

其他節點繼續插入資料

insert ti value (2);

恢複mgr

service mysqld start

結論:測試證明單節點當機情況下資料可以自動恢複

3.7測試表結構發生變化,增加表,删除表

登入181

我們直接導入其他伺服器ims資料表跟資料

建立資料庫

mysql>create database sx_ims;

使用工具導入

mysqldump sx_ims -uroot -proot  -h192.168.1.183--set-gtid-purged=OFF --add-drop-table | mysql sx_ims -u root -proot

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

可以看到節點都同步了ims資料庫

增加索引

mysql> altertable taxpayer_base_info add index(taxpayer_code);

在其他節點可以檢視到表結構同步

删除表

mysql> drop table taxpayer_base_info;

在其他節點可以檢視到表删除同步

增加表

mysql> create table taxpayer_base_info ( id int primary key) ;

在其他節點可以檢視到表增加同步

結論:測試證明MGR可以表同步資料同步

3.8測試大資料量恢複

登入211

service mysqld stop

登入181

使用sysbench插入大量測試資料

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5 --time=400--threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

重新開機mysql

service mysqld start

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目
Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

結論:測試證明MGR可以完成自動回寫任務

3.9主機房斷網,備機房切換

現在測試環境加入1台模拟真實環境,備機房181,182主機房211,212,213

斷開網線,此時主機房211,212,213可以繼續寫入辦理正常業務

3.9.1正常網絡斷開

登入211

建立資料庫建立表插入資料删除資料删除表

create database test;

use test;

create table t2 (id int primary key);

insert into t2 value (1);

select * from t2;

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

delete from t2;

drop table t2;

drop database test;

可以看到212,213能夠正常同步資料

接通網絡,可以看到181,182狀态錯誤

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

此時手動恢複

stop group_replication;

start group_replication;

可以看到資料正常同步過來

Group Replication測試報告Group Replication測試報告1 組網環境2 叢集初始化3 測試項目

結論:正常業務在主機房進行的時候與備機房斷開連接配接,隻需要在網絡恢複的時候将備機房機器并入叢集即可