快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)
MySQL MHA高可用架构搭建
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL主从复制架构提供了 automating master failover (自动化主故障转移)功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
在 MySQL 故障切换过程中,MHA 能够做到 0~30 秒内自动完成数据库的故障切换操作,并且,在进行故障切换的过程中,MHA 能最大成都上保证数据库的一致性,以达到真正意义上的高可用
所需工具
MHA Manager(管理节点):管理所有主从复制数据库,通常单独部署在一台机器上
MHA Node(数据节点):运行在每个mysql所在的机器上以及管理节点所在机器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它自动将最新数据的slave提升为master,然后将其它所有的slave指向新的master。
步骤
- 准备一个已经基于GTID搭建好的mysql主从复制集群,以及一台新的linux用于部署管理节点
- 设置所有机器可以免密登录
#所有机器生成ssh密钥
[root@localhost ~]# ssh-keygen -t rsa
#所有机器发送免密登录请求到所有机器(包括自己)
[root@localhost ~]# ssh-copy-id 192.168.157.111
[root@localhost ~]# ssh-copy-id 192.168.157.112
[root@localhost ~]# ssh-copy-id 192.168.157.113
[root@localhost ~]# ssh-copy-id 192.168.157.114
- 所有节点安装mha运行环境
[root@localhost mysql]# yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
- 所有机器安装mha的数据节点软件(包括将来的管理节点)
将数据节点下载到所有机器
#通过rpm命令安装
[root@localhost ~]# rpm -ivh /tmp/mha4mysql-node-0.57-0.el7.noarch.rpm
- 检查mysql环境
#mha在运行时会调用一些mysql的命令,需要提前检查命令是否在Linux默认环境中
[root@localhost ~]# which mysql
/usr/bin/mysql #检查mysql命令,此为正常
[root@localhost ~]# which mysqlbinlog
/usr/bin/which: no mysqlbinlog in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
#检查mysqlbinlog命令,此为不正常,需要将此命令在/usr/bin下简历软连接
[root@localhost ~]# ln -s /opt/liuyh/mysql/bin/mysqlbinlog /usr/bin/
[root@localhost ~]# which mysqlbinlog
/usr/bin/mysqlbinlog # 正常
- 所有数据库创建mha管理用户并赋予权限
mysql> grant all on . to ‘mha’@‘%’ identified by ‘111111’;
#注意,此前已经完成了主从复制,只需在主库创建,从库自动同步
- 管理节点配置–安装管理节点运行环境
[root@localhost ~]# yum install -y perl-Config-Tiny epel-release perl-Parallel-ForkManager perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
- 管理节点配置-安装管理节点
#下载管理节点
#使用rpm安装
[root@localhost ~]# rpm -ivh /tmp/mha4mysql-manager-0.57-0.el7.noarch.rpm
- 管理节点配置-创建mha目录
[root@localhost ~]# mkdir -p /etc/mha
[root@localhost ~]# mkdir -p /var/log/mha/app1
- 管理节点配置-创建配置文件并修改
[root@localhost ~]# vi /var/log/mha/app1.cnf
配置文件内容
[server default]
manager_log=/var/log/mha/log/manager.log
manager_workdir=/var/log/mha/app.log
master_binlog_dir=/opt/liuyh/log
user=mha
password=123456
ping_interval=2
repl_user=testslave
repl_password=123456
ssh_user=root
[server1]
candidate_master=1
check_repl_delay=0
hostname=192.168.240.134
port=3306
[server2]
check_repl_delay=0
hostname=192.168.240.135
port=3306
[server3]
check_repl_delay=0
hostname=192.168.240.136
port=3306
# 关键字作用以及编写实例参考
[server default]
manager_workdir=/var/log/masterha/app1.log #设置manager的工作目录
manager_log=/var/log/masterha/app1/manager.log #设置manager的日志
master_binlog_dir=/data/mysql #设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
master_ip_failover_script= /usr/local/bin/master_ip_failover #设置自动failover时候的切换脚本
master_ip_online_change_script= /usr/local/bin/master_ip_online_change #设置手动切换时候的切换脚本
password=123456 #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root #设置监控用户root
ping_interval=1 #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp #设置远端mysql在发生切换时binlog的保存位置
repl_password=123456 #设置复制用户的密码
repl_user=repl #设置复制环境中的复制用户名
report_script=/usr/local/send_report #设置发生切换后发送的报警的脚本
secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02 # 一旦MHA到server02的监控之间出现问题,MHA Manager将会尝试从server03登录到server02
shutdown_script="" #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root #设置ssh的登录用户名
[server1]
hostname=10.0.0.201 #数据库的ip
port=3306 #数据库的端口
[server2]
hostname=10.0.0.204
port=3306
candidate_master=1 #设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的
slave_check_repl_delay=0 #默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换 的过程中一定是新的master
[server3]
hostname=10.0.0.202
port=3306
- 管理节点配置-检查mha的ssh连接情况
[root@localhost ~]# masterha_check_ssh --conf=/var/log/mha/app1.cnf
- 管理节点配置-检查主从复制状态
- 启动mha
[root@localhost mha]# nohup masterha_manager --conf=/var/log/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/mha/log/manager.log 2>&1 &
/var/log/mha/log/manager.log 设置该文件为日志文件,保证该文件目录存在
- 手动关闭主库,模拟主库宕机
- 再次查看主从复制情况
[root@localhost ~]# masterha_check_repl --conf=/var/log/mha/app1.cnf