MySQL高可用架构

MHA高可用 

MHA 架构软件结构说明

2.1 节点规划
manager端: db03
node端: db01,db02,db03
1主2从,独立数据库实例

2.2 MHA软件的构成(perl语言)
Manager工具包主要包括以下几个工具:
mha4mysql-manager-0.58-0.el7.centos.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工具包主要包括以下几个工具:
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
这些工具通常由MHA Manager的脚本触发,无需人为操作
save_binary_logs            保存和复制master的二进制日志 
apply_diff_relay_logs       识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs            清除中继日志(不会阻塞SQL线程)


 MHA 配置过程细节说明

3.1 软连接
\rm -rf /usr/bin/mysqlbinlog
\rm -rf /usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql          /usr/bin/mysql

3.2 互信
db01:

rm -rf /root/.ssh 
ssh-keygen
cd /root/.ssh 
mv id_rsa.pub authorized_keys

scp  -r  /root/.ssh  192.168.8.20:/root 
scp  -r  /root/.ssh  192.168.8.30:/root 


各节点验证

ssh 192.168.8.10 hostname
ssh 192.168.8.20 hostname
ssh 192.168.8.30 hostname


3.3 安装软件包(所有节点)
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

3.4 在db01主库中创建mha需要的用户
grant all privileges on *.* to mha@'192.168.8.%' identified by 'mha';

3.5  Manager软件安装(db03)
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm


3.6 配置文件准备(db03)
-- 创建配置文件目录
mkdir -p /etc/mha
-- 创建日志目录
mkdir -p /var/log/mha/app1
-- 编辑mha配置文件
cat > /etc/mha/app1.cnf <<EOF
[server default]
manager_log=/var/log/mha/app1/manager        
manager_workdir=/var/log/mha/app1            
master_binlog_dir=/usr/local/mysql/data       
user=mha                                   
password=mha                               
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root                               
[server1]                                   
hostname=192.168.8.10
port=3306                                  
[server2]            
hostname=192.168.8.20
port=3306
[server3]
hostname=192.168.8.30
port=3306
EOF

3.7 状态检查(db03)
masterha_check_ssh  --conf=/etc/mha/app1.cnf 
masterha_check_repl  --conf=/etc/mha/app1.cnf 

3.8 开启MHA(db03):
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

 MHA FailOver过程详解

4.1 什么是Failover?
故障转移.
主库宕机一直到业务恢复正常的处理过程(自动)
4.2 Failover让你实现怎么做?
(1) 快速监控到主库宕机
(2) 选择新主
(3) 数据补偿
(4) 解除从库身份
(5) 剩余从库和新主库构建主从关系
(6) 应用透明
(7) 故障节点自愈(待开发...) 
(8) 故障提醒

4.3 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次无心跳之后,就认为主库宕机了.
(5) 进行选主过程 ***
    算法一: 
    读取配置文件中是否有强制选主的参数?
    candidate_master=1
    check_repl_delay=0
    扩展一下:
    candidate_master=1 应用场景?
        (a) MHA+KeepAlive VIP(早期MHA架构)
        (b) 多地多中心
    算法二:
    自动判断所有从库的日志量.将最接近主库数据的从库作为新主.
    算法三:
    按照配置文件先后顺序的进行选新主.
    

(6) 数据补偿 
判断主库SSH的连通性
情况一: SSH能连
调用 save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点,恢复
情况二: SSH无法连接
调用 apply_diff_relay_logs 脚本,计算从库的relaylog的差异,恢复到2号从库
(6.1) 提供额外的数据补偿的功能@@
(7) 解除从库身份
(8) 剩余从库和新主库构建主从关系
(9) 应用透明  @@
(10) 故障节点自愈(待开发...)@@
(11) 故障提醒@@

 MHA 应用透明(vip)

db03:
cp /root/master_ip_failover.txt /usr/local/bin/master_ip_failover

vim /usr/local/bin/master_ip_failover
my $vip = '192.168.8.254/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";

[root@db03 bin]# yum install -y  dos2unix
[root@db03 bin]# dos2unix /usr/local/bin/master_ip_failover
[root@db03 bin]# chmod +x /usr/local/bin/master_ip_failover 

[root@db03 bin]# vim /etc/mha/app1.cnf 
添加至首行:
master_ip_failover_script=/usr/local/bin/master_ip_failover

db01:手工添加vip
[root@db01 ~]# ifconfig ens33:1 192.168.8.254/24

db03 : 重启MHA

 MHA 故障提醒

复制email.zip到/root
cd /root
unzip email.zip
cd email
cp * /usr/local/bin/
chmod +x /usr/local/bin/*

vim /etc/mha/app1.cnf
添加:
report_script=/usr/local/bin/send
保存退出

重启mha

 额外的数据补偿(binlog_server)

(1)
找一台额外的机器,必须要有5.6以上的版本,支持gtid并开启,我们直接用的第二个slave(db03)
mkdir -p /data/mysql/binlog
chown -R mysql.mysql /data/mysql
 
vim /etc/mha/binlogserver.cnf 
[binlog1]
no_master=1
hostname=192.168.8.30
master_binlog_dir=/data/mysql/binlog/

(2) 拉取主库binlog日志

cd /data/mysql/binlog    
mysqlbinlog  -R --host=192.168.8.10 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &

注意:
拉取日志的起点,需要按照目前主库正在使用的binlog为起点.


(4) 重启MHA-manager 
masterha_stop --conf=/etc/mha/app1.cnf

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

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

故障模拟及故障处理

8.1 宕掉 db01 数据库
systemctl stop mysqld 

在db03上查看日志:
grep "CHANGE MASTER TO"  /var/log/mha/app1/manager

8.2 恢复故障
(1) 启动故障节点
[root@db01 ~]# systemctl start mysqld

(2) 恢复1主2从(db01)
db01>CHANGE MASTER TO MASTER_HOST='192.168.8.20', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123';
db01>start slave;
(3) 恢复配置文件(db03)
[server1]
hostname=192.168.8.10
port=3306
[server2]
hostname=192.168.8.20
port=3306
[server3]
hostname=192.168.8.30
port=3306


(4) 启动MHA 
[root@db03 bin]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
[1] 16543
[root@db03 bin]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:16543) is running(0:PING_OK), master:192.168.8.20

(5)恢复binlogserver 
cd /data/mysql/binlog  
mv mysql-bin.*  /tmp
mysqlbinlog  -R --host=192.168.8.20 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值