一、环境准备
node1 192.168.157.128
node2 192.168.157.129
node3 192.168.157.130
三台机器分别安装MySQL8.0
MySQL 8.0 安装_傲傲娇的博客-CSDN博客
二、增加my.cnf配置文件
以192.168.157.128为例,其他节点只需要修改server_id 和 loose-group_replication_local_address 即可。
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aadaaaaa-adda-adda-aaaa-aaaaaaddaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "192.168.157.128:24901"
loose-group_replication_group_seeds= "192.168.157.128:24901,192.168.157.129:24902,192.168.157.130:24903"
loose-group_replication_bootstrap_group=OFF
三、启动MySQL服务
1. 增加mgr复制用户(三台机器都要操作)
SET SQL_LOG_BIN=0;
CREATE USER mgruser@'%' IDENTIFIED BY 'mgruser';
GRANT REPLICATION SLAVE ON *.* TO mgruser@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='mgruser', MASTER_PASSWORD='mgruser' FOR CHANNEL 'group_replication_recovery';
2. 下载mgr插件 (三台机器都要操作)
install PLUGIN group_replication SONAME 'group_replication.so';
3. 启动mgr单主模式
主节点操作
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
从节点操作
START GROUP_REPLICATION;
查看此时MGR组信息,MEMBER_STATE状态全部是ONLINE才是成功。不然就需要查看日志信息。
SELECT * FROM performance_schema.replication_group_members;
四、测试数据读写
主库上操作
1. 创建数据库
create database mgr;
查看从库上是否有数据库mgr
2. 创建表
use mgr;
CREATE TABLE `user` (
`id` bigint NOT NULL ,
`account` varchar(30) NOT NULL ,
`name` varchar(50) NOT NULL ,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `UN_ACCOUNT` (`account`) USING BTREE
)
从库上查看表信息
3. 插入数据
INSERT INTO user VALUES (1, 'zhangsan', '张三');
INSERT INTO user VALUES (2, 'lisi', '李四');
从库查看信息如下
4. 删除数据
delete from user where id = 1;
从库user表信息更新
5. 从库只有查询的权力,没有更改的权限
6. 主库服务停掉,查看从库状态变化
在node1 上执行
stop group_replication;
node1 状态变成OFFLINE下线状态
在node2 上查看组信息,发现node3现在的MEMBER_ROLE为PRIMARY
重新启动node1
start group_replication;
node1 重新加入到组中,但是此时是从节点
五、MGR整合MySQL Router实现读写分离
1. 下载安装MySQL Router
这里我安装在node2节点上
# 下载
wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.23-el7-x86_64.tar.gz
# 解压
tar -zxvf mysql-router-8.0.23-el7-x86_64.tar.gz
# 重命名
mv mysql-router-8.0.23-el7-x86_64 mysql-router-8.0
# 将mysql-router的目录添加到环境变量PATH中
echo "export PATH=$PATH:/opt/apps/mysql-router-8.0/bin/" >> /etc/profile
source /etc/profile
# 验证是否安装成功
mysqlrouter -V
2. 修改MySQL Router配置
在mysql-router-8.0目录下
# 创建日志和数据目录
mkdir logs data
在/etc 目录下创建mysqlrouter.cnf文件,内容如下
[keepalive]
interval = 60
[DEFAULT]
logging_folder=/opt/apps/mysql-router-8.0/logs
runtime_folder=/opt/apps/mysql-router-8.0/run
data_folder=/opt/apps/mysql-router-8.0/data
connect_timeout=30
read_timeout=30
[logger]
level = INFO
[routing:primary]
bind_address = 0.0.0.0
# 端口7001
bind_port = 7001
max_connections = 1024
# 可用的支持写操作的主库,或者主库共用的IP
destinations = 192.168.157.128:3306,192.168.157.129:3306,192.168.157.130:3306
routing_strategy = first-available
[routing:secondary]
bind_address = 0.0.0.0
# 端口7002
bind_port = 7002
max_connections = 1024
# 参与读负载均衡的从库
destinations = 192.168.157.129:3306,192.168.157.130:3306
routing_strategy = round-robin
修改权限
chown -R mysql:mysql /opt/apps/mysql-router-8.0/
chown -R mysql:mysql /etc/mysqlrouter.conf
3. 启动MySQL Router
mysqlrouter --config=/etc/mysqlrouter.conf &
4. 验证是否正确
在node1 上连接 129 的 7001 端口查看现在的主库为node1,并且其他节点连接129的7001也均为node1。
在node1 上连接 129 的 7002 端口,显示连接的为node3
在node2 上连接 129 的 7002 端口,显示连接的为node2
在node3上连接 129 的 7002 端口,显示连接的为node3
至此,MySQL MGR集群安装完毕。
六、问题总结
1. 主库执行开始组复制的时候报错
The member was unable to join the group. Local port: 3306'
造成错误的原因是这个配置不是ip:port,而是三个连续的数字比如官网给的24091 24092 24093即可。
loose-group_replication_group_seeds= "192.168.157.128:3306,192.168.157.129:3306,192.168.157.130:3306"
2. 主库执行开始组复制的时候报错
Error on opening a connection to slave1:24901 on local port: 24901
需要先执行stop,然后重新start
3. 从库执行开始组复制的时候报错
Plugin group_replication reported: 'Group membership changed to localhost.localdomain:3306, localhost.localdomain:3306, localhost.localdomain:3306 on view 16643679251932611:5.'
需要修改hostname的名字,修改/etc/hosts,然后重启网卡。
#编辑/etc/hosts文件
vi /etc/hosts
192.168.157.128 node1
192.168.157.129 node2
192.168.157.130 node3
# 重启网卡
service network restart
# 查看hostname是否修改
hostname
4. 从库执行开始组复制的时候报错
Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_recovery_get_public_key=ON;
START GROUP_REPLICATION;
好了,MySQL集群就这样搭完了。大家快去试试吧。