您的位置:首页 > 运维架构 > 网站架构

mysql的MHA高可用集群

2017-07-17 20:12 253 查看

前言

mysql可以通过主从复制,多主复制,半同步复制等方法解决单点故障问题和io瓶颈。但是复制集群的一个问题就是每次master宕机都需要手动去提升从节点,那么有没有比较好的方法来解决此问题呢?MHA就是这样的解决方案。

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA由两部分组成,MHA Manageer和MHA Node。MHA manager主要是监控mysql集群的状态,当master发生故障之后其可以自动提升数据相对更接近于master的slave为主节点,然后将其他slave指向新的master。




注意:

mysql的slave总是会复制master的二进制日志到自己的中继日志进行数据同步,但是这存在一定的问题。比如master刚把数据写入二进制日志,而从节点还没有同步,因为它们之间默认是通过异步方式进行同步的,此时就会发生数据不一致。所以此问题可以通过mysql的半同步复制解决,选择一台slave采用同步方式和master同步数据,当集群发生故障,则MHA自动提升半同步slave节点为master。


实验环境

采用四台服务器来进行此配置:

MHA manager:192.168.11.197

master节点:192.168.11.194

slave节点-1:192.158.11.195

slave节点-2:192.168.11.196

MHA要求各节点能够通过ssh密钥无障碍通信,因为各个节点需要同步日志。所以需要设置ssh密钥通信。

实验步骤

各节点之间配置ssh,因为是4台服务器,为了避免每个服务器都生成ssh密钥,此处在一台服务器生成ssh密钥,然后4台服务器共用此密钥

ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.11.194
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.11.195:/root/.ssh/
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.11.196:/root/.ssh/
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.11.197:/root/.ssh/


下载MHA安装包进行安装,安装包有如下两个包,node包和manager包:



MHA master需要安装master包和node包,其他节点只需要安装node包即可

数据库服务器master节点配置mysql配置文件如下:

[mysqld]
skip_name_resolve=ON
innodb_file_per_table=ON

server_id=13       #配置服务器id
relay_log=relay-log    #开启中继日志,因为master可能会变成slave
log_bin=master-log    #开启二进制日志


slave节点配置文件如下:

[mysqld]
skip_name_resolve=ON
innodb_file_per_table=ON

server_id=11
relay_log=relay-log
log-bin=master-log
relay_log_purge=0    #关闭中继日志裁剪,因为其他slave可能会从此服务器同步relay日志
read_only=1        #开启只读功能,当其提升为master之后该功能会自动关闭


配置好mysql主从复制,所有数据库节点安装MHA node安装包。MHA需要mysql提前配置好主从复制,配置文档见此博客:http://www.cnblogs.com/stacks/p/7171648.html

manager创建/etc/masterha/app1.cnf,文件名随便起,添加如下内容:

[server default]
user=mhaadmin    #MHA连接mysql的管理用户
password=1234567a    #MHA连接mysql的管理用户密码
manager_workdir=/data/masterha/app1    #MHA工作目录
manager_log=/data/masterha/app1/manager.log    #MHA日志存储路径
remote_workdir=/data/masterha/app1    #其他节点MHA工作路径
ssh_user=root    #ssh用户
repl_user=repluser    #mysql复制用户
repl_password=1234567a    #mysql复制用户密码
ping_interval=1    #每个多久检测一下master是否在线

[server1]
hostname=192.168.11.194
candidate_master=1  #是否允许成为master#

[server2]
hostname=192.168.11.195
candidate_master=1

[server3]
hostname=192.168.11.196
candidate_master=1


进行ssh检测

masterha_check_ssh --conf=/etc/masterha/app1.cnf


进行复制功能检测

masterha_check_repl --conf=/etc/masterha/app1.cnf


启动mha服务

nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /data/masterha/app1/manager.log &


注意:

当master发生变更之后此脚本会自动退出,当修复完故障服务器之后此脚本需要重新启动



发生master变更,修复前master服务器

发生master变更,修复前master服务器

恢复数据库

mysql配置文件添加read_only=1和relay_log_purge=0

通过change master to成为主节点的从节点并开启slave功能

修复完成开启mha服务

总结

MHA虽然可以检测master并自动切换,但是其却不能够切换master对外提供服务的ip,此功能需要手动写脚本来实现,MHA支持导入此类脚本进行ip地址变更。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: