MySQL 5.7: 把現有的複製組遷移到InnoDB Cluster

NO IMAGE

MySQL 5.7: 使用組複製(MySQL Group Replication)
MySQL 5.7: 使用MySQL Router實現應用程式的高可用
MySQL 5.7: 把現有的複製組遷移到InnoDB Cluster
MySQL 5.7: 使用PMM監視和管理資料庫

MySQL InnoDB 叢集是一堆集合到一起工作的產品, 用於提供一個完整的高可用方案.

複製組不是一個完整的高可用方案, 它只是實現了資料庫端的故障轉移, 但是並沒有為應用程式提供一個單一的入口, 本文可結合MySQL 5.7: 使用MySQL Router實現應用程式的高可用 建立一個InnoDB叢集建立一個完整的HA方案.

可以使用MySQL Shell來配置MySQL伺服器組以建立一個MySQL InnoDB資料庫叢集.

預設為單主模式, 叢集中的伺服器只有一個能寫.

餘下的伺服器作為主伺服器的備用.

建立叢集至少需要三臺機器.

客戶端應用程式通過MySQL Router連線到主伺服器.

如果主伺服器失敗, 叢集自動選主, MySQL Router自動把連線路由到新主

高階用於可以配置叢集有多主

由於前面我們已經建立了一個複製組.

mysql> SELECT * FROM performance_schema.replication_group_members;
--------------------------- -------------------------------------- ---------------- ------------- -------------- 
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE |
--------------------------- -------------------------------------- ---------------- ------------- -------------- 
| group_replication_applier | 255a577c-c68f-11e7-a0a7-00163e0c0288 | 172.18.149.215 |        3306 | ONLINE       |
| group_replication_applier | 77befd8c-c68e-11e7-9623-00163e0af475 | 172.18.149.213 |        3306 | ONLINE       |
| group_replication_applier | a44c7ec7-c68e-11e7-9cf8-00163e0afda9 | 172.18.149.214 |        3306 | ONLINE       |
--------------------------- -------------------------------------- ---------------- ------------- -------------- 
3 rows in set (0.00 sec)

現在我們只需要安裝MySQL Router和MySQL Shell

wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
dpkg -i mysql-apt-config_0.8.9-1_all.deb

檢視版本資訊

root:~# mysqlrouter --version
MySQL Router v2.1.4 on Linux (64-bit) (GPL community edition)

使用 MySQL Shell 配置叢集

登入

root:~# mysqlsh --uri [email protected]:3306
Creating a Session to '[email protected]:3306'
Enter password:
Your MySQL connection id is 80
Server version: 5.7.20-log MySQL Community Server (GPL)
No default schema selected; type \use <schema> to set one.
MySQL Shell 1.0.10
Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type '\help' or '\?' for help; '\quit' to exit.
Currently in JavaScript mode. Use \sql to switch to SQL mode and execute queries.
mysql-js>

建立叢集

mysql-js> var cluster = dba.createCluster('dc', {adoptFromGR: true});

執行成功後會自動建立一個新的資料庫: mysql_innodb_cluster_metadata, 用於存放叢集的後設資料, 該後設資料會被MySQL Router用到, 以實現高可用性.

參考資料

MySQL正式釋出高可用架構——MySQL InnoDB Cluster

Ubuntu/Debian上的InnoDB叢集

初探MySQL InnoDB叢集

MySql InnoDB Cluster 生產環境部署

從已有的複製組建立InnoDB叢集

Mysql 高可用 InnoDB Cluster 多節點搭建過程

Adopting a Group Replication Deployment

從已有的組複製搭建InnoDB Cluster環境

dba.createCluster(‘dc’, {adoptFromGR: true}) 的BUG

root:~# mysqlsh --version
mysqlsh   Ver 1.0.10 for Linux on x86_64 - for MySQL 5.7.19 (MySQL Community Server (GPL))

從現有的複製組建立 InnoDB 叢集的問題: https://bugs.mysql.com/bug.ph… MySQL Shell 的一個BUG, 降級到 1.0.9 正常.