MySQL Innodb Cluster搭建與初探
-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------
場景:
有些空餘時間了, 想要測試一下Group Replication與MySQL Router~\(≧▽≦)/~
結論:
可用性方面不錯;
效能方面其實還不錯, 不過寫入能力還是老問題, 讀多寫少的業務可以關注一下Innodb Cluster;
測試環境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以後再補一篇測試資料......)
虛擬機器:
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相關的所有包, apt-get/yum
2. MySQL的配置, 除了常規配置以外, 推薦加上如下的部分, loose開頭的參數列示如果不存在group_replication外掛, 則忽略這些配置
PS: 測試中, 全程使用innodb_flush_log_at_trx_commit = 2 和 sync_binlog = 0 的設定, 雙1的效能實在是弱......_(:з」∠)_
3. 啟動所有的MySQL例項, 並安裝外掛
4. 在mysql中建立使用者temp, 測試圖方便, 用ALL on *.*就行, 在官方文件中, 有列出這個使用者需要的具體許可權, 如下
還有一個需要注意的是: 官方推薦修改/etc/hosts, 實測中, 把localhost指向內網IP, 或者是建立temp@localhost的同許可權使用者也行, 官方的工具會用到@localhost的登入方式;
PS: with grant option很重要, 因為工具會新建一個mysql_route_xxxx使用者, 以及儲存meta的新資料庫;
4. 在Group Primary的機器上啟動MySQL shell, 這個很重要, 因為第3點中提到的: 官方的工具會用到@localhost的登入方式
PS: 推薦用mysqlsh --log-level=DEBUG3來啟動mysql shell, 且不要關閉wizard;
5. 進入MySQL shell以後, 可以選擇使用java script還是python, 這裡比較習慣python, 就用python的方式, 和js基本沒區別;
6. dba.help()命令能看到支援的所有命令, 搭建過程中主要用到的主要有這幾個:
check_instance_configuration : 檢查例項的引數配置是否符合搭建Group的要求
configure_local_instance : 持久化例項的配置引數到配置檔案
create_cluster : 建立innodb cluster
get_cluster : 獲取這個例項所屬innodb cluster的資訊
\connect 使用者名稱@ip:port: 登入到某個例項, 一般為本機
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')來檢測配置引數, 按照第一步設定之後, 應該是直接返回OK的, 如果還有缺失的話, 就手動補上吧
PS: 這個工具可以自動把引數修改成符合要求的設定, 有興趣可以研究一下, 這裡就不嘮叨了ㄟ( ▔, ▔ )ㄏ
8. 接下來就是使用create_cluster來建立innodb cluster了, 這裡放上比較常用的一些設定資訊
簡單說明部分引數:
multiMaster : 如果要建立多主叢集, 就需要單獨指定這個引數, 否則預設建立單主叢集(類似於一主多從的複製架構);
adoptFromGR : 如果已經手動把Group搭建起來了, 需要在這個Group上建立新的innodb cluster, 那就需要顯式指定這個引數, 且關閉wizard模式, 關掉wizard模式之後, 需要再額外新增建立叢集的使用者名稱和密碼作為引數, 推薦開啟wizard, 並全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在測試的時候, 可能是工具沒有管理seed這個引數, 所以在建立的時候即便指定了白名單, 也無法向Group裡面新增新例項;
PS: 在python模式下, 如果需要新增引數, 就這麼寫
9. 開啟wizard的情況下(本文預設開啟), 使用如下命令建立Cluster:
如果沒問題的話, 就會有如下提示資訊
10. 叢集建立成功以後, 用add_instance命令把所有的例項都新增到群組就好了, 在官方的宣講中, 暫時不支援超過9個例項組成一個Group, 實際上, 不超過7個比較好, auto_increament的預設設定是7;
11. 這時候登入資料庫, 就會看到多出來一個庫, 叫做mysql_innodb_cluster_metadata, 裡面有cluster的一些資訊, 有興趣可以看看;
12. 在其他的虛擬機器上安裝MySQL Router, 然後用bootstrap來自動生成配置;
在對應的目錄下會有start.sh和stop.sh來啟動和關閉mysqlrouter
PS : stop.sh可能會關不掉mysqlrouter, 留意一下, 指令碼的問題
13. 讀寫預設使用6446, 只讀使用6447, 這時候就可以隨意進行測試了;
14. 如果要建立多主模式, 需要調整兩個引數
PPS: MySQLRouter會根據meta的資料來動態調整讀寫和只讀連線, 比如說Primary掛掉了, meta發生了變化, MySQLRouter會在很短的時間內發現並把流量切換到新的Primary;
PPPPPS: 效能測試資料待整理
場景:
有些空餘時間了, 想要測試一下Group Replication與MySQL Router~\(≧▽≦)/~
結論:
可用性方面不錯;
效能方面其實還不錯, 不過寫入能力還是老問題, 讀多寫少的業務可以關注一下Innodb Cluster;
測試環境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以後再補一篇測試資料......)
虛擬機器:
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相關的所有包, apt-get/yum
2. MySQL的配置, 除了常規配置以外, 推薦加上如下的部分, loose開頭的參數列示如果不存在group_replication外掛, 則忽略這些配置
點選(此處)摺疊或開啟
-
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按照一致的順序復現事務
-
binlog_checksum = NONE ##必須設定為NONE
-
transaction_write_set_extraction=XXHASH64 ##必須設定為XXHASH64
-
-
#group_replication = ON ##開啟Group Replication外掛, 安裝外掛之後再開啟
-
loose-group_replication_start_on_boot=off ##預設關閉, 防止重啟後自動建立新的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" ##官方工具貌似不會主動管理這個引數, 手動加上
-
loose-group_replication_bootstrap_group=off ##預設關閉, 防止自動建立新的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中建立使用者temp, 測試圖方便, 用ALL on *.*就行, 在官方文件中, 有列出這個使用者需要的具體許可權, 如下
點選(此處)摺疊或開啟
-
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指向內網IP, 或者是建立temp@localhost的同許可權使用者也行, 官方的工具會用到@localhost的登入方式;
PS: with grant option很重要, 因為工具會新建一個mysql_route_xxxx使用者, 以及儲存meta的新資料庫;
4. 在Group Primary的機器上啟動MySQL shell, 這個很重要, 因為第3點中提到的: 官方的工具會用到@localhost的登入方式
PS: 推薦用mysqlsh --log-level=DEBUG3來啟動mysql shell, 且不要關閉wizard;
5. 進入MySQL shell以後, 可以選擇使用java script還是python, 這裡比較習慣python, 就用python的方式, 和js基本沒區別;
6. dba.help()命令能看到支援的所有命令, 搭建過程中主要用到的主要有這幾個:
check_instance_configuration : 檢查例項的引數配置是否符合搭建Group的要求
configure_local_instance : 持久化例項的配置引數到配置檔案
create_cluster : 建立innodb cluster
get_cluster : 獲取這個例項所屬innodb cluster的資訊
\connect 使用者名稱@ip:port: 登入到某個例項, 一般為本機
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')來檢測配置引數, 按照第一步設定之後, 應該是直接返回OK的, 如果還有缺失的話, 就手動補上吧
PS: 這個工具可以自動把引數修改成符合要求的設定, 有興趣可以研究一下, 這裡就不嘮叨了ㄟ( ▔, ▔ )ㄏ
8. 接下來就是使用create_cluster來建立innodb cluster了, 這裡放上比較常用的一些設定資訊
簡單說明部分引數:
multiMaster : 如果要建立多主叢集, 就需要單獨指定這個引數, 否則預設建立單主叢集(類似於一主多從的複製架構);
adoptFromGR : 如果已經手動把Group搭建起來了, 需要在這個Group上建立新的innodb cluster, 那就需要顯式指定這個引數, 且關閉wizard模式, 關掉wizard模式之後, 需要再額外新增建立叢集的使用者名稱和密碼作為引數, 推薦開啟wizard, 並全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在測試的時候, 可能是工具沒有管理seed這個引數, 所以在建立的時候即便指定了白名單, 也無法向Group裡面新增新例項;
PS: 在python模式下, 如果需要新增引數, 就這麼寫
點選(此處)摺疊或開啟
- cluster = cluster.create_cluster('temp@192.168.0.100:3306', {'multiMaster':1,'adoptFromGR':1})
9. 開啟wizard的情況下(本文預設開啟), 使用如下命令建立Cluster:
點選(此處)摺疊或開啟
- cluster = dba.create_cluster('testCluster')
10. 叢集建立成功以後, 用add_instance命令把所有的例項都新增到群組就好了, 在官方的宣講中, 暫時不支援超過9個例項組成一個Group, 實際上, 不超過7個比較好, auto_increament的預設設定是7;
11. 這時候登入資料庫, 就會看到多出來一個庫, 叫做mysql_innodb_cluster_metadata, 裡面有cluster的一些資訊, 有興趣可以看看;
12. 在其他的虛擬機器上安裝MySQL Router, 然後用bootstrap來自動生成配置;
點選(此處)摺疊或開啟
- mysqlrouter --bootstrap temp@192.168.0.100:3306 --directory /home/mysqlrouter/ --user=mysqlrouter
PS : stop.sh可能會關不掉mysqlrouter, 留意一下, 指令碼的問題
13. 讀寫預設使用6446, 只讀使用6447, 這時候就可以隨意進行測試了;
14. 如果要建立多主模式, 需要調整兩個引數
點選(此處)摺疊或開啟
-
group_replication_single_primary_mode = OFF
- group_replication_enforce_update_everywhere_checks = ON
PPS: MySQLRouter會根據meta的資料來動態調整讀寫和只讀連線, 比如說Primary掛掉了, meta發生了變化, MySQLRouter會在很短的時間內發現並把流量切換到新的Primary;
PPPPPS: 效能測試資料待整理
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29510932/viewspace-2146902/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL InnoDB Cluster環境搭建和簡單測試MySql
- 技術分享 | MySQL InnoDB Cluster Set 介紹MySql
- MySQL InnoDB Cluster – how to manage a split-brain situationMySqlAI
- MySQL NDB Cluster簡介及環境搭建MySql
- MySQL InnoDB Cluster如何定位或找出超過事務大小的SQL?MySql
- redis cluster 搭建Redis
- MySQL ClusterMySql
- Cluster for MySQLMySql
- mysql的XA與innodb_support_xaMySql
- Redis Cluster 叢集搭建與擴容、縮容Redis
- 一種快速安裝InnoDB Cluster的方法
- MySQL Galera叢集搭建流程(Percona XtraDB Cluster 5.7)MySql
- MySQL-ClusterMySql
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- 【MySQL】MySQL 5.7 初探MySql
- 搭建分散式 Redis Cluster 叢集與 Redis 入門分散式Redis
- MySQL InnoDB 索引MySql索引
- 搭建redis cluster叢集Redis
- MySQL5.7 Galera Cluster安裝搭建及高可用測試MySql
- (連結)MySQL Cluster的備份與恢復MySql
- MySQL Cluster安裝MySql
- MySQL Cluster研究(1)MySql
- MySQL Cluster相關MySql
- mysql安裝-clusterMySql
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- MySQL中MyISAM引擎與InnoDB引擎效能比較MySql
- MySQL 索引初探MySql索引
- MySQL 8.4 初探MySql
- 基於Centos7.x 搭建MySQL Galera Cluster高可用架構CentOSMySql架構
- redis-cluster主從搭建Redis
- 優雅搭建redis-clusterRedis
- mysql innodb索引高度MySql索引
- MySQL InnoDB update流程MySql
- MySQL Deadlocks in InnoDBMySql
- 【MySQL】5.6.x InnoDB Error Table mysql.innodb_table_stats not foundMySqlError
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- mysql cluster 簡單配置MySql
- MySQL Cluster 配置檔案MySql