MySQL基于MHA高可用搭建
大家好,我是anyux。本文介绍MySQL基于MHA高可用搭建。
ln -s /data/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /data/mysql/bin/mysql /usr/bin/mysql
配置互信
db01
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 192.168.255.113:/root
scp -r /root/.ssh 192.168.255.114:/root
scp -r /root/.ssh 192.168.255.115:/root
验证各节点,注意需要互相验证
db01
ssh 192.168.255.113 date
db02
ssh 192.168.255.114 date
db03
ssh 192.168.255.115 date
下载mha软件
mha官网:https://code.google.com/archive/p/mysql-master-ha/
github下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
安装软件包
所有节点都要操作
yum install -y perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.56-el.noarch.rpm
在db01主库中创建mha需要的用户
grant all privileges on *.* to mha@'%' identified by 'mha';
Manager软件安装(db03)
管理节点安装在非主节点的原因,如果master节点断电了,Manager节点可以在其他node节点实现failover(故障切换)
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
配置文件准备(db03)创建配置文件目录
mkdir -p /etc/mha
创建日志目录
mkdir -p /var/log/mha/app1
编辑mha配置文件
/var/log/mha/app1/manager为运行时日志,MHA故障时,需要首先检查此日志,快速定位问题
master_binlog_dir为主库二进制日志位置,且要求主从数据库的二进制日志必须打开,且目录名称最好一致
ping_interval为探测心跳时间,每两秒做一次探测,默认3次都失败,则认定主节点故障,此时会出现切换节点
cat >/etc/mha/app1.cnf <<EOF
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1
master_binlog_dir=/data/binlog
user=mha
password=mha
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root
[server1]
hostname=192.168.255.113
port=3306
[server2]
hostname=192.168.255.114
port=3306
[server3]
hostname=192.168.255.115
port=3306
EOF
状态检查
互信检查
masterha_check_ssh --conf=/etc/mha/app1.cnf
主从状态检查
[root@db03 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
返回成功
[root@db03 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
返回ok
开启MHA(db03):
/var/log/mha/app1/manager.log为启动时日志
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 &
查看MHA状态
masterha_check_status --conf=/etc/mha/app1.cnf
mysql -umha -pmha -h 10.0.0.51 -e "show variables like 'server_id'"
MHA架构结构说明
节点规划
数据库节点,必须至少是1主两从,不支持单机多实例的环境
MHA管理节点,最好是独立一台机器
manager:db03
node:db01,db02,db03
MHA软件的构成(perl语言)
Manager工具包主要包括以下几个工具
mha4mysql-manager-0.56-0.3l6.noarch.com
软件构成 | 软件作用 |
---|---|
masterha_manager | 启动MHA |
masterha_check_ssh | 检查MHA的SSH配置状况 |
masterha_check_repl | 检查MySQL复制状况 |
masterha_master_monitor | 检测master是否宕机 |
masterha_check_status | 检测当前MHA运行状态 |
masterha_master_switch | 控制故障转移(自动或者手动) |
masterha_conf_host | 添加或删除配置的server信息 |
Node工具包主要包括以下几个工具
这些工具通常由MHA Manager有脚本触发,无需要人为操作
软件构成 | 软件作用 |
---|---|
save_binary_logs | 保存和复制master的二进制日志 |
apply_diff_relay_logs | 识别差异的中继日志事件并将其差异的事件应用于其他的 |
purge_relay_logs | 清除中继日志(不会阻断SQL线程) |
MHA配置过程细节说明
软链接
配置软链接的原因是,MHA的软件就是使用绝对路径的方式运行的,所以需要使用软链接。配置了环境变量,也必须配置软链接,不然运行依然会失败的
\rm -rf /usr/bin/mysqlbinlog
\rm -rf /usr/bin/mysql
ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql /usr/bin/mysql
互信检查
当master主节点宕机,manager节点需要通过ssh到node节点进行一些failover(故障切换)的相关操作.所以必须先配置好ssh互信