【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

一.MHA简介

MHA(Master High Availability)是MySQL高可用方面的一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且 在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

1. MHA里有两个重要的角色:

MHA Node数据节点):MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

Node提供的工具包主要工具:

1save_binary_logs保存和复制master的二进制日志
2apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的slave
3filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
4purge_relay_logs清除中继日志(不会阻塞SQL线程)

MHA Manager管理节点):MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。

Manager提供的工具包主要工具:

1masterha_check_ssh检查MHA的SSH配置状况
2masterha_check_repl检查MySQL复制状况
3masterha_manger启动MHA
4masterha_check_status检测当前MHA运行状态
5masterha_master_monitor检测master是否宕机
6masterha_master_switch控制故障转移(自动或者手动)
7masterha_conf_host添加或删除配置的server信息

注意:为了尽可能地减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL的半同步复制不是必须)。

2. MAH工作原理

1) 从宕机崩溃的Master保存二进制日志事件(binlog event);

2) 识别含有最新更新的Slave;

3) 应用差异的中继日志(relay log)到其他Slave;

4) 应用从Master保存的二进制日志事件;

5) 提升一个Slave为新的Master;

6) 使其他的Slave连接新的Master进行复制;

二.软件准备

在进行搭建MHA之前,需要提前准备好如下文件

VM: VMware-workstation-full-10.0.1-1379776.exe

CentOS: CentOS-7-x86_64-Minimal-2009.iso

MySQL 8.0: mysql-community-client-8.0.31-1.el7.x86_64.rpm

mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm

mysql-community-common-8.0.31-1.el7.x86_64.rpm

mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm

mysql-community-libs-8.0.31-1.el7.x86_64.rpm

mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm

mysql-community-server-8.0.31-1.el7.x86_64.rpm

MHA: mha4mysql-manager-0.56.tar.gz

mha4mysql-node-0.56.tar.gz

三.MHA环境规划

首先创建4个已经安装好CentOS系统的虚拟机,其用途如下表所示:

虚拟机角色IP安装服务
Master192.168.246.129MySQL + MHA Node
Slave — 备用 Master192.168.246.128MySQL + MHA Node
Slave192.168.246.131MySQL + MHA Node
MHA Manager192.168.246.130MHA Node+ MHA Manager

四.MHA环境准备

1. 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

2. 开启端口3306

firewall-cmd –zone=public –add-port=3306/tcp –permanent

firewall-cmd –reload

3. 依赖包安装

全部4台服务器均需要安装相关的依赖包,如果已经安装过,请忽略。

Yum install perl-DBD-MySQL perl-Config-Tiny perl-log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y

4. SSH 互信

全部4台服务器都要相互做密钥登录

1) 192.168.246.129上执行:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.128

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.130

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.131

2) 192.168.246.128上执行:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.129

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.130

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.131

3) 192.168.246.130上执行:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.128

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.129

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.131

4) 192.168.246.131上执行:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.128

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.129

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.130

注:在/.ssh文件夹下,会生成id_rsa(私钥),id_rsa.pub(公钥)

互信验证:

在每一台服务器上,都要对其它三台服务器,执行如下命令:

ssh ip地址 ls

如果均可以顺利ls到对方主机文件,则证明配置成功。

五.配置MySQL主从复制

为了尽可能的减少主库硬件损坏宕机造成的数据丢失,在这里,配置成MySQL的半同步复制。

1. MySQL安装

所有3台MySQL服务器执行如下进行Server的安装:

rpm -ivh mysql-community-common-8.0.31-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-8.0.31-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-8.0.31-1.el7.x86_64.rpm

rpm -ivh mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-8.0.31-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm

2. MySQL启动

systemctl start mysqld

3. 修改密码

首次安装,登录的密码在相关的mysqld.log文件中。

查询初始密码:

grep ‘temporary password’ /var/log/mysqld.log

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

登录并修改密码

Alter user ‘root’@’localhost’ identified by ‘Ygzlpaul*2022’;

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

4. 半同步插件安装

需要在每一台MySQL服务器上执行如下命令安装半同步插件,这里是三台服务器:

install plugin rpl_semi_sync_master SONAME ‘semisync_master.so’;

install plugin rpl_semi_sync_slave SONAME ‘semisync_slave.so’;

可以执行如下命令检查Plugin是否已经安装:

Show plugins;

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

5. My.cnf配置

三台MySQL服务器的my.cnf配置如下:

192.168.246.129(master):

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

192.168.246.128:

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

192.168.246.131:

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

在修改之后,记得重启MySQL服务

systemctl restart mysqld

6. 创建用户

192.168.246.129(master):

创建复制用户:

create user ‘rpl’@’%’ identified by ‘Ygzlpaul*2022’;

grant replication slave on *.* to ‘rpl’@’%’;

创建监控用户:

create user ‘root’@’%’ identified by ‘Ygzlpaul*2022’;

grant all privileges on *.* to ‘root’@’%’;

flush privileges;

192.168.246.128:

创建复制用户:

create user ‘rpl’@’%’ identified by ‘Ygzlpaul*2022’;

grant replication slave on *.* to ‘rpl’@’%’;

创建监控用户:

create user ‘root’@’%’ identified by ‘Ygzlpaul*2022’;

grant all privileges on *.* to ‘root’@’%’;

flush privileges;

192.168.246.131:

创建监控用户:

create user ‘root’@’%’ identified by ‘Ygzlpaul*2022’;

grant all privileges on *.* to ‘root’@’%’;

flush privileges;

注:监控用户是给MHA Manager使用的

7. 复制搭建

192.168.246.129(master)上:

Show master status;

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

192.168.246.128上:

mysql> stop slave;

mysql> change master to master_host=’192.168.246.129′, master_port=3306, master_user=’rpl’, master_password=’Ygzlpaul*2022′, master_log_file=’mysql-bin1.000009′, master_log_pos=157;

mysql>start slave ;

在192.168.246.131上:

mysql> stop slave;

mysql> change master to master_host=’192.168.246.129′, master_port=3306, master_user=’rpl’, master_password=’Ygzlpaul*2022′, master_log_file=’mysql-bin1.000009′, master_log_pos=157;

mysql>start slave ;

可以在slave上,分别执行如下命令进行检测,是否主从复制正常

mysql> SHOW SLAVE STATUS;

六.MHA配置

1. MHA Node 安装

依次对所有的4台服务器均执行如下命令进行安装:

tar zxf mha4mysql-node-0.56.tar.gz

cd mha4mysql-node-0.56

perl Makefile.PL

Make && make install

2. MHA Manager安装

仅需要在需要的管理服务器上进行安装,这里是 192.168.246.130

tar zxf mha4mysql-manager-0.56.tar.gz

cd mha4mysql-manager-0.56

perl Makefile.PL

Make && make install

3. 编辑MHA 配置文件

mkdir /etc/masterha

cp /mha4mysql-manager-0.56/samples/conf/* /etc/masterha

vi /etc/masterha/app1.cnf

进行修改配置文件内容如下:

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

参数解释:

manager_workdir=/masterha/app1 # 设置manager的工作目录

manager_log=
/masterha/app1/manager.log # 设置manager的日志位置

user=root # 设置监控用户

password=Ygzlpaul*2022 # 设置监控用户的密码

ssh_user=root # 设置ssh连接用户

repl_user=rpl # 设置主从复制用户

repl_password=Ygzlpaul*2022 # 设置主从复制用户的密码

ping_interval=1 # 设置监控主库,发送ping包的时间间隔,默认是3秒

candidate_master=1 #设置为候选master,发生主从切换以后,无论此服务器的日志是否最新,都将强行提升为master

no_master=1 # 永不提升为master

4. SSH有效性验证

masterha_check_ssh –conf=/etc/masterha/app1.cnf

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

只有当出现如上图所示的All SSH connection tests passed successfully. 信息才表示通过SSH验证。否则,请依照提示信息,修复SSH未互信成功的服务器。

5. 复制有效性验证

前提:所有的MySQL服务必须全部启动

masterha_check_repl –conf=/etc/masterha/app1.cnf

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

验证成功的话会自动识别出所有服务器和主从状况,请见上图中的3台MySQL服务器的相关信息。

最后的显示信息MySQL Replication Health is OK.表明验证成功。

6. 启动MHA

nohup masterha_manager –conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log </dev/null 2>&1 &

注:在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。

7. 状态检查

masterha_check_status –conf=/etc/masterha/app1.cnf

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

如图所示,证明正常启动,也识别出来了master

8. 故障转移验证

让我们来模拟一下master(192.168.246.129)宕机,查看备用master(192.168.246.128)是否会成为新的master。

192.168.246.129上,执行:systemctl stop mysqld

192.168.246.131上,我们登录数据库,查看Slave状态:

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

发现,新Master已经成为备用master(192.168.246.128)

再查看MHA日志

cat /masterha/app1/manager.log

【技术贴转载】VM10+Centos7+MySQL8.0搭建MHA

日志表明,备用master(192.168.246.128)已经被选为new master.

至此,MHA成功搭建。

七.MHA配置过程中的一些错误解决

注意:在以下错误中,我仅仅列出错误的重点关键信息。

1. 执行:masterha_check_repl –conf=/etc/masterha/app1.cnf 报告Error:

… perhaps the DBD::mysql perl module hasn’t been fully installed …

解决办法:系统没有按安装DBI组件。DBI(Database Interface)是perl连接数据库的接口

yum install perl-DBI perl-DBD-MySQL -y

2. 执行:masterha_check_repl –conf=/etc/masterha/app1.cnf 报告Error:

Can’t locate MHA/BinlogManager.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/apply_diff_relay_logs line 24.

解决办法:在每个节点上设置软链接:ln -s 
/usr/lib/perl5/vendor_perl/MHA /usr/lib64/perl5/vendor_perl/

3. 执行:masterha_check_repl –conf=/etc/masterha/app1.cnf 报告Error:

node version on 192.168.246.131 not found! Maybe MHA Node package is not installed?

解决办法:请检查是否MHA Node没有安装,安装即可。

4. 执行:masterha_check_repl –conf=/etc/masterha/app1.cnf 报告Error:

Can’t exec “mysqlbinlog”

解决办法:ln -s /usr/local/mysql/bin/* /usr/local/bin/

如有不妥之处,请大家指正。

声明:本站文章,有些原创,有些转载,如发现侵权侵请联系删除。本站所有原创帖均可复制、搬运,开网站就是为了大家一起乐乐,不在乎版权。对了,本站小水管,垃圾服务器,请不要采集,吐槽君纯属用爱发电,经不起折腾。

给TA打赏
共{{data.count}}人
人已打赏
技术宅

Mozilla Firefox 106.0.2发布 修正一系列问题

2022-10-30 0:42:44

技术宅

据说按照这个办法只要五分钟就能完成继续搬家

2022-10-30 22:59:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索