美文网首页
Mysql-8.0.2 高可用MGR(二) 搭建

Mysql-8.0.2 高可用MGR(二) 搭建

作者: _大叔_ | 来源:发表于2020-11-09 10:36 被阅读0次

关于MySQL的安装和初始化这里就说了,可以借鉴 mysql8 安装官网教程。这里只阐述 MGR的配置,高可用使用的是 keepalived,安装可查阅我这篇博客。

一、数据库环境

官方说至少三个mysql实例,但我测试两个也可以。

ip 节点名称 server-id UUID
10.240.30.101 node101 101 7dc79cb4-e0a3-4561-955c-fe374dc59a16
10.240.30.102 node102 102 7dc79cb4-e0a3-4561-955c-fe374dc59a16
10.240.30.103 node103 103 7dc79cb4-e0a3-4561-955c-fe374dc59a16

节点名称可以使用:hostname 命令查看,可以再 /etc/hostname 里改,然后重启
server-id:可以随便设置但要唯一
UUID:这个ID必须一致

重要提示: 主机名不可以相同

二、所有节点配置HOST

vim /etc/hosts

加入如下:

10.240.30.101 node101
10.240.30.102 node102 
10.240.30.103 node103

三、修改My.cnf配置文件

在 101 节点,/etc/my.cnf 修改

[mysqld]


#######################################################################  组复制基础要求  #########################################################
# 禁用引擎引擎,mgr只允许使用innodb,为了防止错误提前设置
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
# 开启GTID,必须开启
gtid_mode=ON
# 强制GTID的一致性
enforce_gtid_consistency=ON
# server-id必须是唯一的
server-id = 102
# 加密方式
default_authentication_plugin=mysql_native_password

########################################################################  binlog 配置  #######################################################

# binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row
binlog_format=row
# binlog校验规则,5.6之后的高版本是CRC32(包括8.0.20),低版本都是NONE,但是MGR要求使用NONE
binlog_checksum=NONE
log_bin=binlog
# 因为集群会在故障恢复时互相检查binlog的数据,
## 所以需要记录下集群内其他服务器发过来已经执行过的binlog,按GTID来区分是否执行过.默认关闭。
## 如果从下还有从,建议打开。
log-slave-updates=1
# 基于安全的考虑,MGR集群要求复制模式要改成slave记录到表中,不然就报错
master_info_repository=TABLE
# 同上配套
relay_log_info_repository=TABLE
# 记录事务的算法,官网建议设置该参数使用 XXHASH64 算法
transaction_write_set_extraction = XXHASH64
# MGR使用乐观锁,所以官网建议隔离级别是RC,减少锁粒度
# transaction_isolation=READ-COMMITTED

#######################################################################   组复制设置   ########################################################

# 将组复制插件添加到服务器在启动时加载的插件列表中。在生产部署中,这比手动安装插件更好
plugin_load_add='group_replication.so'
# 告诉插件将其加入或创建的组命名为“ aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaaaa”
# 必须是有效的UUID。在二进制日志中为组复制事件设置GTID时在内部使用此UUID。您可以SELECT UUID()用来生成UUID
group_replication_group_name='7dc79cb4-e0a3-4561-955c-fe374dc59a16'
# 变量以off指示插件在服务器启动时不自动启动操作。这在设置组复制时很重要,因为它可确保您可以在手动启动插件之前配置服务器。
## 配置成员后,您可以设置 group_replication_start_on_boot 为,on以便在服务器启动时自动启动组复制
group_replication_start_on_boot=off
#本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口
group_replication_local_address='node101:33081'
#需要接受本MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
group_replication_group_seeds='node101:33081,node102:33081,node103:33081'
#开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启,
group_replication_bootstrap_group=OFF


# IP地址白名单,默认只添加127.0.0.1,不会允许来自外部主机的连接,按需安全设置
#group_replication_ip_whitelist = '127.0.0.1/8,10.240.30.100,10.240.30.102,192.168.200.89'
# 是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了
#group_replication_single_primary_mode=off
# 多主模式下,强制检查每一个实例是否允许该操作,如果单主,可以关闭
#group_replication_enforce_update_everywhere_checks=off
# 兼容加入组
#group_replication_allow_local_disjoint_gtids_join=ON

其他节点只需要修改 server-id 、group_replication_local_address 的值。

重要提示: group_replication_group_name 一样会报错,所以要修改 member_id。可以在主和从里用如下语句查到 member_id 是一样的:
SELECT * FROM performance_schema.replication_group_members
只需要修改 datadir 下的 auto.cnf 文件里的 uuid。把各uuid改成不一样就可以正常加入组,并正常的复制。

四、端口防火墙

所有节点允许此端口进行访问

/sbin/iptables -I INPUT -p tcp --dport 33081 -j ACCEPT
setenforce 0

五、登录mysql并配置

登录成功之后,安装插件,如果配置使声明如下

plugin_load_add='group_replication.so'

则可以跳过 install 步骤。

mysql> install PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.08 sec)

查看所有插件,并查找我们的插件是否正确安装。

mysql> show plugins;
+---------------------------------+----------+--------------------+----------------------+---------+
| Name                            | Status   | Type               | Library              | License |
+---------------------------------+----------+--------------------+----------------------+---------+
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
+---------------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)

配置账号,每个节点都要进行配置。

# 关闭binlog,使得创建用户不记录到binlog中
SET SQL_LOG_BIN=0;
# 创建复制用户
CREATE USER repl@'%' IDENTIFIED BY 'repl';
# 授权
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
GRANT BACKUP_ADMIN ON *.* TO repl@'%';
# 更新
FLUSH PRIVILEGES;
# 开启binlog
SET SQL_LOG_BIN=1;
# 授权 使用 group_replication_recovery 复制通道的给定凭证。
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

六、启动MGR单主模式

主操作

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

从操作
清除可能不必要的一些日志

mysql> RESET MASTER;
mysql> START GROUP_REPLICATION;

查询状态

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 751841e9-143d-11eb-8e6a-000c29a85d54 | node102     |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
| group_replication_applier | 751841e9-143d-11eb-8e6a-000c29a85d55 | node101     |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

set global read_only=0,在关闭从得时候所有操作都是 只读的,使用该语句可以关闭只读。所有从库只能做为只读库存在。

如果说出现了密码问题,可以使用如下步骤操作,该方式是在当初没有指定密码插件的时候,而已经生成的复制用户。
# 关闭日志
SET SQL_LOG_BIN=0;
# 关闭只读模式
SET GLOBAL READ_ONLY=0;
# 指定修改密码的加密方式并修改
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl';
# 更新
FLUSH PRIVILEGES;
# 开启日志
SET SQL_LOG_BIN=1;

七、主主复制

先停止主和从,先停从后停主

mysql> stop GROUP_REPLICATION;
Query OK, 0 rows affected (4.36 sec)

101主启动设置

设置单主模式参数为off

mysql> set GLOBAL group_replication_single_primary_mode=off;
Query OK, 0 rows affected (0.00 sec)

该参数设置为ON,则禁用了在多主模式下一些可能产生未知数据冲突的操作

mysql> set GLOBAL group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)

设置为第一个准备启动MGR(bootstrap)的节点

mysql> set GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

启动复制

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.37 sec)

为了防止后续由于意外再启动另外一个复制组,关闭bootstrap参数

mysql> set GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

102主启动设置

mysql> set GLOBAL group_replication_single_primary_mode=off;
Query OK, 0 rows affected (0.00 sec)
mysql> set GLOBAL group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (3.55 sec)

查询状态

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 751841e9-143d-11eb-8e6a-000c29a85d54 | node102     |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 751841e9-143d-11eb-8e6a-000c29a85d55 | node101     |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

102如果重启,需要再次使用sql语句,加入到组。
关于mysql高可用看下一篇文章

相关文章

网友评论

      本文标题:Mysql-8.0.2 高可用MGR(二) 搭建

      本文链接:https://www.haomeiwen.com/subject/ybyovktx.html