博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL高可用架构故障自动转移插件MHA
阅读量:4673 次
发布时间:2019-06-09

本文共 5002 字,大约阅读时间需要 16 分钟。

mha高可用架构是目前mysql高可用故障转移比较成熟的解决方案。MHA插件复杂监控mysql主节点的健康情况。在主节点宕机后,MHA把binlog通过ssh传到从节点进行重做补齐。并提升其中一个从节点为主节点。如:A>B ,A>C  。A宕机后。B,C补齐日志。并将故障转移后的架构变为B>C。

转移的流程如下:

1、从出现故障的主节点A拉取binlog日志到B、C节点。

2、识别有最近Relay_Master_Log_File,Exec_Master_Log_Pos 更新的slave节点。假设是B

3、应用差异的中继日志(relay log)到其他slave节点。如C

4、提升slave (B)为新的主节点。

5、其他的节点(C)连接到新的主节点。

MHA 切换完了之后并没有其他的操作了。如服务发现,重新注册。但是MHA提供了脚本接口。可以手动指定切换完了MHA执行指定的脚本。如注册虚拟ip到新的主节点。或者调用接口注册新的服务域名。发告警邮件 等。

mha的架构如下

MHA插件分为两部分 Manager工具包和Node工具包:

 

Manager 插件是管理节点,主要用于监控Mysql主从架构的正常状态。

有以下命令集:

 masterha_check_status  检查 masterha_manager状态

 masterha_check_ssh   检查ssh是否正常
 masterha_check_repl   检查复制链是否正常
 masterha_master_monitor
 masterha_manager   启动mha管理进程(发现故障时切换)
 masterha_conf_host
 masterha_master_switch
 masterha_stop
 master_ip_failover
 masterha_switch_domain
 master_ip_online_change
 masterha_secondary_check

Node 节点在每个mysql实例上存在,供Manager 健康检测,故障转移时调用。

有如下命令集:

apply_diff_relay_logs

filter_mysqlbinlog
purge_relay_logs
save_binary_logs

注意:Node节点如果是编译安装。会在/usr/local/bin 目录下存在以上命令。如果是直接用编译完的二进制包解压安装。必须把Node的4个命令 拷贝到 /usr/local/bin目录下。否则找不到命令

【MHA的安装】

mha的安装可以到官网下载进行编译安装。

为了省事,可以到我已经编译架构好的百度云盘下载:

链接:https://pan.baidu.com/s/11fh_wolEYHg-VhaJDwYglA 密码:3zie

以下介绍安装按照我已经编译好的安装包解压即可:

tar -xcf  mha56.tar.gz -C /usr/local

解压之后有以下文件夹:

auth  bin  conf  MHA  rpm  workdir

rpm目录存在了mha所依赖的所有rpm包。也可以eperl 源yum安装。

yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-File-Which perl-Digest-SHA1 perl-Crypt-SSLeay perl-libwww-perl perl-TermReadKey -y
 
MHA 目录存在了mha整套perl脚本需要
cp -rp   MHA   /usr/local/share/perl5/  
chmod rp 444   /usr/local/share/perl5/MHA
bin 目录存放了Manager 节点和Node节点的所有脚本。Node脚本需要拷贝到/usr/local/bin目录:
cp -rp cp -rp apply_diff_relay_logs  filter_mysqlbinlog  save_binary_logs  purge_relay_logs   /usr/local/bin
 
【配置mha配置文件】
conf 目录存放配置文件的模板
这里只指定两个节点A>B。可以指定3个节点,或更多。
##定义每套cluster端口为[portnum]## mkdir -p /usr/local/mha56/workdir ; chown mha:mysql /usr/local/mha56/workdir[server default]client_bindir=/usr/local/mysql/bin/manager_workdir=/usr/local/mha56/workdirremote_workdir=/usr/local/mha56/workdirmanager_log=/usr/local/mha56/workdir/portnum.logmaster_binlog_dir=binary_log_dir#手动切换脚本master_ip_online_change_script= /usr/local/mha56/bin/master_ip_online_changereport_script=/usr/local/mha56/bin/send_report#自动切换时vip管理#master_ip_failover_script=/usr/local/mha56/bin/master_ip_failoverinit_conf_load_script=/usr/local/mha56/auth/mha_authuser=mymha#password=repl_user=myrepl#repl_password=ssh_port=10000ssh_user=mhassh_options="-i /home/mha/.ssh/id_rsa_mha.key"ping_interval=3max_ping_errors=10check_repl_filter=0[server1]hostname=master_server_ipport=portnum[server2]candidate_master=1check_repl_delay=0hostname=slave_server_ipport=portnum

mha 需要开通ssh。这里用指定公钥的形式拷贝公钥到每台mha manager 和node机器下。 ssh_options="-i /home/mha/.ssh/id_rsa_mha.key"  (5.3开始支持)。

系统账号:

为了避开使用rool账号,重新开启 mha 普通系统账号。

系统账号mha要和mysql 实例启动账号在同一个组。才可以读取mysql的binlog。

mysql账号(2个):

mha的监控与故障切换mysql账号mymha 的最小权限要求:

GRANT RELOAD, SUPER, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mha'@'192.168.%';

GRANT SELECT ON `mysql`.* TO 'mha'@'192.168.%'

若数据库无开启GTID,需要多赋一个权限:

grant  Create,alter,delete,insert,update,drop   on `mysql`.apply_diff_relay_logs_test  to  'mha'@'192.168.%';

mysql的复制账号 repl_user 。权限只需要

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mha'@'192.168.%';

把 mha的mysql管理账号mymha 和 复制账号myrepl的密码存在在单独的文件:

init_conf_load_script=/usr/local/mha56/auth/mha_auth

mha_auth 这个文件必须为系统账号mha可执行文件,否则报错。

manager_workdir  是mha存放心跳信息。以及故障切换时的工作目录。

这里为了方便:直接 chown  -R mha:mysql /usr/local/mha56  把整个目录属主节赋权mha账号。mysql组。

其他配置选项说明参照官网说明。

----------------------

【检测MHA】:

安装完了mha。并配置了第一个第一套mysql的主从 3306 的mha高可用故障转移。假设配置文件为/usr/local/mha56/conf/mha_3998.conf  。可以开始检测。

检测ssh是否正常:

/usr/local/mha56/bin/masterha_check_repl   --conf=/usr/local/mha56/conf/mha_3998.conf

最终信息为 MySQL Replication Health is OK. 表示正常。

检测mysql主从复制集群是否正常:

/usr/local/mha56/bin/masterha_check_repl   --conf=/usr/local/mha56/conf/mha_3998.conf

最终为:MySQL Replication Health is OK. 表示正常

手动进行主从切换。

masterha_master_switch  --master_state=alive --conf=/usr/local/mha56/conf/mha_3998.conf   --orig_master_is_new_slave

最终为:[info] Switching master to 192.168.100.51(192.168.100.51:3998) completed successfully. 表示主从切换成功,从A>B 变为B>A。

最后可以开启mha的管理进程。在主节点出现故障时。mha自动切换。

/usr/local/mha56/bin/masterha_manager  --conf=/usr/local/mha56/conf/mha_3998.conf    --ignore_last_failover   &

检查进程运行状态:

/usr/local/mha56/bin/masterha_check_status   --conf=/usr/local/mha56/conf/mha_3998.conf 

注:故障切换完毕masterha_manager 进程会退出。workdir目录下回生成  mha_3998.failover.complete 文件。下一次启动masterha_manager 时需要删除该文件才可正常启动。

------------------------------

【服务发现与注册】:

mha只负责master节点出现故障,把主节点转移到其中一个从节点,成为新的的主节点。其余从节点接入到新的主节点。mha切换完毕后。应用链接到原来的master会出现错误的。这是需要把指向mysql主节点的链接转移走。

1、用vip的方式。在新的主节点注册vip。

2、使用域名,用consul 服务发现。把域名指向的ip指走。

3、使用域名。用power+python脚本检测的方式。把域名指向的ip指走。

说明:用域名灵活,如果有读写分离域名。可以灵活编写python脚本。判断从节点延迟的时候或者从节点 复制断开的时候把域名指向主节点的ip。

Q:1123654342

 

 

 

 

 

转载于:https://www.cnblogs.com/vansky/p/9238276.html

你可能感兴趣的文章
2015年创业中遇到的技术问题:21-30
查看>>
北戴河游记
查看>>
Intersecting Lines
查看>>
记忆化搜索=搜索的形式+动态规划的思想(来自百度百科)
查看>>
图 | 为什么存在关于图的研究
查看>>
hdu 1133 Buy the Ticket(递推+精度精算)
查看>>
html5学习笔记(<section>)
查看>>
LeetCode: Add Binary 解题报告
查看>>
网络原理笔记索引
查看>>
iis配置write模块
查看>>
Django项目:CMDB(服务器硬件资产自动采集系统)--11--07CMDB文件模式测试采集硬件数据...
查看>>
环境搭建
查看>>
报错TypeError: $(...).live is not a function解决方法
查看>>
C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑...
查看>>
Servlet学习的两个案例之网站访问次数的统计
查看>>
读取 Excel 之 Epplus
查看>>
Knockout v3.4.0 中文版教程-14-控制文本内容和外观-style绑定
查看>>
Highcharts 统计图
查看>>
流式套接字:基于TCP协议的Socket网络编程(案例2)
查看>>
安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置(转)
查看>>