-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------
場景:
有些空余時間了, 想要測試一下Group Replication與MySQL Router~\(≧▽≦)/~
結(jié)論:
可用性方面不錯;
性能方面其實還不錯, 不過寫入能力還是老問題, 讀多寫少的業(yè)務可以關(guān)注一下Innodb Cluster;
測試環(huán)境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以后再補一篇測試數(shù)據(jù)......)
虛擬機:
4C24G, 2.00GHz x 5 (MySQL 8.0.3-rc)
4C24G, 2.40GHz x 4 (MySQL 8.0.3-rc)
8C24G, 2.40GHz x 1 (MySQL Router)
搭建過程:
1. 官方源直接安裝MySQL相關(guān)的所有包, apt-get/yum
2. MySQL的配置, 除了常規(guī)配置以外, 推薦加上如下的部分, loose開頭的參數(shù)表示如果不存在group_replication插件, 則忽略這些配置
點擊(此處)折疊或打開
創(chuàng)新互聯(lián)建站服務項目包括寬城網(wǎng)站建設、寬城網(wǎng)站制作、寬城網(wǎng)頁制作以及寬城網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,寬城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到寬城省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
-
report_host = 192.168.0.100 ##GR插件會用這個report_host來標記Group中的每個MySQL實例, 確保每個MySQL實例的hostname不一樣, 或者這個report_host不一樣
-
log_bin = /home/mysql/mysql-binlog ##必須開啟
-
log_slave_updates = ON ##必須開啟
-
master_info_repository = TABLE ##必須使用Table
-
relay_log_info_repository = TABLE ##必須使用Table
-
gtid_mode = ON ##必須開啟GTID
-
enforce_gtid_consistency = ON ##必須開啟
-
slave_preserve_commit_order = ON ##確保GR_applier按照一致的順序復現(xiàn)事務
-
binlog_checksum = NONE ##必須設置為NONE
-
transaction_write_set_extraction=XXHASH64 ##必須設置為XXHASH64
-
-
#group_replication = ON ##開啟Group Replication插件, 安裝插件之后再開啟
-
loose-group_replication_start_on_boot=off ##默認關(guān)閉, 防止重啟后自動創(chuàng)建新的Group
-
loose-group_replication_local_address= "192.168.0.100:13306" ##官方工具會默認使用13306端口作為插件的端口, 設置為13306方便測試
-
loose-group_replication_group_seeds= "192.168.0.100:13306,192.168.1.100:13306" ##官方工具貌似不會主動管理這個參數(shù), 手動加上
-
loose-group_replication_bootstrap_group=off ##默認關(guān)閉, 防止自動創(chuàng)建新的Group
-
loose-group_replication_ip_whitelist = '192.168.0.0/24,192.168.1.0/24' ##推薦在初始化前手工加上, 控制哪些ip的機器可以加入Group
PS: 測試中, 全程使用innodb_flush_log_at_trx_commit = 2 和 sync_binlog = 0 的設置, 雙1的性能實在是弱......_(:з」∠)_
3. 啟動所有的MySQL實例, 并安裝插件
-
INSTALL PLUGIN group_replication SONAME 'group_replication.so'
4. 在mysql中創(chuàng)建用戶temp, 測試圖方便, 用ALL on *.*就行, 在官方文檔中, 有列出這個用戶需要的具體權(quán)限, 如下
-
GRANT ALL PRIVILEGES ON mysql_innodb_cluster_metadata.* TO your_user@'%' WITH GRANT OPTION;
-
GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, \
-
CREATE USER ON *.* TO your_user@'%' WITH GRANT OPTION;
-
GRANT SELECT ON performance_schema.* TO your_user@'%' WITH GRANT OPTION;
-
GRANT SELECT ON *.* TO your_user@'%' WITH GRANT OPTION;
-
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO your_user@'%' WITH GRANT OPTION
還有一個需要注意的是: 官方推薦修改/etc/hosts, 實測中, 把localhost指向內(nèi)網(wǎng)IP, 或者是創(chuàng)建temp@localhost的同權(quán)限用戶也行, 官方的工具會用到@localhost的登錄方式;
PS: with grant option很重要, 因為工具會新建一個mysql_route_xxxx用戶, 以及存儲meta的新數(shù)據(jù)庫;
4. 在Group Primary的機器上啟動MySQL shell, 這個很重要, 因為第3點中提到的: 官方的工具會用到@localhost的登錄方式
PS: 推薦用mysqlsh --log-level=DEBUG3來啟動mysql shell, 且不要關(guān)閉wizard;
5. 進入MySQL shell以后, 可以選擇使用java script還是python, 這里比較習慣python, 就用python的方式, 和js基本沒區(qū)別;
6. dba.help()命令能看到支持的所有命令, 搭建過程中主要用到的主要有這幾個:
check_instance_configuration : 檢查實例的參數(shù)配置是否符合搭建Group的要求
configure_local_instance : 持久化實例的配置參數(shù)到配置文件
create_cluster : 創(chuàng)建innodb cluster
get_cluster : 獲取這個實例所屬innodb cluster的信息
\connect 用戶名@ip:port: 登錄到某個實例, 一般為本機
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')來檢測配置參數(shù), 按照第一步設置之后, 應該是直接返回OK的, 如果還有缺失的話, 就手動補上吧
PS: 這個工具可以自動把參數(shù)修改成符合要求的設置, 有興趣可以研究一下, 這里就不嘮叨了ㄟ( ▔, ▔ )ㄏ
8. 接下來就是使用create_cluster來創(chuàng)建innodb cluster了, 這里放上比較常用的一些設置信息
簡單說明部分參數(shù):
multiMaster : 如果要創(chuàng)建多主集群, 就需要單獨指定這個參數(shù), 否則默認創(chuàng)建單主集群(類似于一主多從的復制架構(gòu));
adoptFromGR : 如果已經(jīng)手動把Group搭建起來了, 需要在這個Group上創(chuàng)建新的innodb cluster, 那就需要顯式指定這個參數(shù), 且關(guān)閉wizard模式, 關(guān)掉wizard模式之后, 需要再額外添加創(chuàng)建集群的用戶名和密碼作為參數(shù), 推薦開啟wizard, 并全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在測試的時候, 可能是工具沒有管理seed這個參數(shù), 所以在創(chuàng)建的時候即便指定了白名單, 也無法向Group里面添加新實例;
PS: 在python模式下, 如果需要添加參數(shù), 就這么寫
-
cluster = cluster.create_cluster('temp@192.168.0.100:3306', {'multiMaster':1,'adoptFromGR':1})
9. 開啟wizard的情況下(本文默認開啟), 使用如下命令創(chuàng)建Cluster:
-
cluster = dba.create_cluster('testCluster')
如果沒問題的話, 就會有如下提示信息
10. 集群創(chuàng)建成功以后, 用add_instance命令把所有的實例都添加到群組就好了, 在官方的宣講中, 暫時不支持超過9個實例組成一個Group, 實際上, 不超過7個比較好, auto_increament的默認設置是7;
11. 這時候登錄數(shù)據(jù)庫, 就會看到多出來一個庫, 叫做mysql_innodb_cluster_metadata, 里面有cluster的一些信息, 有興趣可以看看;
12. 在其他的虛擬機上安裝MySQL Router, 然后用bootstrap來自動生成配置;
-
mysqlrouter --bootstrap temp@192.168.0.100:3306 --directory /home/mysqlrouter/ --user=mysqlrouter
在對應的目錄下會有start.sh和stop.sh來啟動和關(guān)閉mysqlrouter
PS : stop.sh可能會關(guān)不掉mysqlrouter, 留意一下, 腳本的問題
13. 讀寫默認使用6446, 只讀使用6447, 這時候就可以隨意進行測試了;
14. 如果要創(chuàng)建多主模式, 需要調(diào)整兩個參數(shù)
-
group_replication_single_primary_mode = OFF
-
group_replication_enforce_update_everywhere_checks = ON
PPS: MySQLRouter會根據(jù)meta的數(shù)據(jù)來動態(tài)調(diào)整讀寫和只讀連接, 比如說Primary掛掉了, meta發(fā)生了變化, MySQLRouter會在很短的時間內(nèi)發(fā)現(xiàn)并把流量切換到新的Primary;
PPPPPS: 性能測試數(shù)據(jù)待整理
文章題目:MySQLInnodbCluster搭建與初探
文章分享:
http://weahome.cn/article/pspcej.html