mysql-8、MySQL集群架构之MHA

目录


4台主机,1主、2从、1MHA

一、环境软件介绍

  1. 阿里云服务器-:master
  2. ucloud服务器:两个slave 及 mha
  3. 系统版本:4台服务器均为centos 7 64位
  4. 远程工具:xshell 、xftp

二、服务器介绍

ip角色
8.131.87.12master
106.75.32.128slave1
106.75.47.125slave2
106.75.75.142mha

三、配置主从同步

步骤参考这个笔记,不再赘述
mysql集群之主从同步

四、配置半同步

步骤参考这个笔记,不再赘述
mysql集群之半同步复制

五、mha搭建

(一)四台机器ssh互通

1、在四台服务器上分别执行下面命令,生成公钥和私钥

注意,需要确认的项,直接回车采用默认值即可
生成的秘钥查看:cat /root/.ssh/id_rsa.pub

ssh-keygen -t rsa
2、在三台MySQL服务器分别执行下面命令,密码输入系统密码,将公钥拷到MHA Manager服务器上
ssh-copy-id 106.75.75.142

在这里插入图片描述

备注:
以在MHA Manager服务器上检查下,看.ssh/authorized_keys文件是否包含3个公钥

cat /root/.ssh/authorized_keys
3、将MHA Manager的公钥添加到authorized_keys文件中(此时应该包含4个公钥)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
4、MHA Manager服务器执行下面命令,向其他三台MySQL服务器分发公钥信息。
scp /root/.ssh/authorized_keys root@8.131.87.12:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@106.75.32.128:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@106.75.47.125:/root/.ssh/authorized_keys

提示【authorized_keys】表示成功,有错误的话会提示具体的报错信息

5、测试四台服务器之间ssh是否配置成功

可以MHA Manager执行下面命令,检测下与三台MySQL是否实现ssh互通。

ssh 8.131.87.12
exit


ssh 106.75.32.128
exit


ssh 106.75.47.125
exit

可以正常登陆就表示ssh通了

(二)下载node和manager

上传到相应的服务器

  • 三台MySQL服务器需要安装node
  • MHA Manager服务器需要安装manager和node

(三)MHA node安装

MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。

yum install perl-DBD-MySQL -y

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

(四)MHA manager安装

MHA的manager又依赖了perl-Config-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别
进行安装。

首先安装依赖

yum install perl-Config-Tiny 
yum install perl-Log-Dispatch 
yum install perl-Parallel-ForkManager 

安装manager

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

(五)MHA 配置

MHA Manager服务器需要为每个监控的 Master/Slave 集群供一个专用的配置文件,而所有的Master/Slave 集群也可共享全局配置。

1、初始化配置目录
#目录说明
#/var/log (CentOS目录)
# /mha (MHA监控根目录)
# /app1 (MHA监控实例根目录)
# /manager.log (MHA监控实例日志文件)
mkdir -p /var/log/mha/app1
touch /var/log/mha/app1/manager.log
2、在主库创建mha用户
create user 'mha'@'%' identified by 'mha123';
grant all on *.* to mha@'%' identified by 'mha123';
flush privileges;
3、配置监控全局配置文件
vim /etc/masterha_default.cnf
[server default]
user=mha
password=mha123
port=3306
#ssh登录账号
ssh_user=root
#从库复制账号和密码
repl_user=root
repl_password=root
port=3306
#ping次数
ping_interval=1
#二次检查的主机
secondary_check_script=masterha_secondary_check -s 8.131.87.12 -s  106.75.32.128 -s 106.75.47.125 # 一主两从三个库的ip
4、配置监控实例配置文件

etc下创建mha文件夹,文件加内创建app1.cnf文件

mkdir -p /etc/mha
vim /etc/mha/app1.cnf

app1.cnf配置如下:

[server default]
#MHA监控实例根目录
manager_workdir=/var/log/mha/app1
#MHA监控实例日志文件
manager_log=/var/log/mha/app1/manager.log

#[serverx] 服务器编号
#hostname 主机名
#candidate_master 可以做主库
#master_binlog_dir binlog日志文件目录

[server1]
hostname=8.131.87.12
candidate_master=1
master_binlog_dir="/var/lib/mysql"

[server2]
hostname=106.75.32.128
candidate_master=1
master_binlog_dir="/var/lib/mysql"

[server3]
hostname=106.75.47.125
candidate_master=1
master_binlog_dir="/var/lib/mysql"

(六)MHA 配置检测

1、执行ssh通信检测

在MHA Manager服务器上执行:

masterha_check_ssh --conf=/etc/mha/app1.cnf

在这里插入图片描述
遇到的问题:

  1. 问题1:CentOS8权限问题没搞懂,root用户下authorized_keys文件只读不能修改,采取最笨的办法,改成centos7
  2. 问题2:刚开始执行失败,后来网络切换了一下就好了-_-||
2、检测MySQL主从复制

在MHA Manager服务器上执行:

masterha_check_repl --conf=/etc/mha/app1.cnf

出现“MySQL Replication Health is OK.”证明MySQL复制集群没有问题

遇到的问题:

 [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln443] Binlog filtering check failed on 106.75.32.128(106.75.32.128:3306)! All log-bin enabled servers must have same binlog filtering rules (same binlog-do-db and binlog-ignore-db). Check SHOW MASTER STATUS output and set my.cnf correctly.
Sat Jan 30 03:27:19 2021 - [warning] Bad Binlog/Replication filtering rules:
8.131.87.12 (current_master)
  Binlog_Do_DB: lagou
  Binlog_Ignore_DB: information_schema,performance_schema,sys
  Replicate_Do_DB: 
  Replicate_Ignore_DB: 
  Replicate_Do_Table: 
  Replicate_Ignore_Table: 
  Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 

106.75.32.128
  Binlog_Do_DB: 
  Binlog_Ignore_DB: 
  Replicate_Do_DB: 
  Replicate_Ignore_DB: 
  Replicate_Do_Table: 
  Replicate_Ignore_Table: 
  Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 

106.75.47.125
  Binlog_Do_DB: 
  Binlog_Ignore_DB: 
  Replicate_Do_DB: 
  Replicate_Ignore_DB: 
  Replicate_Do_Table: 
  Replicate_Ignore_Table: 
  Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 

Sat Jan 30 03:27:19 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln359] Slave configurations is not valid.
Sat Jan 30 03:27:19 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations.  at /usr/bin/masterha_check_repl line 48.
Sat Jan 30 03:27:19 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
Sat Jan 30 03:27:19 2021 - [info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!

问题思考:

意思就是主库和从库的my.cnf中配置的binlog-ignore-db和binlog-do-db要保持一致

解决方案:

把两台从库中的my.cnf配置进行调整
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-do-db=lagou
3、MHA Manager启动
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --
ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

查看监控状态命令如下:

masterha_check_status --conf=/etc/mha/app1.cnf

在这里插入图片描述

查看监控日志命令如下:

tail -f /var/log/mha/app1/manager.log

六、测试

(一)主从同步、半同步测试

MySQL主从复制结构下,如何判定是异步复制还是半同步复制?

show global status like '%Rpl_semi%';

在这里插入图片描述
在这里插入图片描述

(二)mha测试

1、mha通过ssh登录3台mysql服务器

ssh 8.131.87.12

ssh 106.75.32.128

ssh 106.75.47.125

2、执行第六步MHA 配置检测

①执行ssh通信检测

在MHA Manager服务器上执行:

masterha_check_ssh --conf=/etc/mha/app1.cnf
②检测MySQL主从复制

在MHA Manager服务器上执行:

masterha_check_repl --conf=/etc/mha/app1.cnf

3、启动mha服务之后,查看日志及状态

启动mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --
ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

查看监控状态命令如下:

masterha_check_status --conf=/etc/mha/app1.cnf

查看监控日志命令如下:

tail -f /var/log/mha/app1/manager.log

4、模拟主机出故障,从库能自动切换功能

①master停止mysql服务
systemctl stop mysqld
②查看mha日志,确认可以正常切换
③去当前从库查看主库情况
④在切换后的主节点机器上查看状态展示效果
⑤在切换后的主节点机器数据库添加数据,分别查询主从库数据一致
⑥将那个挂掉的数据库重新启动,然后试试手动切换主库(将它重新指定成主库)
masterha_master_switch  --conf=/etc/mha/app1.cnf --master_state=alive  --orig_master_is_new_slave --new_master_host=8.131.87.12 --new_master_port=3306

七、注意事项

1、三台mysql服务器的配置最好一致

因为每一台都有可能在mha的处理下变成主库。如,执行以下命令检测mysql主从复制的时候,如果主库和从库的my.cnf中配置的binlog-ignore-db和binlog-do-db不一致,会检测不通过

masterha_check_repl --conf=/etc/mha/app1.cnf

2、master宕机切换master之后,原来的master节点配置会从app1.cnf中自动删除

如果想用回原来的节点,需要先把原来的master的节点信息配置进去
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值