mysql8 mha_mysql 第八章 高可用MHA

mysql 第八章 高可用MHA

一. MHA原理(Failover如何实现过程) ***

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次无心跳之后,就认为主库宕机了.

情况一: SSH能连,调用 save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点,恢复

情况二: SSH无法连接,调用 apply_diff_relay_logs 脚本,计算从库的relaylog的差异,选择 relay_logs多的为主

5. 进行选主算法:

算法一: 读取配置文件中是否有强制选主的参数?

candidate_master=1 强制选主

check_repl_delay=0 不检查repl_log执行情况

算法二: 自动判断所有从库的日志量.将最接近主库数据的从库作为新主.

算法三: 按照配置文件先后顺序的进行选新主.

二. 注意事项 *****

1. MHA 所有节点 mysql的server_id 不能相同

2. 所有节点安装mysql, 配置关键程序软连接

3.所有节点必须开启gitd,必须开启二进制模式

4.所有节点互信

5.主库常见建mha用户

6. binlog_server 端会影响主库性能,只有事务写入到从库的磁盘才算commit

6. 软件安装

6.1 所有节点安装节点软件包 mysql(服务端) ,mha4mysql-node-0.56-0.el6.noarch.rpm等

6.2 Manager端软件安装 mysql(客户端端), mha4mysql-manager-0.56-0.el6.noarch.rpm等等

三.主库down 后,恢复主从流程 *****

1. 检查各个节点mysql是否启动

2.检查新的主是谁,查看vip是否在新的主, 然后在读写分离服务器下线主库的读权限

2. 从库重新 chan master to ,然后在读写分离服务器上线从库的的读权限

3. binglog_server 删除了,重新mysqlbinlog新的主

4. 修改配置文件

5. 启动

四. 构建MHA

1.准备节点

1.1 一主二从,且开启主从

1.2 一台binglog_server服务器

1.3 一台manger服务器

2.全部配置关键程序软连接

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

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

3.全部护发公私秘钥对

3.1主库生成密钥对

参考ssh

3.2 主库分发公钥到从库

参考ssh

3.3 主库免交互推送私钥(主库拥有私钥,从库有公钥才行)

for num in {1..4};do rsync -avz /root/.ssh 10.0.0.$num:/root/ -e "ssh -o StrictHostKeyChecking=no"; done

3.4 测试

for num in {1..4};do ssh "-o StrictHostKeyChecking=no" 10.0.0.$num date;done

4.全部节点安装软件包

cp /server/tools/MH* /mnt

cd /mnt&&unzip MH*

yum install perl-DBD-MySQL -y

rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rp

5. master主库中创建VIP,创建mha需要的用户,从库会自动同步

mysql -S /data/3306/mysql.sock -e "create user mha@'10.0.0.%' identified by '123';"

mysql -S /data/3306/mysql.sock -e "grant all privileges on *.* to mha@'10.0.0.%';"

mysql -S /data/3306/mysql.sock -e "show grants for mha@'10.0.0.%';"

ifconfig eth0:1 10.0.0.55/24

6.额外的数据补偿(binlog_server):#找一台额外的机器,必须要有5.6以上的版本,支持gtid并开启

mkdir -p /data/3306/binlog_server/binlog

chown -R mysql.mysql /data/

拉取主库binlog日志

cd /data/3306/binlog_server/ &&\

mysqlbinlog -R --host=10.0.0.1 --user=mha --password=123 --raw --stop-never mysql_3306_bin.000001 &

7. Manager端软件安装(db03)

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

cd /mnt &&rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

8.Manager端VIP飘逸脚本

cp /mnt/master_ip_failover /usr/local/bin/master_ip_failover

vim /usr/local/bin/master_ip_failover

my $vip = '10.0.0.55/24';

my $key = '1';

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

dos2unix /usr/local/bin/master_ip_failover

chmod +x /usr/local/bin/master_ip_failover

(7)Manager端email 发送脚本

cd /mnt &&unzip email*

cp -a /mnt/email /usr/local/bin/

chmod +x /usr/local/bin/email/*

sed -i s#g_lee0916@126.com#liuxd13320127589@163.com#g /usr/local/bin/email/testpl

sed -i s#smtp.126.com:25#smtp.163.com:25#g /usr/local/bin/email/testpl

sed -i s#g_lee0916#liuxd13320127589#g /usr/local/bin/email/testpl

sed -i s#ybbhlkg1dddf#JZBYMGXFXMQZFDYQ#g /usr/local/bin/email/testpl

sed -i s#22654481@qq.com#1426477600@qq.com#g /usr/local/bin/email/testpl

9. Manager端配创建置文见\日志文件(db03)

mkdir -p /etc/mha && mkdir -p /var/log/mha/zhihu

cat > /etc/mha/zhihu.cnf <

[server default]

manager_log=/var/log/mha/zhihu/manager

manager_workdir=/var/log/mha/zhihu

#主库的二进制位置点

master_binlog_dir=/data/3306/binlog

user=mha

password=123

#每2秒检测一次主从健康,默认3此检测不成功就切换

ping_interval=2

repl_password=123

repl_user=repl

ssh_user=root

#vip 飘逸脚本需要执行权限

master_ip_failover_script=/usr/local/bin/master_ip_failover

#email 告警脚本

report_script=/usr/local/bin/email/send

[server1]

#从51到52到53这个顺序主从切换,即51当了,52为主库

hostname=10.0.0.1

port=3306

[server2]

hostname=10.0.0.2

port=3306

[server3]

hostname=10.0.0.3

port=3306

#serverbinlog服务器,只提供二进制日志不参选主机竞选机制

[binlog1]

no_master=1

hostname=10.0.0.4

master_binlog_dir=/data/3306/binlog_server/

EOF

10 . MHA 命令集合 ***

10.1 互信检查 主从状态检查

masterha_check_ssh --conf=/etc/mha/zhihu.cnf

masterha_check_repl --conf=/etc/mha/zhihu.cnf

10.2 开启MHA(db03):

nohup masterha_manager --conf=/etc/mha/zhihu.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/zhihu/manager.log 2>&1 &

#manager.log:启动日志

# --remove_dead_master_conf: 主从切换后,自动把坏的主库从配置文件注销

#--ignore_last_failover 忽略切换时间间隔,可以立即切换

10.3 看状态

masterha_check_status --conf=/etc/mha/zhihu.cnf

10.4 #关闭

masterha_stop --conf=/etc/mha/zhihu.cnf

10.5 MHA 脚本集

MHA软件的构成(perl语言)

Manager工具包主要包括以下几个工具:

mha4mysql-manager-0.56-0.el6.noarch.rpm

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信息

Node工具包主要包括以下几个工具:这些工具通常由MHA Manager的脚本触发,无需人为操作

mha4mysql-node-0.56-0.el6.noarch.rpm

save_binary_logs 保存和复制master的二进制日志

apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的

purge_relay_logs 清除中继日志(不会阻塞SQL线程)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值