搭建mysql高可用集群之MHA

一、简介

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
  MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。

二、MHA 服务工作流程

1)把宕机的master二进制日志保存下来。
2)找到binlog位置点最新的slave。
3)在binlog位置点最新的slave上用relay log(差异日志)修复其它slave。
4)将宕机的master上保存下来的二进制日志恢复到含有最新位置点的slave上。
5)将含有最新位置点binlog所在的slave提升为master。
6)将其它slave重新指向新提升的master,并开启主从复制。

三.MHA架构图

image.png

四.MHA工具介绍

MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下:

masterha_check_ssh #检查MHA的
ssh-key masterha_check_repl #检查主从复制情况
masterha_manger #启动MHA
masterha_check_status #检测MHA的运行状态
masterha_master_monitor #检测master是否宕机
masterha_master_switch #手动故障转移
masterha_conf_host #手动添加server信息
masterha_secondary_check #建立TCP连接从远程服务器
masterha_stop #停止MHA

五.MHA的搭建

1、搭建MHA架构图

image.png

2、相关配置

192.168.0.4 manager
192.168.0.5 node1
192.168.0.6 node2
192.168.0.7 node3

为了方便操作,每个机器都做好解析vim /etc/hosts

3、部署一主多从的mysql集群

这里我们用192.168.0.5 node1 为集群的主节点

  • 在主节点上操作
[root@node1 ~]# vim /etc/my.cnf
    [mysqld]
    server-id = 1               //复制集群中的各节点的id均必须唯一
    log-bin = master-log        //开启二进制日志
    relay-log = relay-log       //开启中继日志
    skip_name_resolve           //关闭名称解析(非必须)
[root@node1 ~]# systemctl restart mysqld
# 进入主 mysql中添加主从同步时使用的用户
mysql> grant replication slave,replication client on *.* to 'slave'@'192.168.0.%' identified by 'keer';
mysql> flush privileges;
mysql> show master status\G
  • 所用从节点上操作
[root@node2 ~]# vim /etc/my.cnf
    [mysqld]
    server-id = 2               //复制集群中的各节点的id均必须唯一;
    relay-log = relay-log       //开启中继日志
    log-bin = master-log        //开启二进制日志
    read_only = ON              //启用只读属性
    relay_log_purge = 0         //是否自动清空不再需要中继日志
    skip_name_resolve           //关闭名称解析(非必须)
    log_slave_updates = 1       //使得更新的数据写进二进制日志中
[root@slave1 ~]# systemctl restart mysqld
# 进入从mysql服务器中,填写主从的配置
mysql> change master to master_host='node1', 
    -> master_user='slave', 
    -> master_password='keer',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=415;
mysql> start slave;
mysql> show slave status\G

请确保server-id 的不同

4、安装配置MHA

  • 准备 ssh 互通环境

在所有服务器中执行

[root@manager ~]# ssh-keygen -t rsa
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager

在manager主机上执行

scp authorized_keys root@node1:~/.ssh/
scp authorized_keys root@node2:~/.ssh/
scp authorized_keys root@node3:~/.ssh/

这样我们就完成了四台机器之间基于ssh 互相通信,以实现远程控制及数据管理功能。简单起见,可在Manager节点生成密钥对儿,并设置其可远程连接本地主机后, 将私钥文件及authorized_keys文件复制给余下的所有节点即可。

  • 安装 MHA包

https://directory.fsf.org/wiki/Mha4mysql-manager

下载MHA manager 和node 包
mha4mysql-manager-0.580.el7.centos.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm

yum -y install mha4mysql-manager-0.580.el7.centos.noarch.rpm
yum -y install  mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  • 定义 MHA 管理配置文件
    为MHA专门创建一个管理用户, 方便以后使用, 在mysql的主节点上, 三个节点自动同步:
[root@manager ~]# mkdir /etc/masterha
[root@manager ~]# vim /etc/masterha/app1.cnf
[server default]            //适用于server1,2,3个server的配置
user=mhaadmin               //mha管理用户
password=mhapass            //mha管理密码
manager_workdir=/etc/masterha/app1      //mha_master自己的工作路径
manager_log=/etc/masterha/manager.log   // mha_master自己的日志文件
remote_workdir=/mydata/masterha/app1        //每个远程主机的工作目录在何处
ssh_user=root               // 基于ssh的密钥认证
repl_user=slave             //数据库用户名
repl_password=keer      //数据库密码
ping_interval=1             //ping间隔时长
[server1]                   //节点1
hostname=192.168.0.5    //节点1主机地址
ssh_port=22                 //节点1的ssh端口
candidate_master=1          //主节点
[server2]
hostname=192.168.0.6
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.0.7
ssh_port=22
candidate_master=1
  • 对三个节点进行检测
    1、检测各节点间 ssh 互信通信配置是否 ok
[root@manager ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf

如果最后一行显示为[info]All SSH connection tests passed successfully.则表示成功。

2、检查管理的MySQL复制集群的连接配置参数是否OK

[root@manager ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf

最后出现 MySQL Replication Health is OK.则表示成功

  • 启动 MHA
    我们在 manager 节点上执行以下命令来启动 MHA:
[root@manager ~]# nohup masterha_manager -conf=/etc/masterha/app1.cnf &> /etc/masterha/manager.log &

启动成功以后,我们来查看一下 master 节点的状态:

[root@manager ~]# masterha_check_status -conf=/etc/masterha/app1.cnf
mha (pid:7598) is running(0:PING_OK), master:192.168.0.4

关闭MHA的命令

root@manager ~]# masterha_stop -conf=/etc/masterha/app1.cnf
  • 测试MHA的故障转移
    在mysql 主服务器node1中
[root@node1 ~]# systemctl stop mysqld 

在manager中查看日志

tail -200 /etc/master/manager.log
.....
.....
Master 192.168.0.5(192.168.0.5:3306) is down!

Check MHA Manager logs at node1:/etc/mha_master/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 192.168.0.6(192.168.0.6:3306) has all relay logs for recovery.
Selected 192.168.0.6(192.168.0.6:3306) as a new master.
192.168.0.6(192.168.0.6:3306): OK: Applying all logs succeeded.
192.168.0.7(192.168.0.7:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.0.7(192.168.0.7:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.0.6(192.168.0.6:3306)
192.168.0.6(192.168.0.6:3306): Resetting slave info succeeded.
Master failover to 192.168.0.6(192.168.0.6:3306) completed successfully.

从中我们可以看到 检测到192.168.0.5 节点故障,然后执行了故障 转移,将192.168.0.6提升为了主节点。

注意,故障转移完成后, manager将会自动停止, 此时使用 masterha_check_status 命令检测将会遇到错误提示, 如下所示:

[root@manager ~]# masterha_check_status -conf=/etc/masterha/app1.cnf
mha is stopped(2:NOT_RUNNING).
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342