mysql5.7 MGR集群搭建

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 最近看了一下mysql5.7的MGR集群挺不错的,有单主和多主模式,于是乎搭建测试了一下效果还不错,我指的不错是搭建和维护方面都比较简单。网上绝大多数都是单主模式,当然我这里也是,为了加深印象,特意记录一下搭建过程,等以后再去尝试多主模式,相信大家现在数据库的瓶颈基本都是在写,读写分...
最近看了一下mysql5.7的MGR集群挺不错的,有单主和多主模式,于是乎搭建测试了一下效果还不错,我指的不错是搭建和维护方面都比较简单。网上绝大多数都是单主模式,当然我这里也是,为了加深印象,特意记录一下搭建过程,等以后再去尝试多主模式,相信大家现在数据库的瓶颈基本都是在写,读写分离虽然是一种可行的解决方案,但是如果数据量很大,写一样会有问题,虽然有些解决方案能部署多个主节点,能同时进行读写,但是脑裂又是一个严重的问题,所以这里MGR集群内置了自动化脑裂防护机制又得到了很多人的青睐,这里MGR简称MySQL Group Replication是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。注意本文这里不再阐述原理性的东西。
注意:我这里采用编译安装的方式,如果想简单直接yum安装mysql5.7也行,mysql编译安装需要的磁盘空间还是比较大的,一般在7G左右,所以要提前规划好,用三个节点比较接近生产环境,而且更直接清晰。
详细部署信息如下:
主机名 IP地址 安装软件 用途
apache 192.168.2.25 cmake、boost、mysql 节点
nginx 192.168.2.26 cmake、boost、mysql 节点
kibana 192.168.2.30 cmake、boost、mysql 节点
1、三台机器准备工作

点击(此处)折叠或打开

  1. rpm -qa mysql mariadb
如果有则卸载即可!
写入hosts文件映射关系,集群用得到
192.168.2.25    apache
192.168.2.26    nginx
192.168.2.30    kibana
2、安装依赖包

点击(此处)折叠或打开

  1. yum install gcc gcc-c++ ncurses-devel -y
3、安装cmake,下载地址:https://cmake.org/download/

点击(此处)折叠或打开

  1. tar zxvf cmake-3.7.2.tar.gz
  2. cd make-3.7.2
  3. ./configure
  4. gmake && gmake install
4、安装boost,因为mysql5.7需要,注意这里下载版本是1_59_0和mysql版本是对应的,如果你的MySQL版本和我的不一样,不添加-DWITH_BOOST这个参数时它会报错告诉你需要下载boost的哪个版本。

点击(此处)折叠或打开

  1. tar zxvf boost_1_59_0.tar.gz
  2. cp -r boost_1_59_0 /usr/local/boost
5、安装mysql5.7.17及初始化操作

点击(此处)折叠或打开

  1. groupadd mysql
  2. useradd -M -s /sbin/nologin mysql -g mysql
  3. tar zxvf mysql-5.7.17.tar.gz
  4. cd mysql-5.7.17
  5. cmake -DCMAKE_INSTALL_PREFIX=/data/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_BOOST=/usr/local/boost
  6. make
  7. make install
  8. chown -R mysql.mysql /data/mysql
  9. mv /etc/my.cnf /etc/my.cnf.default
  10. cp /data/mysql/support-files/my-default.cnf /etc/my.cnf
  11. /data/mysql/bin/mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data                 //注意初始化会生成一个随机的密码,请牢记
  12. echo "PATH=$PATH:/data/mysql/bin" >> /etc/profile
  13. source /etc/profile
  14. cp /data/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
  15. chmod +x /etc/rc.d/init.d/mysqld
以上步骤在三台机器上都需要执行
6、开始搭建MGR集群环境,修改第一个节点的my.cnf文件,内容如下:

点击(此处)折叠或打开

  1. # For advice on how to change settings please see
  2. # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
  3. # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
  4. # *** default location during install, and will be replaced if you
  5. # *** upgrade to a newer version of MySQL.
  6. [mysqld]
  7. # Remove leading # and set to the amount of RAM for the most important data
  8. # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
  9. # innodb_buffer_pool_size = 128M
  10. # Remove leading # to turn on a very important data integrity option: logging
  11. # changes to the binary log between backups.
  12. # log_bin
  13. # These are commonly set, remove the # and set as required.
  14. basedir = /data/mysql
  15. datadir = /data/mysql/data
  16. port = 3306
  17. socket = /data/mysql/data/mysql.sock
  18. log-error = /data/mysql/data/mysqld.log
  19. pid-file = /data/mysql/data/mysqld.pid
  20. # Remove leading # to set options mainly useful for reporting servers.
  21. # The server defaults are faster for transactions and fast SELECTs.
  22. # Adjust sizes as needed, experiment to find the optimal values.
  23. # join_buffer_size = 128M
  24. # sort_buffer_size = 2M
  25. # read_rnd_buffer_size = 2M
  26. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  27. # Group Replication
  28. server_id = 1
  29. gtid_mode = ON
  30. enforce_gtid_consistency = ON
  31. master_info_repository = TABLE
  32. relay_log_info_repository = TABLE
  33. binlog_checksum = NONE
  34. log_slave_updates = ON
  35. log_bin = binlog
  36. binlog_format= ROW
  37. transaction_write_set_extraction = XXHASH64
  38. loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
  39. loose-group_replication_start_on_boot = off
  40. loose-group_replication_local_address = '192.168.2.25:33061'
  41. loose-group_replication_group_seeds ='192.168.2.25:33061,192.168.2.26:33061,192.168.2.30:33061'
  42. loose-group_replication_bootstrap_group = off
  43. [client]
  44. socket = /data/mysql/data/mysql.sock
启动mysql服务
/etc/init.d/mysqld start

点击(此处)折叠或打开

  1. set sql_log_bin=0;
  2. create user rpl_user@'%';
  3. grant replication slave on *.* to rpl_user@'%' identified by 'rpl_pass';
  4. flush privileges;
  5. set sql_log_bin=1;
  6. change master to master_user='rpl_user',master_password='rpl_pass' for channel 'group_replication_recovery';
  7. install PLUGIN group_replication SONAME 'group_replication.so';
  8. set global group_replication_bootstrap_group=ON;
  9. start group_replication;
  10. set global group_replication_bootstrap_group=OFF;
  11. select * from performance_schema.replication_group_members;
显示结果如下:

如果出现ONLINE,说明正常,这就是主节点,再搭建两个从节点。
7、第二个节点加入集群,复制刚刚的第一个节点的主配置文件my.cnf,只需要修改两个地方就行,已经用红色标注

点击(此处)折叠或打开

  1. # For advice on how to change settings please see
  2. # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
  3. # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
  4. # *** default location during install, and will be replaced if you
  5. # *** upgrade to a newer version of MySQL.
  6. [mysqld]
  7. # Remove leading # and set to the amount of RAM for the most important data
  8. # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
  9. # innodb_buffer_pool_size = 128M
  10. # Remove leading # to turn on a very important data integrity option: logging
  11. # changes to the binary log between backups.
  12. # log_bin
  13. # These are commonly set, remove the # and set as required.
  14. basedir = /data/mysql
  15. datadir = /data/mysql/data
  16. port = 3306
  17. socket = /data/mysql/data/mysql.sock
  18. log-error = /data/mysql/data/mysqld.log
  19. pid-file = /data/mysql/data/mysqld.pid
  20. # Remove leading # to set options mainly useful for reporting servers.
  21. # The server defaults are faster for transactions and fast SELECTs.
  22. # Adjust sizes as needed, experiment to find the optimal values.
  23. # join_buffer_size = 128M
  24. # sort_buffer_size = 2M
  25. # read_rnd_buffer_size = 2M
  26. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  27. # Group Replication
  28. server_id = 2
  29. gtid_mode = ON
  30. enforce_gtid_consistency = ON
  31. master_info_repository = TABLE
  32. relay_log_info_repository = TABLE
  33. binlog_checksum = NONE
  34. log_slave_updates = ON
  35. log_bin = binlog
  36. binlog_format= ROW
  37. transaction_write_set_extraction = XXHASH64
  38. loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
  39. loose-group_replication_start_on_boot = off
  40. loose-group_replication_local_address = '192.168.2.26:33061'
  41. loose-group_replication_group_seeds ='192.168.2.25:33061,192.168.2.26:33061,192.168.2.30:33061'
  42. loose-group_replication_bootstrap_group = off
  43. [client]
  44. socket = /data/mysql/data/mysql.sock
第二个节点执行如下命令:

点击(此处)折叠或打开

  1. set sql_log_bin=0;
  2. create user rpl_user@'%';
  3. grant replication slave on *.* to rpl_user@'%' identified by 'rpl_pass';
  4. set sql_log_bin=1;
  5. change master to master_user='rpl_user',master_password='rpl_pass' for channel 'group_replication_recovery';
  6. install plugin group_replication SONAME 'group_replication.so';
  7. set global group_replication_allow_local_disjoint_gtids_join=ON;
  8. start group_replication;
显示结果如下:

同理第三个节点加入操作方法也和第二个节点一样。
截图如下:

查询哪个是主节点:

从上图来看很明显apache主机是主节点。
测试步骤:
1、在主库上创建一个库,然后创建表,在两个从库上查询数据是否同步?
2、两个从库只能执行查询操作?
2、手动关闭主库,确认两个从库其中一个是否会变成主库?而且是MEMBER_ID第一个字母按优先级排列的接管主库?
日常维护步骤:
1、如果从库某一节点关闭

点击(此处)折叠或打开

  1. start group_replication;
2、如果所有的库都关闭后,第一个库作为主库首先执行

点击(此处)折叠或打开

  1. set global group_replication_bootstrap_group=ON;
  2. start group_replication;
剩下的库直接执行即可!

点击(此处)折叠或打开

  1. start group_replication;
3、如果主库故障,会自动从两个从库选出一个主库,主库启动后再次执行如下命令后会变成从库

点击(此处)折叠或打开

  1. start group_replication;






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
54 3
|
2月前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
57 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
103 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
47 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
57 0
|
2月前
|
SQL 关系型数据库 MySQL
mysql集群方案
mysql集群方案
48 0
|
4月前
|
关系型数据库 MySQL 网络安全
全网首例!MySQL8 MGR多主一键搭建脚本分享
全网首例!MySQL8 MGR多主一键搭建脚本分享
86 1
|
4月前
|
负载均衡 算法 关系型数据库
MySQL集群如何实现负载均衡?
【8月更文挑战第16天】MySQL集群如何实现负载均衡?
241 6
|
4月前
|
存储 负载均衡 关系型数据库
MySQL集群
【8月更文挑战第16天】MySQL集群
56 5
|
4月前
|
SQL 负载均衡 关系型数据库
*配置MySQL集群
【8月更文挑战第16天】*配置MySQL集群
101 2