mysql MHA高可用实战
一. 环境准备
-
准备4台Linux,装好mysql
最好是全新安装,可以避免之前的配置造成的异常
-
尽量创建一个服务器标识
如 mysql1, mysql2, mysql3, MHA-manager, 便于操作进辨识
此步骤可以忽略
-
mysql1, mysql2, mysql3 配置好主从同步
参考主从同步教程,并关掉防火墙 systemctl stop firewalld.service
-
删除
/var/lib/mysql/auto.cnf
如果未在my.cnf 中自定义指定路径, 默认为
var/lib/mysql/auto.cnf
路径此步骤可以忽略,但如果通过虚拟机克隆机器,会造成uuid一样,Mysql同步会报错
-
设置4台机器免密互联互通
可参考本站 linux部署教程设置, 以下仅作简要步骤示例
#1. 各服务器执行以下命令 ssh-keygen -t rsa #2. 在mysql1, mysql2, mysql3上分别执行以下命令, 密码输入系统密码,将公钥拷贝到MHA-manager服务器上 ssh-copy-id 10.211.55.10 #ip地址为manager服务器ip #3. 切换到MHA-manager服务器,查看公钥 cat /root/.ssh/authorized_keys #4. 执行以下命令,将自身公钥也添加到authorized_keys文件中,此时应该有4条 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys #5. 将authorized_keys文件复制到其他3台mysql服务器上 scp /root/.ssh/authorized_keys root@10.211.55.7:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@10.211.55.8:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@10.211.55.9:/root/.ssh/authorized_keys
二. MHA下载安装
2.1 MHA下载
MySQL5.7对应的MHA版本是0.5.8,所以在GitHub上找到对应的rpm包进行下载,MHA manager和node的安装包需要分别下载:
https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58
https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58
下载后
- 3台mysql服务器安装node
- MHA-manager安装manager和node
2.2 node安装
在四台服务器上安装mha4mysql-node。
MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。
yum install perl-DBD-MySQL -y
# 可参会报以下错误
错误:软件包:perl-DBD-MySQL-4.023-6.el7.x86_64 (base)
需要:libmysqlclient.so.18(libmysqlclient_18)(64bit)
错误:软件包:perl-DBD-MySQL-4.023-6.el7.x86_64 (base)
#安装 mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm
#去该网站找: https://pkgs.org/download/mysql-community-libs-compat
wget https://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm
# 安装perl-DBD-MySQL
yum install perl-DBD-MySQL
# 安装node
wget https://github.com/yoshinorim/mha4mysql- node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
2.3 manager安装
在MHA Manager服务器安装mha4mysql-node和mha4mysql-manager。
MHA的manager又依赖了perl-Confifig-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别进行安装。
# 1.安装 epel-release-latest-7.noarch.rpm
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel- perl-Parallel-ForkManager -y
# 2.安装manager
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
# 如果上一步报错,可能报如下错误,再次尝试执行以下缺少的安装包
错误:依赖检测失败:
perl(Parallel::ForkManager) 被 mha4mysql-manager-0.58-0.el7.centos.noarch 需要
yum install perl-DBD-MySQL
yum install perl-Config-Tiny
yum install perl-Log-Dispatch
yum install perl-Parallel-ForkManager
提示:由于perl-Log-Dispatch和perl-Parallel-ForkManager这两个被依赖包在yum仓库找不到,因此安装epel-release-latest-7.noarch.rpm。在使用时,可能会出现下面异常:Cannotretrieve metalink for repository: epel/x86_64。可以尝试使用/etc/yum.repos.d/epel.repo,然后注释掉metalink,取消注释baseurl。
三. MHA配置文件
MHA Manager服务器需要为每个监控的 Master/Slave 集群提供一个专用的配置文件,而所有的Master/Slave 集群也可共享全局配置
3.1 初始化配置目录
#目录说明
#/var/log (CentOS目录)
# /mha (MHA监控根目录)
# /app1 (MHA监控实例根目录)
# /manager.log (MHA监控实例日志文件)
mkdir -p /var/log/mha/app1
touch /var/log/mha/app1/manager.log
3.2 配置监控全局配置文件
vim /etc/masterha_default.cnf
[server default]
#主库用户名,在master mysql的主库执行下列命令建一个新用户
#create user 'mha'@'%' identified by '123123';
#grant all on *.* to mha@'%' identified by '123123';
#flush privileges;
#此处我们就用root
user=root
password=123456
port=3306
#ssh登录账号
ssh_user=root
#从库复制账号和密码
repl_user=root
repl_password=123456
port=3306
#ping次数
ping_interval=1
#二次检查的主机
secondary_check_script=masterha_secondary_check -s 10.211.55.7 -s 10.211.55.8 -s 10.211.55.9
3.3 配置监控实例配置文件
先使用 mkdir -p /etc/mha
命令创建目录,然后使用vim /etc/mha/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=10.211.55.7
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server2]
hostname=10.211.55.8
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server3]
hostname=10.211.55.9
candidate_master=1
master_binlog_dir="/var/lib/mysql"
四. MHA配置检测
-
执行ssh通信检测
在MHA Manager服务器上执行
masterha_check_ssh --conf=/etc/mha/app1.cnf
-
检测mysql主从复制
在MHA Manager服务器上执行
masterha_check_repl --conf=/etc/mha/app1.cnf
tips: 我在测试的时候,一直报错, 是由于之前的主从关系设置, 并且我是直接克隆之前的linux,导致主从关系错乱
五. MHA manager启动
-
在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 app1 (pid:19131) is running(0:PING_OK), master:10.211.55.7
-
查看监控日志命令如下
tail -f /var/log/mha/app1/manager.log
六. 测试MHA故障转移
-
模拟主节点崩溃
-
主节点打开日志
tail -200f /var/log/mha/app1/manager.log
-
关闭Master MySQL服务器服务,模拟主节点崩溃
systemctl stop mysqld
-
查看MHA日志,可以看到哪台slave切换成了master
-