部署InnoDB Cluster
在MySQL Group Replication的基础上,官方又推出了InnoDB Cluster,它包含了MySQL Server、MySQL Shell(用于集群管理)和MySQL Router(用于客户端连接路由)。
环境说明
该测试环境中,各主机的用途如表所示。
|
主机名 |
IP |
端口 |
server_id |
用途 |
|
mysqldb01 |
192.168.56.131 |
3306 |
131 |
集群节点 |
|
mysqldb02 |
192.168.56.132 |
3306 |
132 |
集群节点 |
|
mysqldb03 |
192.168.56.133 |
3306 |
133 |
集群节点 |
|
mysqldb04 |
192.168.56.134 |
|
|
mysql-shell mysql-router |
配置集群节点
安装MySQL
安装MySQL软件并完成初始化工作,确保所有集群节点的MySQL版本相同。
创建通信用户
为所有集群节点创建一个用于集群通信的MySQL用户,用户名和密码需保持一致。
|
set sql_log_bin=0; create user 'repuser'@'%' identified by 'welcome1'; grant all on *.* to 'repuser'@'%' with grant option; set sql_log_bin=1; |
开启binlog及GTID
为所有集群节点的MySQL配置文件/etc/my.cnf中添加以下内容。
|
#设置主机名为节点的IP地址 report_host=192.168.x.x
#开启binlog log-bin = /data/mysql/log_bin/mysql-bin binlog_format = ROW sync_binlog = 1 binlog_transaction_dependency_tracking = WRITESET
#开启GTID强一致性 enforce_gtid_consistency=ON gtid_mode=ON
#设置节点服务ID,集群中的每个节点需要唯一的正整数的服务ID server_id=131 |
安装mysql-shell
|
tar -zxvf mysql-shell-8.0.42-linux-glibc2.17-x86-64bit.tar.gz -C /usr/local cd /usr/local ln -s mysql-shell-8.0.42-linux-glibc2.17-x86-64bit mysql-shell |
创建集群
创建单节点集群
通过MySQL Shell连接到某个MySQL节点,然后创建集群,该节点即为集群的主节点。例如:192.168.56.131为主节点。
|
mysqlsh --js 'repuser'@'192.168.56.131':3306 dba.checkInstanceConfiguration() dba.createCluster('test_cluster') |
dba.checkInstanceConfiguration()方法用于检测当前节点是否满足创建集群的需求,针对不满足需求的项目进行修改,直到满足需求为止。

创建集群的过程如图所示。

检测其他节点
检测其他节点是否满足加入集群的条件。以192.168.56.132为例:
|
mysqlsh --js 'repuser'@'192.168.56.132':3306 dba.checkInstanceConfiguration() |
向集群中加入其他节点
使用MySQL Shell连接到主节点,执行dba.addInstance()方法将其他节点加入集群,需要为每个从节点都执行添加动作。例如:若要添加节点地址为192.168.56.132,用户为repuser,则命令为:
|
cluster = dba.getCluster('test_cluster') cluster.addInstance('repuser@192.168.56.132:3306'); |

查看集群状态
|
cluster.status(); |

配置mysql-router
安装mysql-router
|
tar -xvf mysql-router-8.0.42-linux-glibc2.17-x86_64.tar.xz -C /usr/local cd /usr/local chown mysql:mysql mysql-router-8.0.42-linux-glibc2.17-x86_64/ ln -s mysql-router-8.0.42-linux-glibc2.17-x86_64 mysql-router |
创建mysqlrouter用户
|
useradd mysqlrouter echo 'welcome1' |passwd --stdin mysqlrouter |
初始化MySQL Router
|
[root@mysqldb04 lib]# mysqlrouter --bootstrap repuser@192.168.56.131:3306 --directory /var/lib/mysqlrouter --conf-bind-address 0.0.0.0 --user=mysqlrouter - Creating account(s) (only those that are needed, if any) # MySQL Router configured for the InnoDB Cluster 'test_cluster' After this MySQL Router has been started with the generated configuration $ mysqlrouter -c /var/lib/mysqlrouter/mysqlrouter.conf InnoDB Cluster 'test_cluster' can be reached by connecting to: ## MySQL Classic protocol - Read/Write Connections: localhost:6446 ## MySQL X protocol - Read/Write Connections: localhost:6448 [root@mysqldb04 lib]# |
创建MySQL Router服务
|
vi /usr/lib/systemd/system/mysqlrouter.service 添加如下内容: [Unit] Description=MySQL Router Service After=network.target
[Service] User=mysqlrouter Group=mysqlrouter Type=forking ExecStart=/var/lib/mysqlrouter/start.sh ExecStop=/var/lib/mysqlrouter/stop.sh Restart=on-failure StandardOutput=journal
[Install] WantedBy=multi-user.target |
启动MySQL Router服务
|
#刷新服务文件 systemctl daemon-reload #启动mysqlrouter systemctl start mysqlrouter.service #设置mysqlrouter开机自启 systemctl enable mysqlrouter.service #查看服务状态 systemctl status mysqlrouter.service |
验证配置
使用客户端连接MySQL Router的地址和端口。执行读写操作,验证数据一致性和故障转移功能。
|
[mysql@mysqldb03 ~]$ mysql -h192.168.56.134 -P6446 -urepuser -pwelcome1 repuser@192.168.56.134 [(none)]>select @@hostname; +------------+ | @@hostname | +------------+ | mysqldb01 | +------------+ [mysql@mysqldb03 ~]$ mysql -h192.168.56.134 -P 6447 -urepuser -pwelcome1 repuser@192.168.56.134 [(none)]>select @@hostname; +------------+ | @@hostname | +------------+ | mysqldb02 | +------------+ |
模拟primary节点出现故障,集群会自动选出新的primary节点。
|
repuser@192.168.56.134 [mm]>SELECT * FROM performance_schema.replication_group_members; repuser@192.168.56.134 [mm]>select @@hostname; repuser@192.168.56.134 [mm]>SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ repuser@192.168.56.134 [mm]>select @@hostname; |
浙公网安备 33010602011771号