系统环境:
- centos 7.2.1511
- mysql 5.7.24-27
- mha4mysql-manager 0.58
- mha4mysql-node 0.58
MHA 是较为常用的数据库中的高可用架构,以下部署是基于主从已经部署部署完毕的情况下搭建的。
部署搭建:
需要注意:
mysql服务需要设置: relay_log_purge=0
所有MySQL数据库节点中添加定时任务:
00 04 * * * /usr/bin/purge_relay_logs --user=ha_monitor --password=123123 --disable_relay_log_purge &>> /var/purge_relay_logs.log
配置SSH认证:
证书生成、公钥分发及依赖安装需要在每个节点上执行
- 生成证书
ssh-keygen
- 分发公钥到所有节点
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.55
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.56
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.57
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.58
安装依赖:
yum install epel-release -y
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager \
perl-Time-HiRes perl-devel perl-devel perl-CPAN -y
创建相关目录:
/home/masterha/ 目录需要在所有节点创建, /etc/mastermha/仅在ha-monitor节点中创建
mkdir -p /etc/mastermha/
mkdir -p /home/masterha/
下载MHA组建:
所有节点需要安装mha node 节点,仅manager需要安装在ha-monitor节点上
wget \
https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
wget \
https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
在所有节点上安装mha-node 组件:
yum localinstall mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
在ha-monitor节点上安装mha4mysql-manager 组件:
yum localinstall mha4mysql-manager-0.58-0.el7.centos.noarch.rpm -y
创建监控用户:
mysql> CREATE USER 'ha_monitor'@'172.17.0.%' IDENTIFIED BY '123123';
mysql> GRANT ALL ON *.* TO 'ha_monitor'@'172.17.0.%' ;
在ha-monitor节点添加配置文件:
cat > /etc/mastermha/app1.conf << EOF
[server default]
#授权的manager监控用号和密码
user=ha_monitor
password=123123
#MySQL服务复制用户和密码
repl_user=sync
repl_password=123123
# ssh远程登录用户和端口
ssh_user=root
ssh_port=22
# 检测主master存活间隔和类型
ping_interval=1
ping_type=SELECT
#管理端log路径
manager_log=/home/masterha/manager.log
#管理服务端所使用的目录
manager_workdir=/home/masterha/
#远程节点工作目录
remote_workdir=/home/masterha/
#数据库binlog目录
master_binlog_dir=/data/mysql_3306_core/log/binary_log
#故障failover脚本,需在官网的基础上修改配置
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
#检测路由主master是否宕机
secondary_check_script="masterha_secondary_check -s 172.17.0.56 -s 172.17.0.57"
[server1]
hostname=172.17.0.56
port=3306
candidate_master=1
[server2]
hostname=172.17.0.57
port=3306
#设置可参数选举为MYSQL MASTER
candidate_master=1
#忽略延迟
check_repl_delay=0
[server3]
hostname=172.17.0.58
port=3306
#不参与选举
no_master=1
EOF
在ha-monitor节点下载相关脚本并修改相关信息:
- 下载相关脚本
wget https://down.niknk.com/MYSQL/master_ip_failover
wget https://down.niknk.com/MYSQL/master_ip_online_change
mv master_ip_* /usr/local/bin/
chmod +x /usr/local/bin/master_ip_*
- 修改master_ip_failover、master_ip_online_change中的参数信息
my $vip = '172.17.0.100'; #配置虚拟IP
my $gateway = '172.17.0.1'; #配置网关
my $interface = 'eth0'; #配置网卡名称
测试SSH及主从复制是否正常:
masterha_check_ssh --conf=/etc/mastermha/app1.conf
masterha_check_repl --conf=/etc/mastermha/app1.conf
启动HA监控管理服务器:
nohup masterha_manager --conf=/etc/mastermha/app1.conf --remove_dead_master_conf \
--ignore_fail_on_start --ignore_last_failover &
检查是否正常:
masterha_check_status --conf=/etc/mastermha/app1.conf
输出信息:app1 (pid:11522) is running(0:PING_OK), master:172.17.0.56
后续维护:
其它操作:
- 停止HA监控管理服务
masterha_stop --conf=/etc/mastermha/app1.conf
- 在线手动切换
手动执行切换需要停止HA监控管理服务
masterha_master_switch --master_state=alive --new_master_host=172.17.0.56 \
--orig_master_is_new_slave --conf=/etc/mastermha/app1.conf
- 宕机手动切换
masterha_master_switch --master_state=dead --new_master_host=172.17.0.57 \
--orig_master_is_new_slave --conf=/etc/mastermha/app1.conf
重新加入节点:
过滤 CHANGE MASTER 的信息并修改密码,在新添加的MySQL节点服务添加即可
- 过滤CHANGE MASTER信息
grep 'CHANGE MASTER TO' /home/masterha/manager.log
- 过滤出日志修改信息如下
CHANGE MASTER TO MASTER_HOST='172.17.0.57',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1,
MASTER_USER='sync',
MASTER_PASSWORD='123123';
- 在MHA配置文件中添加节点信息
vim /etc/mastermha/app1.conf
[server1]
candidate_master=1
check_repl_delay=0
hostname=172.17.0.56
port=3306
- 重新测试SSH及主从复制是否正常
masterha_check_ssh --conf=/etc/mastermha/app1.conf
masterha_check_repl --conf=/etc/mastermha/app1.conf
- 重新启动HA监控管理服务器
nohup masterha_manager --conf=/etc/mastermha/app1.conf --remove_dead_master_conf \
--ignore_fail_on_start --ignore_last_failover &
- 重新检查是否正常
masterha_check_status --conf=/etc/mastermha/app1.conf