重点::mysql MGR 单主和多主模式的多实例配置!!!

包连接:

https://dev.mysql.com/downloads/mysql/5.7.html

---------------准备mysql环境----------------------
groupadd -g 520 mysql
useradd -u 520 -g mysql mysql 
echo 'Mysql@321!' |passwd --stdin mysql
su - mysql
cd /home/mysql
tar -xzf mysql-5.7.32-el7-x86_64.tar.gz 
mv mysql-5.7.32-el7-x86_64  mysql5.7.32
mkdir -p /mysql{1,2,3}/{log,data,binlog,relaylog}

配置hosts文件

---------------配置实例------------------
编写配置文件:
cat my13306.cnf

[client]
socket=/mysql1/data/mysql_13306.sock

[mysqld]
plugin-load-add=group_replication.so
socket=/mysql1/data/mysql_13306.sock
port=13306
symbolic-links=0
log-error=/mysql1/log/mysqld.log
pid-file=/mysql1/data/mysqld.pid
slow_query_log_file=/mysql1/log/slow.log
slow_query_log=1
long_query_time=1
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=1  #node1为,node2为2,node3为3,不能重复
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=1
binlog_checksum=NONE
log_slave_updates=ON
log_bin= /mysql1/binlog/mgr-binlog
relay_log=/mysql1/relaylog/mgr-relaylog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
datadir=/mysql1/data


loose-group_replication_flow_control_applier_threshold=10000
loose-group_replication_flow_control_certifier_threshold=10000
loose-group_replication_group_name="bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"        #告知插件,正在加入或创建的组要命名,一般写uuid,通过select uuid();可获得。
loose-group_replication_start_on_boot=off
loose-group_replication_local_address=mysql-host-1:43306                        #主机名:port
loose-group_replication_group_seeds="mysql-host-2:43306,mysql-host-1:43306,mysql-host-3:43306"
loose-group_replication_ip_whitelist="mysql-host-2,mysql-host-1,mysql-host-3"
loose-group_replication_bootstrap_group=off
loose-group_replication_member_weight=40
loose-group_replication_unreachable_majority_timeout=5
loose-group_replication_transaction_size_limit= 150000000

group_replication_single_primary_mode=off                    #开启多主模式
group_replication_enforce_update_everywhere_checks=on        #多主模式时启用
group_replication_start_on_boot=on                            #配置自动加入组(完成MGR配置后再加入参数启用,重启数据库验证)


重点参数详解:

MGR一定要开启GTID功能gtid_mode = ON,enforce_gtid_consistency = ON
MGR在当前MySQL版本中,必须要设置binlog_checksum=none,并且binlog_format=row
MGR需要多源复制功能,所以需要将主从库之间的信息记录到表中。设置master_info_repository = TABLE和relay_log_info_repository = TABLE
MGR中开启主键信息采集功能:
transaction_write_set_extraction= XXHASH64
MGR中需要设置组的名字,该group_replication_group_name是通过select uuid()来生成的。
MGR中本地成员的地址由该参数group_replication_local_address决定,本例中当前节点是node2。后面的端口是每个节点都需要一个独立的TCP端口号,节点之间通过这个端口号进行通信。
MGR中其他成员的地址由这个参数group_replication_group_seeds决定
MGR采取多主模式时,需要让该参数:
group_replication_single_primary_mode=off(默认是单主模式)。
于此同时,还需要将该参数:group_replication_enforce_update_everywhere_checks=on,目的则是为了做多主模式限制检测。
注:加载到参数文件里面,需要在每个参数的前面加loose。
这里再强调一个参数:group_replication_auto_increment_increment该参数代表自增属性,默认值为7。我们要保证每个成员的该值相同,并且建议该参数的设置尽量比组内成员的个数大一些,方便后期集群的扩展。

如果在启动服务器时尚未加载组复制插件,则上述变量loose-使用 的前缀 group_replication指示服务器继续启动。
配置 transaction_write_set_extraction
指示服务器对于每个事务,它必须收集写集并使用XXHASH64散列算法将其编码为散列。从MySQL 8.0.2开始,此设置是默认设置,因此可以省略此行。
配置 group_replication_group_name
必须是有效的UUID。在二进制日志中为组复制事件设置GTID时,将在内部使用此UUID。使用SELECT UUID()生成一个UUID。
配置 group_replication_start_on_boot
指示插件在服务器启动时不自动启动操作。这在设置组复制时很重要,因为它确保您可以在手动启动插件之前配置服务器。
配置成员后,可以设置 group_replication_start_on_boot 为on,以便在服务器引导时自动启动Group Replication。
配置 group_replication_local_address
告诉插件本机使用网络地址127.0.0.1和端口24901与组中的其他成员进行内部通信。
重要
组复制使用此地址进行使用XCom的内部成员到成员连接。此地址必须与用于SQL的主机名和端口不同,并且不得用于客户端应用程序。
在运行组复制时,必须为组成员之间的内部通信保留它。
配置的网络地址 group_replication_local_address
必须可由所有组成员解析。例如,如果每个服务器实例位于具有固定网络地址的其他计算机上,则可以使用计算机的IP,例如10.0.0.1。
如果使用主机名,则必须使用完全限定名称,并确保它可通过DNS,正确配置的/etc/hosts 文件或其他名称解析过程进行解析。
建议的端口 group_replication_local_address 是33061.在本教程中,我们使用在一台计算机上运行的三个服务器实例,因此端口24901到24903用于内部通信网络地址。
配置 group_replication_group_seeds
设置组成员的主机名和端口,新成员使用它们建立与组的连接。这些成员称为种子成员。建立连接后,将列出组成员身份信息 performance_schema.replication_group_members。
通常,group_replication_group_seeds 列表包含hostname:port每个组成员的列表 group_replication_local_address,但这不是强制性的,可以选择组成员的子集作为种子。
重要,该hostname:port列在 group_replication_group_seeds 是种子构件的内部网络地址,由被配置 group_replication_local_address ,
而不是SQL hostname:port用于客户端连接,并且例如在显示 performance_schema.replication_group_members 表中。


----------------------------------------------------------------------
实例1
mysql1:

创建实例:
/home/mysql/mysql5.7.32/bin/mysqld --initialize --datadir=/mysql1/data  --user=mysql --basedir=/home/mysql/mysql5.7.32
启动mysql实例:
nohup /home/mysql/mysql5.7.32/bin/mysqld_safe --defaults-file=/mysql1/my13306.cnf &
或者:
/home/mysql/mysql5.7.32/bin/mysqld --defaults-file=/mysql1/my13306.cnf --daemonize --user=mysql --pid-file=/mysql1/data/mysqld.pid
登录:
/home/mysql/mysql5.7.32/bin/mysql -uroot -S /mysql1/data/mysql_13306.sock -p
修改密码:
ALTER USER USER() IDENTIFIED BY '123456';
select user,host,authentication_string from mysql.user;
select password('123456');
安装组插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SHOW PLUGINS; 

实例2
mysql2:

创建实例:
/home/mysql/mysql5.7.32/bin/mysqld --initialize --datadir=/mysql2/data  --user=mysql --basedir=/home/mysql/mysql5.7.32
启动mysql实例:
nohup /home/mysql/mysql5.7.32/bin/mysqld_safe --defaults-file=/mysql2/my13307.cnf &
或者
/home/mysql/mysql5.7.32/bin/mysqld --defaults-file=/mysql2/my13307.cnf --daemonize --user=mysql --pid-file=/mysql2/data/mysqld.pid
登录:
/home/mysql/mysql5.7.32/bin/mysql -uroot -S /mysql2/data/mysql_13307.sock -p
修改密码:
ALTER USER USER() IDENTIFIED BY '123456';
select user,host,authentication_string from mysql.user;
select password('123456');
安装组插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SHOW PLUGINS; 
实例3
mysql3:

创建实例:
/home/mysql/mysql5.7.32/bin/mysqld --initialize --datadir=/mysql3/data  --user=mysql --basedir=/home/mysql/mysql5.7.32
启动mysql实例:
nohup /home/mysql/mysql5.7.32/bin/mysqld_safe --defaults-file=/mysql3/my13308.cnf &
或者
/home/mysql/mysql5.7.32/bin/mysqld --defaults-file=/mysql3/my13308.cnf --daemonize --user=mysql --pid-file=/mysql3/data/mysqld.pid
登录:
/home/mysql/mysql5.7.32/bin/mysql -uroot -S /mysql3/data/mysql_13308.sock -p
修改密码:
ALTER USER USER() IDENTIFIED BY '123456';
select user,host,authentication_string from mysql.user;
select password('123456');
安装组插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SHOW PLUGINS; 
-----------------------------------------------------
查看当前登录的实例:
show variables like "port";
show variables like "socket";
show variables like "datadir";


--------------------做systemd服务管理---------------------------------

###实例1
cat /usr/lib/systemd/system/mysqld13306.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/mysql1/data/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true


# Start main service
ExecStart=/home/mysql/mysql5.7.32/bin/mysqld --defaults-file=/mysql1/my13306.cnf --daemonize --user=mysql --pid-file=/mysql1/data/mysqld.pid $MYSQLD_OPTS

# Use this to switch malloc implementation
#EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 50000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false
 

-----------加载service-------启动验证service-------------
systemctl  daemon-reload 
systemctl start mysqld13306.service 
systemctl stop mysqld13307.service 

----------------MGR配置---------------------

单主配置:

1、创建组复制用户,并配置组复制通道(3节点都执行)
mysql -uroot -S /mysql1/data/mysql_13306.sock -p123456

CREATE USER mgr_user@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO mgr_user@'%';
FLUSH PRIVILEGES;


配置复制通道(3节点都执行):
CHANGE MASTER TO MASTER_USER='mgr_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

2、节点1作为引导节点启动组复制
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;


3.启动其他两节点
START GROUP_REPLICATION;

4.1在节点1在执行
SET GLOBAL group_replication_bootstrap_group=OFF;

5.查询组复制成员和主节点
SELECT * FROM performance_schema.replication_group_members;
show status like 'group%';
查询当前哪台主机是master节点:
SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID = (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member');

6.在节点1测试
create database test;
use test;
create table t1(id int primary key);
insert into t1 values(1);

-------------------------------------------------------
多主模式:
mysql -uroot -S /mysql2/data/mysql_13307.sock -p123456
创建同步用户:
所有节点执行:
CREATE USER mgr_user@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO mgr_user@'%';
CHANGE MASTER TO MASTER_USER='mgr_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';


所有节点执行:
set global group_replication_single_primary_mode=OFF;  #开启多主模式.
set global group_replication_enforce_update_everywhere_checks=ON;
# 在多主模式下部署时,将检查语句以确保它们与该模式兼容。在多主模式下部署组复制时,将进行以下检查:
#    --如果事务是在SERIALIZABLE隔离级别下执行的,则在与组同步时,其提交将失败。
#    --如果事务是针对具有具有级联约束的外键的表执行的,则该事务在与组同步时将无法提交。
#  这些检查可以通过设置选项来禁用 group_replication_enforce_update_everywhere_checks 到FALSE。在单主要模式下部署时,此选项必须设置为FALSE。


某个节点A执行:
SET GLOBAL group_replication_bootstrap_group=ON; 
START GROUP_REPLICATION; 
其他节点:
START GROUP_REPLICATION;

如果出现报错,则在所有节点都执行
stop GROUP_REPLICATION;
reset master;

某个节点A再执行:
SET GLOBAL group_replication_bootstrap_group=OFF;

查询组复制成员和主节点
SELECT * FROM performance_schema.replication_group_members;
show status like 'group%';#多主模式查不出来值
show variables like 'group_replication_local_address';#查看当前库所在主机信息

检查是否开启多主模式.
show variables like 'group_replication_single_primary_mode';
show variables like 'group_replication_enforce_update_everywhere_checks';
show variables like 'group_replication_bootstrap_group';

你配置成功了吗,有问题欢迎留言。感谢各位支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值