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
3 測試項目
3.1測試mgr單點寫入
測試目的:單點寫入,檢視其它節點資料是否實時同步成功
試驗步驟:
3.1.1 創庫同步試驗
登入181
ssh [email protected]
寫入資料
mysql -uroot –p
create database test;
檢視
show databases;
結論:單節點建立庫,叢集其它節點可以實時同步該庫
3.1.2 建表同步
登入181
use test
create table t1 (id int);
insert into t1 value (1);
錯誤警示:測試證明叢集建立的表必須有主鍵才可以插入資料
drop table t1;
create table t1 (id int primary key);
insert into t1 value (1);
select * from t1;
測試結論:
通過上述操作,叢集可以正常同步建立的表,正常同步某節點發起删除的表,以及表内所有資料。
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.)
結論:由于開啟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.)
壓力測試後發現同機器虛拟出來的182産生大量延遲,同一個伺服器上binlog日志的寫入讀取造成io阻塞,進而産生延遲
我們将182剔除mgr叢集
重新測試
stop group_replication;
純寫測試
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此時落後,并且不能自動加入叢集
手動處理方法:
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;
結論:測試證明出現節點錯誤無法并入叢集,需要手動處理
MGR才會正常運作
3.4測試mgr斷線後重連
試驗環境内,手動斷開網線,此時 叢集狀态如下,其中 211,212狀态顯示無法連接配接
登入181
use test;
建表
create table t1 (id int primary key);
提示錯誤如下
“成員組中的多數成員失去了聯系。在網絡恢複之前,事務将阻塞。作為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
此時叢集顯示隻有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;
然後恢複211連接配接
servicenetwork start
登入mysql
mysql-uroot -p
此時狀态error
手動恢複mgr
stopgroup_replication;
startgroup_replication;
檢視資料
結論:測試證明網絡斷開的情況下需要手動輸入指令啟動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
可以看到節點都同步了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
結論:測試證明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;
delete from t2;
drop table t2;
drop database test;
可以看到212,213能夠正常同步資料
接通網絡,可以看到181,182狀态錯誤
此時手動恢複
stop group_replication;
start group_replication;
可以看到資料正常同步過來
結論:正常業務在主機房進行的時候與備機房斷開連接配接,隻需要在網絡恢複的時候将備機房機器并入叢集即可