龙空技术网

Mysql实现MHA+半同步复制

IT动力 161

前言:

眼前兄弟们对“mysql半同步”都比较关注,各位老铁们都想要剖析一些“mysql半同步”的相关文章。那么小编在网上收集了一些对于“mysql半同步””的相关内容,希望小伙伴们能喜欢,咱们一起来学习一下吧!

1、环境准备

Linux版本:Centos7

Mysql版本:5.7.28

Mha-mysql: mha4mysql-*-0.58-el7-centos

节点说明

服务器

说明

192.168.227.141

Mysql-Master节点, Mha Node, 可读写

192.168.227.142

从节点(备用主节点), Mha Node, 可读写

192.168.227.143

从节点, Mha Node, 可读

192.168.227.144

Mha manager监控节点,MHa node节点

1.1、关闭防火墙

首先关闭所有机器的防火墙并禁用

systemctl stop firewalldsystemctl disable firewalld
1.2、安装Mysql基础环境

注意:基础的Mysql安装是针对所有的Mysql节点,也就是192.168.227.141,192.168.227.142,192.168.227.143。

在Mysql的Master节点和Slave节点分别安装Mysql

上传Mysql相关安装包上传如下tar包:

-rw-r--r--  1 root root  609556480 8月  13 23:16 mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
解压tar包后又一下安装包
mysql-community-client-5.7.28-1.el7.x86_64.rpmmysql-community-common-5.7.28-1.el7.x86_64.rpmmysql-community-devel-5.7.28-1.el7.x86_64.rpmmysql-community-embedded-5.7.28-1.el7.x86_64.rpmmysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpmmysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpmmysql-community-libs-5.7.28-1.el7.x86_64.rpmmysql-community-libs-compat-5.7.28-1.el7.x86_64.rpmmysql-community-server-5.7.28-1.el7.x86_64.rpmmysql-community-test-5.7.28-1.el7.x86_64.rpm
依次如下执行mysql安装包

清理旧环境

首先先卸载掉机器原来的Mysql或者Mariadb

rpm -qa|grep mariadbrpm -qa|grep mysql
如果有的话删除对应的安装包
rpm -e --nodeps 安装包名称
如果已安装了绿色版,需要先停止服务,并且删除相关的目录

依次执行Mysql安装包

rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm
初始化Mysq并记录下初始化密码

初始化Mysql

mysqld --initialize --user=mysql
记录初始化密码
cat /var/log/mysqld.log

可以看到最后生成的随机密码

启动Mysql服务

systemctl start mysqld.service
使用初始密码登录并修改密码
mysql -uroot -p
输入刚刚上面记录的随机密码进行登陆登陆成功,然后修改密码重新登陆
set password = password('root');

然后重新登陆即可。

2、Mysql实现主从复制2.1、修改配置my.cnf

修改三台Mysql节点的配置文件vim /etc/my.cnf。

Master节点:192.168.227.141

[mysqld]user=mysql# 服务IDserver-id=1# mysql二进制日志名称log-bin=mysql-binlog-slave-updates=1# mysql中继日志名称relay-log=relay-bin

Slave节点:192.168.227.142

[mysqld]user=mysql# 服务IDserver-id=2# mysql二进制日志名称log-bin=mysql-binlog-slave-updates=1# mysql中继日志名称relay-log=relay-bin

Slave节点:192.168.227.143

[mysqld]user=mysql# 服务IDserver-id=3# mysql二进制日志名称log-bin=mysql-binlog-slave-updates=1# mysql中继日志名称relay-log=relay-bin# 只读read_only=1

注意:主要区别是server-id, 必须唯一

2.2、授权

注意:授权针对每一台Mysql节点,因为每一个节点都可能会在故障切换后成为主节点

grant replication slave on *.* to 'repl_user'@'%' identified by 'repl_user';grant all privileges on *.* to 'root'@'%' identified by 'root';

repl_user专门用来做主从复制的用户,root这里作用是Mha Manager的监控用户。

2.3、开启主从模式

在两台从节点上分别开启主从模式。

查看主节点日志文件和需要同步的位置(在192.168.227.141上执行)。

show master status;

使用change master to 设置同步的主节点。

change master to master_host='192.168.227.141',master_port=3306,master_user='repl_user',master_password='repl_user',master_log_file='mysql-bin.000003',master_log_pos=154;

这里的master_log_file和master_log_pos就是上面show master status查询出来的

开启主从

start slave;
2.4、测试主从

在主节点创建数据库并和表并插入数据,可以查看到从节点已经同步了。

3、Mysql实现半同步复制3.1、修改配置

使用命令方式

install plugin rpl_semi_sync_master soname 'semisync_master.so';install plugin rpl_semi_sync_slave soname 'semisync_slave.so';set global rpl_semi_sync_master_enabled=1;set global rpl_semi_sync_slave_enabled=1;

使用配置文件方式(推荐)

在每一台的配置文件加入半同步复制参数,并重启Mysql。

plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"rpl-semi-sync-master-enabled = 1rpl-semi-sync-slave-enabled = 1
3.2、重启并测试
systemctl restart mysql

测试方式与主从测试一致。

4、Mysql实现Mha4.1、环境准备

上传rpm包如下:

mha4mysql-manager-0.58-0.el7.centos.noarch.rpmmha4mysql-node-0.58-0.el7.centos.noarch.rpm

依赖安装

安装node和Manager是需要先安装一些依赖,这里同意安装

yum -y install epel-release-7-11.noarchyum -y install perl-DBD-MySQL perl-DBI perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

epel-release-7-11.noarch我这个linux版本看安装这个版本,如果没有,这安装最新的即可。

4.2、Mha安装

在四台机器 都安装Node节点

rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

在监控节点192.168.227.144安装mha manager

rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
4.3、免密登陆

因为Mha需要连接各自的高可用的其他服务器,所以需要做免密登陆。

在每一台机器上分别执行如下操作

ssh-keygenssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.227.141ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.227.142ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.227.143ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.227.144

然后在每一台机器上进行免密登陆测试

ssh root@192.168.227.141ssh root@192.168.227.142ssh root@192.168.227.143ssh root@192.168.227.144
4.4、Mha Manager配置文件

创建配置文件目录和日志(这里提前创建好)目录

mkdir /etc/masterhamkdir -p /var/log/masterha

编写配置文件vim /etc/masterha/node.cnf

[server default]#manager 工作目录manager_workdir=/var/log/masterha#manager 工作时的日志文件manager_log=/var/log/masterha/manager.log#指定 master(192.168.227.141) 主机的 binlog二进制日志的文件位置,master_binlog_dir=/var/lib/mysql#自动故障切换时master服务器IP地址切换脚本,如果没有则不写此项#master_ip_failover_script=/usr/local/bin/master_ip_failover#手动切换时master服务器IP地址切换脚本,如果没有则不写此项(一般安装MHA时自带)#master_ip_online_change_script=/usr/local/bin/master_ip_online_change#监控用户user=root#监控用户密码password=root#监控主库发送 ping 包的时间间隔,默认3秒,如果3秒内没有回应将自动进行故障切换ping_interval=1#Mysql 在发生切换时,二进制日志文件的保存位置remote_workdir=/var/log/masterha/logbin#复制用户repl_user=repl_user#复制用户的密码repl_password=repl_user#发生切换后发送的报警脚本#report_script=/usr/local/bin/send_report#故障发生后关闭故障主机的脚本,主要作用是关闭主机防止发生脑裂#shutdown_script="/usr/local/bin/master_stop"#ssh 登录用户ssh_user=root[server1]hostname=192.168.227.141port=3306ssh_port=22[server2]hostname=192.168.227.142port=3306ssh_port=22#候选 master主机,即使这个主库不是集群中事件最新的,当主宕机之后 仍会优先选择此主机作为主Mysql。#应用场景:keepelived+MHAcandidate_master=1#默认情况下,如果一个slave的中转日志落后master二进制日志100M,那么MHA就不会选择该slave作为新的master。#但设置此项后MHA会忽略复制延迟,对候选master非常有用。check_repl_delay=0[server3]hostname=192.168.227.143port=3306ssh_port=22# 不可能成为主节点no_master=1
4.5、Mha ssh免密环境校验
masterha_check_ssh --conf=/etc/masterha/node.cnf

最终显示OK即可,免密登陆成功这里就会通过

4.6、Mha 同步复制校验

masterha_check_repl --conf=/etc/masterha/node.cnf

最终显示OK即可,免密登陆成功这里就会通过

4.7、Mha Manager启动

启动后manager监控

masterha_manager --conf=/etc/masterha/node.cnf --ignore_last_failover

测试主节点是谁

masterha_check_status --conf=/etc/masterha/node.cnf

如果显示例如OK,并显示处Master的IP就成功了

4.8、故障转移测试

回到Master节点,使用systemctl stop mysqld停止服务。

停止服务后masterha_manager进程也将会停止。回到Slave节点192.168.227.143查看slave状态,它的主节点已经变成了142。

4.9、新集群主从测试

跟最初的主从复制测试方法一致。

标签: #mysql半同步