• MySQL8.0 MGR方式搭建集群


    一、环境准备

    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 即可。

    1. server_id=1
    2. gtid_mode=ON
    3. enforce_gtid_consistency=ON
    4. binlog_checksum=NONE
    5. log_bin=binlog
    6. log_slave_updates=ON
    7. binlog_format=ROW
    8. master_info_repository=TABLE
    9. relay_log_info_repository=TABLE
    10. transaction_write_set_extraction=XXHASH64
    11. loose-group_replication_group_name="aadaaaaa-adda-adda-aaaa-aaaaaaddaaaa"
    12. loose-group_replication_start_on_boot=OFF
    13. loose-group_replication_local_address= "192.168.157.128:24901"
    14. loose-group_replication_group_seeds= "192.168.157.128:24901,192.168.157.129:24902,192.168.157.130:24903"
    15. loose-group_replication_bootstrap_group=OFF

    三、启动MySQL服务

    1. 增加mgr复制用户(三台机器都要操作)

    1. SET SQL_LOG_BIN=0;
    2. CREATE USER mgruser@'%' IDENTIFIED BY 'mgruser';
    3. GRANT REPLICATION SLAVE ON *.* TO mgruser@'%';
    4. FLUSH PRIVILEGES;
    5. SET SQL_LOG_BIN=1;
    6. CHANGE MASTER TO MASTER_USER='mgruser', MASTER_PASSWORD='mgruser' FOR CHANNEL 'group_replication_recovery';

    2. 下载mgr插件 (三台机器都要操作)

    install PLUGIN group_replication SONAME 'group_replication.so';

    查看是否下载成功,使用show plugins;语句查看

     3. 启动mgr单主模式

    主节点操作

    1. SET GLOBAL group_replication_bootstrap_group=ON;
    2. START GROUP_REPLICATION;
    3. 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. 创建表

    1. use mgr;
    2. CREATE TABLE `user` (
    3. `id` bigint NOT NULL ,
    4. `account` varchar(30) NOT NULL ,
    5. `name` varchar(50) NOT NULL ,
    6. PRIMARY KEY (`id`) USING BTREE,
    7. UNIQUE KEY `UN_ACCOUNT` (`account`) USING BTREE
    8. )

    从库上查看表信息

     3. 插入数据

    1. INSERT INTO user VALUES (1, 'zhangsan', '张三');
    2. 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节点上

    1. # 下载
    2. wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.23-el7-x86_64.tar.gz
    3. # 解压
    4. tar -zxvf mysql-router-8.0.23-el7-x86_64.tar.gz
    5. # 重命名
    6. mv mysql-router-8.0.23-el7-x86_64 mysql-router-8.0
    7. # 将mysql-router的目录添加到环境变量PATH中
    8. echo "export PATH=$PATH:/opt/apps/mysql-router-8.0/bin/" >> /etc/profile
    9. source /etc/profile
    10. # 验证是否安装成功
    11. mysqlrouter -V

    2. 修改MySQL Router配置

    在mysql-router-8.0目录下

    1. # 创建日志和数据目录
    2. mkdir logs data

    在/etc 目录下创建mysqlrouter.cnf文件,内容如下

    1. [keepalive]
    2. interval = 60
    3. [DEFAULT]
    4. logging_folder=/opt/apps/mysql-router-8.0/logs
    5. runtime_folder=/opt/apps/mysql-router-8.0/run
    6. data_folder=/opt/apps/mysql-router-8.0/data
    7. connect_timeout=30
    8. read_timeout=30
    9. [logger]
    10. level = INFO
    11. [routing:primary]
    12. bind_address = 0.0.0.0
    13. # 端口7001
    14. bind_port = 7001
    15. max_connections = 1024
    16. # 可用的支持写操作的主库,或者主库共用的IP
    17. destinations = 192.168.157.128:3306,192.168.157.129:3306,192.168.157.130:3306
    18. routing_strategy = first-available
    19. [routing:secondary]
    20. bind_address = 0.0.0.0
    21. # 端口7002
    22. bind_port = 7002
    23. max_connections = 1024
    24. # 参与读负载均衡的从库
    25. destinations = 192.168.157.129:3306,192.168.157.130:3306
    26. routing_strategy = round-robin

    修改权限

    1. chown -R mysql:mysql /opt/apps/mysql-router-8.0/
    2. 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,然后重启网卡。

    1. #编辑/etc/hosts文件
    2. vi /etc/hosts
    3. 192.168.157.128 node1
    4. 192.168.157.129 node2
    5. 192.168.157.130 node3
    6. # 重启网卡
    7. service network restart
    8. # 查看hostname是否修改
    9. hostname

    4. 从库执行开始组复制的时候报错

    Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061

    1. STOP GROUP_REPLICATION;
    2. SET GLOBAL group_replication_recovery_get_public_key=ON;
    3. START GROUP_REPLICATION;

    好了,MySQL集群就这样搭完了。大家快去试试吧。

  • 相关阅读:
    oracle 简易客户端上使用rman
    【中间件】服务化中间件理论intro
    阿里云无法使用高级权限账户打开定时任务开关的解决办法
    【PAT(甲级)】1055 The World‘s Richest
    计算机毕业设计(附源码)python在线书城管理系统
    SQL中有关数据查询的练习
    -60V -40V -100V 30A 50A 100A P管大电流 正极,负极做关断的电路图 解决方案N沟道,P沟道MOSFET开关电路图介绍
    windows OpenCV(包含cuda)最简安装教程
    javax.validation.constraints校验
    .NET 6 实现滑动验证码(十)、大结局:前端代码实战,vue3与HTML+JQuery
  • 原文地址:https://blog.csdn.net/axibazZ/article/details/127103865