8.MHA高可用集群搭建

wiseMale 2020-05-11

MHA概念

(1) MHA通过masterha_manger脚本启动MHA的功能.
(2) 在manager启动之前,会自动检查ssh互信(masterha_check_ssh)和主从状态(masterha_check_repl)
(3) MHA-manager 通过 masterha_master_monitor脚本(每隔ping_interval秒)
(4) masterha_master_monitor探测主库3次无心跳之后,就认为主库宕机了.
(5) 进行选主过程
	算法一: 
	读取配置文件中是否有强制选主的参数?
	candidate_master=1     #强制这台机器为主
	check_repl_delay=0     #不管这台机器和主库相差多少数据,都忽略
	算法二:
	自动判断所有从库的日志量.将最接近主库数据的从库作为新主.
	算法三:
	按照配置文件先后顺序的进行选新主.
(6) 数据补偿 
        判断主库SSH的连通性
        情况一: SSH能连
        调用 save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点,恢复
        情况二: SSH无法连接
        调用 apply_diff_relay_logs 脚本,计算从库的relaylog的差异,恢复到2号从库
        情况三:提供额外的binlog-server
(7) 解除从库身份
(8) 剩余从库和新主库构建主从关系
(9) 应用透明  @@
(10) 故障节点自愈(待开发...)@@
(11) 故障提醒@  

前提条件:
1.最少三台MySQL服务器,1主2从。
2.MHA管理端不能放在MySQL主服务器上。
3.MHA为一次性环境,故障处理完毕后需要手动调整
4.在搭建MHA之前,三台数据库需要同时有MHA管理用户和mysql复制用户
5.MHA可以同时管理多个不同的mysql集群,启动MHA管理端时指定不同的配置文件即可

8.MHA高可用集群搭建

开始搭建

1.搭建主从环境,所有节点都需要开启bin_log

2.创建MHA需要用到的软连接,源节点根据软件安装情况更改,目标节点必须在/usr/bin下

ln -s /application/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql          /usr/bin/mysql

3.所有主机进行免密认证

# ssh-keygen
# ssh-copy-id

#各节点验证,避免出现输入yes的情况

4.在主库创建MHA用户

mysql> grant all privileges on *.* to ‘%‘ identified by ‘mha‘;

5.所有节点安装节点软件包

#安装依赖
yum install perl-DBD-MySQL -y
#安装节点包
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

6.MHA管理节点安装管理软件

#安装依赖
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

7.创建MHA节点配置文件

#创建配置文件目录
mkdir -p /etc/mha
#创建日志目录,可以同时管理多个节点
mkdir -p /var/log/mha/app1

#编辑mha配置文件,针对app1集群的配置
cat > /etc/mha/app1.cnf <<EOF
[server default]
#日志文件名称,程序运行日志,排错都在这里面看
manager_log=/var/log/mha/app1/manager        
#工作目录
manager_workdir=/var/log/mha/app1            
#mysql数据库存放binlog位置,mha会监控这个日志
master_binlog_dir=/var/lib/mysql       
#mha管理用户名
user=mha        
#mha管理用户密码                           
password=mha    
#心跳检测间隔时间                           
ping_interval=2
#mysql复制用户密码
repl_password=123
#MySQL复制用户名
repl_user=repl
#ssh用户
ssh_user=root                               

#管理的mysql实例位置,故障选主时,从上至下顺序选主
[server1]                                   
hostname=192.168.2.3
port=3306                                  
[server2]            
hostname=192.168.2.4
port=3306
[server3]
hostname=192.168.2.5
port=3306
EOF

8.MHA管理端进行状态检查

#检查主机ssh状况
masterha_check_ssh  --conf=/etc/mha/app1.cnf 
#出现下面状态代表ssh状态正常
#[info] All SSH connection tests passed successfully.

#检查mysql复制状况
masterha_check_repl  --conf=/etc/mha/app1.cnf 
#出现下面状态代表mysql复制状态正常
#MySQL Replication Health is OK.

9.检查顺利完成后,MHA节点开启管理端

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  &>> /var/log/mha/app1/manager.log  &

#--conf:指定配置文件
#--remove_dead_master_conf:mysql主库故障时,MHA自动从配置文件中移除坏掉的master
#--ignore_last_failover:MHA切换主从后的8个小时内,如果mysql主库再次出现故障,MHA不会进行切换,加上ignore_last_failover,MHA不会管上一次切换是什么时候,只要mysql主库出现故障,就会切换

10.查看MHA状态

masterha_check_status --conf=/etc/mha/app1.cnf
#出现如下状态代表正常
#app1 (pid:8050) is running(0:PING_OK), master:192.168.2.3

11.其他命令

masterha_manger             启动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信息

数据补偿

#找一台额外的机器也就是第四台机器,必须要有5.6以上的版本,支持gtid并开启
#在MHA管理端配置文件中加入
[binlog1]
#不能参与选主
no_master=1
#binlog server地址
hostname=10.0.0.53
#存放binlog的位置,这个位置不能和mysql数据库存放binlog的位置一样
master_binlog_dir=/data/mysql/binlog
-----------------------------------

#在binlog-server服务器上创建必要目录,跟MHA配置文件中binlog-server指定的位置一致
mkdir -p /data/mysql/binlog
chown -R mysql.mysql /data/*

#手动拉取主库binlog日志,这条命令放在后台以守护进程方式执行,会一直监控主库的binlog,实时拉取!
cd /data/mysql/binlog     -----》必须进入到自己创建好的目录
mysqlbinlog  -R --host=10.0.0.51 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &
#注意:拉取日志的起点,需要按照目前主库正在使用的binlog为起点.

#MHA完成故障切换后,拉取二进制日志的主机需要重新配置mysql主库地址

相关推荐