部署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
Please enter MySQL password for repuser:
# Bootstrapping MySQL Router 8.0.42 (MySQL Community - GPL) instance at '/var/lib/mysqlrouter'...

- Creating account(s) (only those that are needed, if any)
- Verifying account (using it to run SQL queries that would be run by Router)
- Storing account in keyring
- Adjusting permissions of generated files
- Creating configuration /var/lib/mysqlrouter/mysqlrouter.conf

# 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
- Read/Only Connections: localhost:6447

## MySQL X protocol

- Read/Write Connections: localhost:6448
- Read/Only Connections: localhost:6449

[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;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9537d448-61dd-11f0-be49-080027271961 | mysqldb01 | 3306 | ONLINE | PRIMARY | 8.0.42 | MySQL |
| group_replication_applier | 9539083c-61dd-11f0-adb3-080027387989 | mysqldb02 | 3306 | ONLINE | SECONDARY | 8.0.42 | MySQL |
| group_replication_applier | 956bffc8-61dd-11f0-ac9c-08002741ee36 | mysqldb03 | 3306 | ONLINE | SECONDARY | 8.0.42 | MySQL |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)

repuser@192.168.56.134 [mm]>select @@hostname;
+------------+
| @@hostname |
+------------+
| mysqldb01 |
+------------+
1 row in set (0.00 sec)

repuser@192.168.56.134 [mm]>SELECT * FROM performance_schema.replication_group_members;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id: 126
Current database: mm

+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9539083c-61dd-11f0-adb3-080027387989 | mysqldb02 | 3306 | ONLINE | PRIMARY | 8.0.42 | MySQL |
| group_replication_applier | 956bffc8-61dd-11f0-ac9c-08002741ee36 | mysqldb03 | 3306 | ONLINE | SECONDARY | 8.0.42 | MySQL |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
2 rows in set (0.01 sec)

repuser@192.168.56.134 [mm]>select @@hostname;
+------------+
| @@hostname |
+------------+
| mysqldb02 |
+------------+
repuser@192.168.56.134 [mm]>

 

posted @ 2025-07-16 17:50  石云华  阅读(112)  评论(0)    收藏  举报