本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • 【MySQL配置教程】使用MHA实现MYSQL高可用

【MySQL配置教程】使用MHA实现MYSQL高可用

发布:TangLu2019-2-11 15:01分类: MySQL 标签: mysql

MHA是实现MySQL高可用的一种方式,由MHA Manager(管理节点)和MHA Node(数据节点)两部分组成。Manager会对每个Node进行故障监测和故障自动转移,并且能解决复制过程中的数据一致性问题当MHA Manager发现MySQL Master出现故障时自动将一个拥有最新数据的Slave提升为Master,并让另外的Slave重新指向到新的Master上来,这个操作通常能在10-30秒内完成,而且几乎无性能损耗。除此之外还可以在线进行主从切换,大概2秒内就可以完成。


一、MHA详细工作流程:

1、MHA将发生故障的Master上的binlog进行保存(之后会通过scp传到其他节点)

2、MHA对比所有从库的relaylog,找到一个拥有最新position信息的slave,如slave01

3、通过slave01的relaylog,将其它slave的数据补全,保持和slave01一致

4、将slalve01提升为Master,并让其它slave指向  到slave01上

5、将第一步所保存的binlog信息补全到slave01

6、开启其它节点slave的主从复制,保持和slave01一致


MHA主从同步注意事项:

1、在每个节点上都创建主从复制用户并授权,因为发生切换后其他节点就会用到该账号

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.36.11' IDENTIFIED BY '123456789';

2、主从节点都要开启binlog,另外从库的只读选项不能写在配置文件里,从库需要做以下设置:

set global read_only=1


二、MHA切换规则:

1、多个node数据不一致的情况下,会切换到数据最新的slave上

2、多个node数据一致的情况下,会根据server标签的大小进行切换,标签越小优先级越高


三、MHA的安装部署(至少一主两从,否则MHA无法启动)

1、首先在每个节点都安装上perl-DBD-MySQL,该组件会对MHA所需软件提供依赖,因为所用MHA软件是perl语言写的程序(Xtrabackup也是)

yum install perl-DBD-MySQL


2、通过Github下载MHA的Manager和Node包,Github地址https://github.com/yoshinorim/mha4mysql-manager/

3、MHA Manager可以单独部署在一台机器上,也可以部署在其他Slave服务器上,要尽量避免安装在Master上。一套MHA Manager可以管理多套MySQL集群;MHA Node需要装在每一个MySQL节点上,而且没有Node的话Manager也装不上

rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm  #每个节点都要装Node
yum localinstall mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  #找一个从节点或者独立服务器装Manager


4、在所有节点创建一个mha用户并授权,这里在主库执行授权语句即可,由于之前已经是主从关系,所以该语句也会同步到其他从库上

grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';


5、在Manager节点上为MHA Manager创建配置文件目录和日志目录

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


6、修改MHA配置文件

vi /etc/mha/mha.cnf
[server default]
manager_log=/var/log/mha/manager.log  #MHA日志,发生主从切换时都会在这里详细记录
manager_workdir=/var/log/mha  #MHA工作目录
master_binlog_dir=/data/mysql/  #binlog路径全局配置,如果有节点不一样的话可以单独写在主机标签中
user=mha  #MHA管理用户
password=mha  #管理用户密码
ping_interval=2  #每2秒检查一次主库状态
repl_password=123456  #主从复制的密码
repl_user=repl  #主从复制的用户
ssh_user=root  #MHA 会使用scp传输日志,所以节点之间做好密钥登录
ssh_port=22  

[server1]  #主机标签,数字大小会影响优先级
hostname=10.0.0.51
port=3306
master_binlog_dir=/data/mysql/binlog  #单独定义了一个binlog路径

[server2]
#candidate_master=1  #让该节点成为候选master,即使数据不是最新
#check_repl_delay=0  #和上面配置配合使用,忽略从库复制延时的问题,否则延迟大于100M的话候选master也不会被选举为master
hostname=10.0.0.51
port=306

[server3]
hostname=10.0.0.52
port=3306

[binlog1]  #配置一台binlog服务器用来实时备份binlog,防止主库断电导致binlog无法传输,该机器需要有mysql客户端命令
no_master=1  #该节点不会被提升为master
hostname=10.0.0.54
master_binlog_dir=/data/mysql/binlog


7、通过Manager工具检查MHA的ssh-key和主从复制是否工作正常

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


8、启动MHA

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

#remove_dead_master_conf:会在MHA配置文件中去掉已经宕机的主库配置信息
#ignore_last_failover:MHA默认8小时内只切换一次,加上这个选项可以解除这个限制


9、检查MHA状态

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


使用MHA工具检查配置常见报错及解决方法

1、User xxx does not exist or does not have REPLICATION SLAVE privileges

 这是因为该节点没有用于主从复制的用户,确认主从部署正常后在主库上执行授权命令

grant replication slave on *.* to xxx@'10.0.0.%' identified by '123456'; 


2、Host 'x.x.x.x' is not allowed to connect to this MySQL server

在主库创建mha用户并授权

grant all on *.* to mha@'10.0.0.%' identified by 'mha';



四、MHA的VIP漂移

说到VIP管理,第一个想到的就是keepalive。但是用它做MHA VIP管理的话会有这样一个问题,那就是无法保证VIP漂移到拥有最新数据的Slave上的问题,因为keepalive不知道节点的数据情况。除了keepalived之外还有一种方式就是使用MHA自带的脚本进行VIP管理。下面是配置步骤:

1、编辑mha配置文件,在[server default]标签增加一行

master_ip_failover_script=/usr/local/bin/master_ip_failover  #脚本可以从manager源码包samples/script目录中复制,然后修改一些VIP配置等信息


2、增加执行权限

chmod +x /usr/local/bin/master_ip_failover 


3、检查脚本

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


4、重启MHA



五、MHA切换后如何修复原有Master

发生主从切换后原Master会暂停服务需要修复数据,之后再把原Master重新作为新主库的slave。在需要重新做主从部署的时候可以查看发生自动切换时MHA日志所记录的位置点信息,然后直接复制那条CHANGE MASTER语句即可让其成为从库,日志内容大致如下
All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.2.129', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=61791, MASTER_USER='repl', MASTER_PASSWORD='xxx';

另外还需要注意的是MHA发生切换后,配置文件会被重写,原有的Master节点的信息会被删除,所以在恢复了服务后还需要手动在MHA配置文件中增加一台节点

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【MySQL配置教程】使用MHA实现MYSQL高可用
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-464.html  [生成短网址]

已有 0/1269 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~