Mysql8MGR介绍
特点
- 高一致性,基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供 一致数据安全保证;
- 高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节 点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置 了自动化脑裂防护机制;
- 高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同 步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更 新组信息,自动维护新的组信息;
- 高灵活性,有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在 主上进行;多主模式下,所有server都可以同时处理更新操作。
要求:
- 引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查
- 每个表必须有主键,在进行事务冲突检测时需要利用主键值对比
- 必须开启binlog且为row格式
- 开启GTID,且主从状态信息存于表中
(–master-info-repository=TABLE、–relay-log-info-repository=TABLE)
–log-slave-updates 打开 - 一致性检测设置–transaction-write-set-extraction=XXHASH64
不支持
- RP和普通复制binlog校验不能共存,需设置–binlog-checksum=none
- 不支持gap lock(间隙锁),隔离级别需设置为read_committed
- 不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行
,影响需 要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作 - 不支持serializable(序列化)隔离级别
- DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一致
- 不支持外键:多主不支持,单主模式不存在此问题
- 最多支持9个节点:超过9台server无法加入组
Mysql8MGR集群(单主)
安装
-
安装
mv /data/mysql-8.0.22-el7-x86_64/ /data/mysql-8.0.22 创建mysql用户和组 groupadd mysql useradd -r -g mysql mysql
-
配置文件
vim /etc/my.cnf [mysqld] socket=/tmp/mysql.sock # 设置mysql的安装目录 basedir=/data/mysql-8.0.22 # 设置mysql数据库的数据的存放目录 datadir=/data/mysql-8.0.22/data #设置mysql端口 port=3306 # 允许最大连接数 max_connections=8000 max_connect_errors=2000 max_allowed_packet=512M open_files_limit=20480 table_open_cache=8192 group_concat_max_len=1024000 #开启binlog日志 server-id=ip log-bin=/data/mysql-8.0.22/binlog/bin.log relay-log=/data/mysql-8.0.22/binlog/relay.log #binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row binlog_format=row relay_log_recovery=1 expire_logs_days=10 #增加慢查询 slow-query-log=1 slow-query-log-file=/var/log/mysql-8.0.22/slow.log long_query_time=3 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET collation_connection = utf8mb4_unicode_ci' #设置临时表大小 tmp_table_size=828M max_heap_table_size=828M #表名存储在磁盘是小写的,但是比较的时候是不区分大小写 lower_case_table_names=1 # 创建新表时将使用的默认存储引擎,配置InnoDB缓冲池大小 default-storage-engine=INNODB #128M*的倍数 innodb_buffer_pool_size=2480M innodb_log_buffer_size=32M join_buffer_size=2M sort_buffer_size=2M read_buffer_size=2M read_rnd_buffer_size=4M bulk_insert_buffer_size=64M tmp_table_size=828M max_heap_table_size=828M log_timestamps=SYSTEM default-authentication-plugin=mysql_native_password symbolic-links=0 default-time-zone='+08:00' [mysqld_safe] log-error=/var/log/mysql-8.0.22/mysql.log pid-file=/var/run/mysql-8.0.22/mysql.pid mkdir /data/mysql-8.0.22/binlog mkdir /var/log/mysql-8.0.22 mkdir /var/run/mysql-8.0.22 mkdir /var/lib/mysql-8.0.22 mkdir /data/mysql-8.0.22/data touch /var/log/mysql-8.0.22/mysql.log chown -R mysql:mysql /data/mysql-8.0.22/data chown -R mysql:mysql /data/mysql-8.0.22/binlog chown -R mysql:mysql /var/log/mysql-8.0.22/ chown -R mysql:mysql /var/run/mysql-8.0.22/ chown -R mysql:mysql /var/lib/mysql-8.0.22/
-
初始化:
./bin/mysqld --initialize --lower-case-table-names=1 --user=mysql --basedir=/data/mysql-8.0.22/ --datadir=/data/mysql-8.0.22/data/
-
启动
#加入linux服务 cp support-files/mysql.server /etc/init.d/mysqld chkconfig add mysqld service mysqld start 或者 vim /etc/systemd/system/mysqld.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 ExecStart=/data/mysql-8.0.22/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 systemctl daemon-reload systemctl start mysqld systemctl enable mysqld
-
添加mysql命令
vim /root/.bash_profile PATH=$PATH:$HOME/bin:/data/mysql-8.0.22/bin source /root/.bash_profile ln -s /var/lib/mysql/mysql.sock /tmp/
-
初始化密码
alter user root@'localhost' identified by '123qqq...A'; CREATE USER 'root'@'%' IDENTIFIED BY '123qqq...A'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
-
查看uuid:
select uuid()
一主二从(uuid从与主的一样)
主
-
修改配置文件
vim /etc/my.cnf # 加载group_replication插件 plugin_load_add='group_replication.so' #开启GTID gtid_mode=ON #强制GTID的一致性 enforce_gtid_consistency=ON #MGR使用乐观锁,减少锁粒度 transaction_isolation = READ-COMMITTED #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog log-slave-updates=1 #binlog校验规则,MGR要求使用NONE binlog_checksum=NONE #MGR集群要求复制模式要改成slave记录记录到表中 master_info_repository=TABLE relay_log_info_repository=TABLE #记录事务的算法 transaction_write_set_extraction = XXHASH64 #集群主内的GTID值的UUID loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f' #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性 loose-group_replication_start_on_boot = OFF #MGRIP:MGR端口,是MGR的端口,不是数据库的端口 loose-group_replication_local_address = '本地ip:33061' #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口 loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061' #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用 #只需要在集群内的其中一台开启, loose-group_replication_bootstrap_group = OFF
-
重启
systemctl restart mysqld
-
创建集群与用户:同步数据连接用户、管理主机连接数据库的用户
停掉日志记录
set SQL_LOG_BIN=0;
创建用户
CREATE USER 'mgrrepl'@'%' IDENTIFIED WITH sha256_password BY '123qqq...A';
授权
GRANT REPLICATION SLAVE ON *.* TO 'mgrrepl'@'%';
刷新权限
flush privileges;
开启日志
set SQL_LOG_BIN=1;
情况binlog日志
reset master;
构建group replication集群
change master to master_user='mgrrepl',master_password='123qqq...A' for channel 'group_replication_recovery';
标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置
set global group_replication_bootstrap_group=ON;
作为首个节点启动MGR集群
start group_replication;
关闭group_replication_bootstrap_group
set global group_replication_bootstrap_group=OFF;
查看mgr的状态
select * from performance_schema.replication_group_members\G;
group相关参数查看
show variables like 'group%';
从
-
修改配置文件
vim /etc/my.cnf # 加载group_replication插件 plugin_load_add='group_replication.so' #开启GTID gtid_mode=ON #强制GTID的一致性 enforce_gtid_consistency=ON #MGR使用乐观锁,减少锁粒度 transaction_isolation = READ-COMMITTED #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog log-slave-updates=1 #binlog校验规则,MGR要求使用NONE binlog_checksum=NONE #MGR集群要求复制模式要改成slave记录记录到表中 master_info_repository=TABLE relay_log_info_repository=TABLE #记录事务的算法 transaction_write_set_extraction = XXHASH64 #集群主内的GTID值的UUID loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f' #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性 loose-group_replication_start_on_boot = OFF #MGRIP:MGR端口,是MGR的端口,不是数据库的端口 loose-group_replication_local_address = '本地ip:33061' #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口 loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061' #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用 #只需要在集群内的其中一台开启, loose-group_replication_bootstrap_group = OFF
-
重启
systemctl restart mysqld
-
创建集群与用户:同步数据连接用户、管理主机连接数据库的用户
停掉日志记录
set SQL_LOG_BIN=0;
创建用户
CREATE USER 'mgrrepl'@'%' IDENTIFIED WITH sha256_password BY '123qqq...A';
授权
GRANT REPLICATION SLAVE ON *.* TO 'mgrrepl'@'%';
刷新权限
flush privileges;
开启日志
set SQL_LOG_BIN=1;
情况binlog日志
reset master;
构建group replication集群
change master to master_user='mgrrepl',master_password='123qqq...A' for channel 'group_replication_recovery';
加入MGR集群
start group_replication;
查看mgr的状态
select * from performance_schema.replication_group_members\G;
group相关参数查看
show variables like 'group%';
VIP建设
-
数据库创建对应用户
create user if not exists mgrvip@'%' identified WITH mysql_native_password By '123qqq...A'; grant select on performance_schema.* to mgrvip@'%';
-
安装依赖包
yum -y install epel-release yum -y install golang tar -xvf mgr-agent-linux64-0.01.tar.gz -C /data/
-
(每台)修改配置文件
vim agent.system [system] #集群的VIP cluster_vip = 192.168.43.38 #网卡名 nic = en0 #检测节点角色的时间频率,单位为秒(S) polling_interval_Seconds = 5 #程序用来连接MySQL用户 admin_user = mgrvip #程序用来连接MySQL密码 admin_password = 123qqq...A #程序用来连接MySQL本机ip admin_address = 172.16.200.12 ##程序用来连接MySQL用户 admin_port = 33062 #MGR三节点的IP地址 peer_ips = 172.16.200.12,172.16.200.13,172.16.200.14 # todo: ordinal是MGR节点序号 ordinal = 0
-
(每台)修改配置文件后台运行
./bin/mgr-agent start -d > /dev/null 2>&1
Mysql8MGR集群(多主)
安装
-
安装
mv /data/mysql-8.0.22-el7-x86_64/ /data/mysql-8.0.22 创建mysql用户和组 groupadd mysql useradd -r -g mysql mysql
-
配置文件
vim /etc/my.cnf [mysqld] socket=/tmp/mysql.sock # 设置mysql的安装目录 basedir=/data/mysql-8.0.22 # 设置mysql数据库的数据的存放目录 datadir=/data/mysql-8.0.22/data #设置mysql端口 port=3306 # 允许最大连接数 max_connections=8000 max_connect_errors=2000 max_allowed_packet=512M open_files_limit=20480 table_open_cache=8192 group_concat_max_len=1024000 #开启binlog日志 server-id=ip log-bin=/data/mysql-8.0.22/binlog/bin.log relay-log=/data/mysql-8.0.22/binlog/relay.log #binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row binlog_format=row relay_log_recovery=1 expire_logs_days=10 #增加慢查询 slow-query-log=1 slow-query-log-file=/var/log/mysql-8.0.22/slow.log long_query_time=3 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET collation_connection = utf8mb4_unicode_ci' #设置临时表大小 tmp_table_size=828M max_heap_table_size=828M #表名存储在磁盘是小写的,但是比较的时候是不区分大小写 lower_case_table_names=1 # 创建新表时将使用的默认存储引擎,配置InnoDB缓冲池大小 default-storage-engine=INNODB #128M*的倍数 innodb_buffer_pool_size=2480M innodb_log_buffer_size=32M join_buffer_size=2M sort_buffer_size=2M read_buffer_size=2M read_rnd_buffer_size=4M bulk_insert_buffer_size=64M tmp_table_size=828M max_heap_table_size=828M log_timestamps=SYSTEM default-authentication-plugin=mysql_native_password symbolic-links=0 default-time-zone='+08:00' [mysqld_safe] log-error=/var/log/mysql-8.0.22/mysql.log pid-file=/var/run/mysql-8.0.22/mysql.pid mkdir /data/mysql-8.0.22/binlog mkdir /var/log/mysql-8.0.22 mkdir /var/run/mysql-8.0.22 mkdir /var/lib/mysql-8.0.22 mkdir /data/mysql-8.0.22/data touch /var/log/mysql-8.0.22/mysql.log chown -R mysql:mysql /data/mysql-8.0.22/data chown -R mysql:mysql /data/mysql-8.0.22/binlog chown -R mysql:mysql /var/log/mysql-8.0.22/ chown -R mysql:mysql /var/run/mysql-8.0.22/ chown -R mysql:mysql /var/lib/mysql-8.0.22/
-
初始化:
./bin/mysqld --initialize --lower-case-table-names=1 --user=mysql --basedir=/data/mysql-8.0.22/ --datadir=/data/mysql-8.0.22/data/
-
启动
#加入linux服务 cp support-files/mysql.server /etc/init.d/mysqld chkconfig add mysqld service mysqld start 或者 vim /etc/systemd/system/mysqld.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 ExecStart=/data/mysql-8.0.22/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 systemctl daemon-reload systemctl start mysqld systemctl enable mysqld
-
添加mysql命令
vim /root/.bash_profile PATH=$PATH:$HOME/bin:/data/mysql-8.0.22/bin source /root/.bash_profile ln -s /var/lib/mysql/mysql.sock /tmp/
-
初始化密码
alter user root@'localhost' identified by '123qqq...A'; CREATE USER 'root'@'%' IDENTIFIED BY '123qqq...A'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
-
查看uuid:
select uuid()
多主(uuid从与主的一样)
主
-
修改配置为文件
vim /etc/my.cnf # 加载group_replication插件 plugin_load_add='group_replication.so' #开启GTID gtid_mode=ON #强制GTID的一致性 enforce_gtid_consistency=ON #MGR使用乐观锁,减少锁粒度 transaction_isolation = READ-COMMITTED #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog log-slave-updates=1 #binlog校验规则,MGR要求使用NONE binlog_checksum=NONE #MGR集群要求复制模式要改成slave记录记录到表中 master_info_repository=TABLE relay_log_info_repository=TABLE #记录事务的算法 transaction_write_set_extraction = XXHASH64 #集群主内的GTID值的UUID loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f' #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性 loose-group_replication_start_on_boot = OFF #MGRIP:MGR端口,是MGR的端口,不是数据库的端口 loose-group_replication_local_address = '本地ip:33061' #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口 loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061' #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用 #只需要在集群内的其中一台开启, loose-group_replication_bootstrap_group = OFF #开启多主模式 group_replication_single_primary_mode=OFF group_replication_enforce_update_everywhere_checks=ON
-
重启
systemctl restart mysqld
-
创建集群与用户:同步数据连接用户、管理主机连接数据库的用户
停掉日志记录
set SQL_LOG_BIN=0;
创建用户
CREATE USER 'mgr_repl'@'%' IDENTIFIED WITH sha256_password BY 'cxk123...';
授权
GRANT REPLICATION SLAVE ON *.* TO 'mgr_repl'@'%';
刷新权限
flush privileges;
开启日志
set SQL_LOG_BIN=1;
情况binlog日志
reset master;
构建group replication集群
change master to master_user='mgr_repl',master_password='cxk123...' for channel 'group_replication_recovery';
标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置
set global group_replication_bootstrap_group=ON;
作为首个节点启动MGR集群
start group_replication;
关闭group_replication_bootstrap_group
set global group_replication_bootstrap_group=OFF;
查看mgr的状态
select * from performance_schema.replication_group_members\G;
group相关参数查看
show variables like 'group%';
其它主
-
配置文件
vim /etc/my.cnf # 加载group_replication插件 plugin_load_add='group_replication.so' #开启GTID gtid_mode=ON #强制GTID的一致性 enforce_gtid_consistency=ON #MGR使用乐观锁,减少锁粒度 transaction_isolation = READ-COMMITTED #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog log-slave-updates=1 #binlog校验规则,MGR要求使用NONE binlog_checksum=NONE #MGR集群要求复制模式要改成slave记录记录到表中 master_info_repository=TABLE relay_log_info_repository=TABLE #记录事务的算法 transaction_write_set_extraction = XXHASH64 #集群主内的GTID值的UUID loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f' #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性 loose-group_replication_start_on_boot = OFF #MGRIP:MGR端口,是MGR的端口,不是数据库的端口 loose-group_replication_local_address = '本地ip:33061' #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口 loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061' #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用 loose-group_replication_bootstrap_group = OFF #开启多主模式 group_replication_single_primary_mode=OFF group_replication_enforce_update_everywhere_checks=ON
-
重启
systemctl restart mysqld
-
创建集群与用户:同步数据连接用户、管理主机连接数据库的用户
停掉日志记录
set SQL_LOG_BIN=0;
创建用户
CREATE USER 'mgr_repl'@'%' IDENTIFIED WITH sha256_password BY 'cxk123...';
授权
GRANT REPLICATION SLAVE ON *.* TO 'mgr_repl'@'%';
刷新权限
flush privileges;
开启日志
set SQL_LOG_BIN=1;
情况binlog日志
reset master;
构建group replication集群
change master to master_user='mgr_repl',master_password='cxk123...' for channel 'group_replication_recovery';
加入MGR集群
start group_replication;
查看mgr的状态
select * from performance_schema.replication_group_members\G;
group相关参数查看
show variables like 'group%';
安装pacemaker+haproxy做高可用并发
-
安装相关软件
yum install pacemaker pcs corosync fence-agents resource-agents -y yum install haproxy -y
-
配置hosts文件
vim /etc/hosts 192.168.66.21 mysql1 pacemaker-haproxy1 192.168.66.22 mysql2 pacemaker-haproxy2 192.168.66.23 mysql3 pacemaker-haproxy3
-
启动pcs服务
systemctl enable pcsd systemctl start pcsd
-
修改配置
修改集群管理员hacluster(默认生成)密码
echo hacluster | passwd --stdin hacluster
在任意一个节点认证配置操作
pcs cluster auth pacemaker-haproxy1 pacemaker-haproxy2 pacemaker-haproxy3 -u hacluster -p hacluster --force
在任意一个节点创建并命名集群
pcs cluster setup --force --name mysql-mgr-01 pacemaker-haproxy1 pacemaker-haproxy2 pacemaker-haproxy3
在任意一个节点pcemaker集群启动
pcs cluster start --all pcs cluster enable --all
在任意一个节点查看pacemaker集群状态
pcs cluster status cibadmin --query --scope nodes
查看corosync状态
#验证corosync corosync-cfgtool -s pcs status corosync
查看节点和资源
corosync-cmapctl | grep members pcs resource
在任意一个节点设置高可用属性
#设置合适的错误与警告,在trouble shooting故障排查时有用 pcs property set pe-warn-series-max=1000 pe-input-series-max=1000 pe-error-series-max=1000 #pacemaker基于时间驱动的方式进行状态处理,cluster-recheck-interval默认 定义某些pacemaker操作发生的事件间隔为15min,建议设置为5min或 3min pcs property set cluster-recheck-interval=5 #corosync默认启用stonith,但stonith机制(通过ipmi或ssh关闭节点) 并 没有配置相应的stonith设备 pcs property set stonith-enabled=false #验证配置(没有输出即正确,此时pacemaker将拒绝启动任何资源;在生 产环境可根据情况灵活调整,测试环境下可关闭) crm_verify -L -V #默认当有半数以上节点在线时,集群认为自己拥有法定人数,是“合法”的, 满足公式:total_nodes < 2 * active_nodes; #以3个节点的集群计算,当故障2个节点时,集群状态不满足上述公式,此时集 群即非法;当集群只有2个节点时,故障1个节点集群即非法,所谓的”双节点 集群”就没有意义; #在实际生产环境中,做2节点集群,无法仲裁时,可选择忽略;做3节点集群, 可根据对集群节点的高可用阀值灵活设置 pcs property set no-quorum-policy=ignore #v2的heartbeat为了支持多节点集群,提供了一种积分策略来控制各个资源 在 集群中各节点之间的切换策略;通过计算出各节点的的总分数,得分最高者将成 为active状态来管理某个(或某组)资源; #默认每一个资源的初始分数(取全局参数default-resource-stickiness,通过 "pcs property list --all"查看)是0,同时每一个资源在每次失败之后减掉的 分数(取全局参数default-resource-failure-stickiness)也是 0,此时一个 资源不论失败多少次,heartbeat都只是执行restart操作,不会进行节点切换; #如果针对某一个资源设置初始分数”resource-stickiness“或 "resource-failure-stickiness",则取单独设置的资源分数; #一般来说,resource-stickiness的值都是正数, resource-failure-stickiness的值都是负数;有一个特殊值是正无穷大 (INFINITY)和负无穷大(-INFINITY),即"永远不切换"与"只要失败必须 切 换",是用来满足极端规则的简单配置项; #如果节点的分数为负,该节点在任何情况下都不会接管资源(冷备节点); 如 果某节点的分数大于当前运行该资源的节点的分数,heartbeat会做出切换动作, 现在运行该资源的节点将释放资源,分数高出的节点将接管该资源 pcs property list Cluster Properties: cluster-infrastructure: corosync cluster-name: openstack-cluster-01 cluster-recheck-interval: 5 dc-version: 2.0.3-5.el8_2.1-4b1f869f0f have-watchdog: false no-quorum-policy: ignore pe-error-series-max: 1000 pe-input-series-max: 1000 pe-warn-series-max: 1000 stonith-enabled: false
在任意一个节点设置vip
pcs resource create vip ocf:heartbeat:IPaddr2 ip=VIP cidr_netmask=24 op monitor interval=30s #在任意控制节点设置vip(resource_id属性)即可,命名即为vip; #ocf(standard属性):资源代理(resource agent)的一种,另有systemd, lsb,service等; #heartbeat:资源脚本的提供者(provider属性),ocf规范允许多个供应 商提供同一资源代理,大多数ocf规范提供的资源代理都使用heartbeat 作为provider; #IPaddr2:资源代理的名称(type属性),IPaddr2便是资源的type; #cidr_netmask: 子网掩码位数 #通过定义资源属性(standard:provider:type),定位vip资源对应的ra 脚本位置; #centos系统中,符合ocf规范的ra脚本位于/usr/lib/ocf/resource.d/目 录,目录下存放了全部的provider,每个provider目录下有多个type; #op:表示Operations(运作方式 监控间隔= 30s)
查看集群资源
#查询vip资源 pcs resouce #可查看vip ip a show
如果api区分管理员/内部/公共的接口,对客户端只开放公共接口,通常设置两 个vip,如在命名时设置为:
pcs constraint colocation add vip_management with vip_public
-
配置HAProxy
创建HAProxy记录日志文件并授权
mkdir /var/log/haproxy touch /var/log/haproxy/haproxy-info.log touch /var/log/haproxy/haproxy-err.log touch /var/log/haproxy/haproxy-notice.log chmod -R 777 /var/log/haproxy
在rsyslog文件下修改以下字段
vim /etc/rsyslog.conf module(load="imudp") input(type="imudp" port="514") module(load="imtcp") input(type="imtcp" port="514") #### GLOBAL DIRECTIVES #### #在文件最后添加haproxy配置日志 local0.=info -/var/log/haproxy/haproxy-info.log local0.=err -/var/log/haproxy/haproxy-err.log local0.notice;local0.!=err -/var/log/haproxy/haproxy-notice.log #重启rsyslog systemctl restart rsyslog
上传并修改配置文件
vim /etc/haproxy/haproxy.cfg #mysql_mgr listen mysql_mgr mode tcp bind vip:3307 balance leastconn option mysql-check user haproxy server mysql1 节点ip:3306 weight 1 check inter 2000 rise 2 fall 5 server mysql2 节点ip:3306 weight 1 check inter 2000 rise 2 fall 5 server mysql3 节点ip:3306 weight 1 check inter 2000 rise 2 fall 5
启动haproxy
#创建空密码用户 create user 'haproxy'; systemctl start haproxy systemctl status haproxy systemctl enable haproxy #访问网站 http://vip:1080/admin 用户名/密码:admin/admin
Mysql8MGR集群(单多主相互转换)
单主切多主
-
停止组复制(所有节点)
stop group_replication;
-
单主模式关闭
set global group_replication_single_primary_mode=OFF;
-
如果是单主模式,因为不存在多主同时操作的可能,这个强制检查是可以关闭,因为已经不存 在这样的操作,多主是必须要开的,不开的话数据就可能出现错乱了
set global group_replication_enforce_update_everywhere_checks=ON;
-
配置参数加上(所有节点)
group_replication_single_primary_mode=OFF group_replication_enforce_update_everywhere_checks=ON
-
重启数据库
-
随便选择某个节点执行
#标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置 set global group_replication_bootstrap_group=ON; #作为首个节点启动MGR集群 start group_replication; #关闭group_replication_bootstrap_group set global group_replication_bootstrap_group=OFF;
-
其他节点执行 加入MGR集群
start group_replication;
-
查看组信息,所有节点的 MEMBER_ROLE 都为
PRIMARY SELECT * FROM performance_schema.replication_group_members;
多主切单主
-
停止组复制(所有节点)
stop group_replication;
-
配置参数去除(所有节点)
global group_replication_single_primary_mode=OFF global group_replication_enforce_update_everywhere_checks=ON
-
主节点执行
#标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置 set global group_replication_bootstrap_group=ON; #作为首个节点启动MGR集群 start group_replication; #关闭group_replication_bootstrap_group set global group_replication_bootstrap_group=OFF;
-
其他节点执行 加入MGR集群
start group_replication;
-
查看组信息,所有节点的 MEMBER_ROLE 都为 PRIMARY
SELECT * FROM performance_schema.replication_group_members;
Mysql8MGR管理维护
管理维护
-
查一下GTID,
show master status;
-
查看同步状态
show slave status for channel 'group_replication_recovery'\G;
-
查看group内所有成员的节点信息
SELECT * FROM performance_schema.replication_group_members;
-
查看group中的同步情况,当前复制状态
select * from performance_schema.replication_group_member_stats\G
-
当前server中各个通道的使用情况,
select * from performance_schema.replication_connection_status\G
-
当前server中各个通道是否启用,on是启用
select * from performance_schema.replication_applier_status;
-
单主模式下,查看那个是主库,只显示uuid值
select * from performance_schema.global_status where VARIABLE_NAME='group_replication_primary_member';
-
查看权限,只读
show global variables like 'super%';
-
节点长期处于RECOVERING状态的解决方法
#查看日志,发现是用户密码加密插件问题Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.,也就是创建复制用户时, 密码默认是mysql 8的加密方式 2019-11-09T15:00:19.154364Z 37 [ERROR] [MY-010584] [Repl] Slave I/O for channel 'group_replication_recovery': error connecting to master 'mgr_repl@server-1:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061 2019-11-09T15:00:19.196600Z 28 [ERROR] [MY-011582] [Repl] Plugin group_replication reported: 'There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.' 2019-11-09T15:00:19.196632Z 28 [ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.' #解决方法,更改密码加密方式 SET SQL_LOG_BIN=0; alter USER 'mgr_repl'@'%' IDENTIFIED WITH sha256_password BY 'cxk123...'; GRANT REPLICATION SLAVE ON *.* TO 'mgr_repl'@'%'; SET SQL_LOG_BIN=1; #再启动MGR就可以正常了 select * from performance_schema.replication_group_members;
节点挂了重新加入集群
-
检查配置文件
vim /etc/my.cnf systemctl restart mysqld 构建group replication集群 change master to master_user='mgrrepl',master_password='123qqq...A' for channel 'group_replication_recovery';
-
加入MGR集群
start group_replication;
喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章; 文章中用到的文件、安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKLittleBrother 进入运维交流群