目录
案例搭建
1:所有服务器关闭防火墙
2:设置hosts文件
3:安装 MySQL 数据库
4:修改参数
5:安装 MHA 软件
6:配置无密码认证
7:配置 MHA
8:模拟 master 故障
MHA(MasterHigh Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,是一套优秀的MySQL 高可用环境下故障切换和主从复制的软件。在 MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用
- 该软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)
- MHAManager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上
- MHANode 运行在每台 MySQL服务器上,MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的master,然后将所有其他的slave 重新指向新的 master。整个故障转移过程对应用程序完全透明
- 自动故障切换过程,MHA试图从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
- 使用半同步复制,可以大大降低数据丢失的风险
- 目前 MHA 主要支持一主多从的架构,要搭建 MHA 要求一个复制集群中必须最少有三台数据库服务器,即一台充当 master,一台充当备用 master,另外一台充当从库
案例搭建
服务器 | 操作系统 | 主机名/IP 地址 | 角色 |
服务器 | CentOS7.9 | 192.168.10.101 | 管理节点,安装 manager 和node 组件 |
服务器 | CentOS7.9 | 192.168.10.102 | Master 节点,安装 node 组件 |
服务器 | CentOS7.9 | 192.168.10.103 | Slave 节点,安装 node 组件 |
服务器 | CentOS7.9 | 192.168.10.104 | Slave 节点,安装 node 组件 |
- 安装MySQL 数据库
- 配置MySQL 一主两从
- 安装MHA 软件
- 配置无密码认证
- 配置 MySQL MHA 高可用
- 模拟master 故障切换
1:所有服务器关闭防火墙
systemctl stop firewalld
setenforce 0
2:设置hosts文件
vim /etc/hosts
192.168.10.101 MHA-manager
192.168.10.102 Mysql1
192.168.10.103 Mysql2
192.168.10.104 Mysql3
3:安装 MySQL 数据库
4:修改参数
(1)修改主库参数
vim /etc/my.cnf
server-id=11
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0
log-slave-updates=true
//当relay_log_purge=1时,旧relay logs会在SQL线程执行完毕后被自动删除;当relay_log_purge=0 时,旧的 relaylog则会被保留(2)修改从库参数
vim /etc/my.cnf
server-id= 22
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0 ##不自动删除中继日志,以便宕机后恢复数据
log-slave-updates=true ##Slave可以是其他 Slave 的 Master,从而扩散 Master 的更新(3)在所有的mysql节点上配置权限
grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
//第一条是做主从复制的;后四条是做MHA用的(4)在mysql1上查看master信息
mysql> show master status;(5)在mysql2和mysql3上设置为slave
mysql> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',
master_log_file='master-bin.000003',master_log_pos=689;mysql> start slave;
mysql> show slave status\G
5:安装 MHA 软件
(1)所有服务器上都安装 MHA 依赖的环境
设置阿里的yum基础源以及epel扩展源
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN//注释perl-DBD-MySQL //perl针对于mysql数据库perl-Config-Tiny //从配置文件中提拿其中的值perl-Log-Dispatch //log-日志perl-Parallel-ForkManager //多线程管理perl-ExtUtils-CBuilder //扩展工具perl-ExtUtils-MakeMaker perl-CPAN //cpan perl中的数据库(2)在所有节点安装node组件
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
//备注node工具(这些工具通常由 MHAManager 的脚本触发,无需人为操作)save_binary_logs:保存和复制 master 的二进制日志apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slavefilter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具) purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)(3)在 MHA-manager 上安装 manager 组件
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
//备注:
manager工具masterha_check_ssh:检查 MHA 的 SSH 配置状况 masterha_check_repl:检查 MySQL 复制状况masterha_manger:启动 MHA masterha_check_status:检测当前 MHA 运行状态 masterha_master_monitor:检测 master 是否宕机masterha_master_switch:控制故障转移(自动或者手动)masterha_conf_host:添加或删除配置的 server 信息
6:配置无密码认证
(1)在 manager 上配置到所有节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.103
ssh-copy-id 192.168.10.104(2)在 Mysql1 上配置到数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.103
ssh-copy-id 192.168.10.104(3)在 Mysql2 上配置到数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.104(4)在 Mysql3 上配置到数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.103
7:配置 MHA
(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
ll /root/mha4mysql-manager-0.57/samples/scripts/
chmod +x /root/mha4mysql-manager-0.57/samples/scripts/*
cp /root/mha4mysql-manager-0.57/samples/scripts/* /usr/local/bin
//脚本具体作用master_ip_failover:自动切换时 VIP 管理的脚本 master_ip_online_change:在线切换时 vip 的管理 power_manager:故障发生后关闭主机的脚本 send_report:因故障切换后发送报警的脚本(2)使用文档内容完整替换 master_ip_failover 文件的内容,IP 部分更换为自己的IP地址(第9页)
复制“master_ip_failover”脚本到/usr/local/bin 目录,这里使用脚本管理 VIP
//备注:candidate_master=1:设置为候选 master,如果设置该参数以后,发生主从切换以后会将此从库提升为主库。check_repl_delay=0:默认情况下如果一个 slave 落后 master 100M 的 relay logs 的话,MHA 将不会选择该slave 作为一个新的 master。因为对于这个 slave 的恢复需要花费很长时间,通过设置 check_repl_delay=0,MHA 触发切换在选择一个新的 master 的时候将会忽略复制延时,这个参数对于设置了 candidate_master=1 的主机非常有用,因为这个候选主在切换的过程中一定是新的 master。//如果是yum安装的mariadb,master_binlog_dir=/var/lib/mysql(4)测试 ssh 无密码认证,如果正常最后会输出 successfully
masterha_check_ssh -conf=/etc/masterha/app1.cnf
(5)测试 mysq 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常
masterha_check_repl -conf=/etc/masterha/app1.cnf
(6)首次配置 MHA 的 VIP 地址需要手动进行配置(在mysq1上)
ifconfig ens33:1 192.168.10.200
(7)启动 MHA(在mha-manager主机上)
nohup masterha_manager \ //nohup:英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
--conf=/etc/masterha/app1.cnf \
--remove_dead_master_conf \ //该参数代表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除该参数代表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除
--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & //该参数代表忽略上次 MHA 触发切换产生的文件
//2>&1表示标准错误输出和标准输出都定向到log中;2>&1 & 最后一个&表示把这条命令放到后台执行
//< /dev/null >/var/log/masterha/app1/manager.log 2>&1
表示先将标准输出重定向到manager.log,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了manager.log,因此标准错误也会重定向到manager.log在Linux系统中,代码“0”、“1”、“2”都是文件描述符,0代表标准输入,1代表标准输出,2代表错误输出(8)查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点
masterha_check_status --conf=/etc/masterha/app1.cnf
(9)查看 MHA 日志
cat /var/log/masterha/app1/manager.log
8:模拟 master 故障
(1)用客户端链接群集
mysql -u mha -pmanager -h 192.168.10.200(2)关闭当前的 master
systemctl stop mysqld(3)观察 MHA 日志,如果自动切换成功,最后会输出 successfully 字样
tailf /var/log/masterha/app1/manager.log