MHA是一款开源的MySQL高可用程序,为MySQL主从复制架构提供了节点故障转移功能,当

master发生故障时MHA会自动提升拥有最新数据的slave节点成为新的主节点,还提供了master节

点的在线切换功能,即按需切换master/slave节点

Manager会时刻监视主节点,并把主节点的二进制日志保存在本地一份,一旦主节点宕机了,它会找一台拥有最新数据的slave节点,

并通过本地的二进制日志副本,将此slave节点还原到宕机前的一刻,如何找到拥有最新数据的slave节点是通过部署在每台MySQL上

的MHA node实现的(具体实现过程是通过MHA node自带的4个脚本)

MHA是建立在主从架构之上的,因此主从架构得事先配置好,当主节点宕机,任何一个从节点都有可能提升为主节点,因此每个从节点

都得开启二进制日志,而以前的主节点从新上线时,会成为新的从节点,所以在主节点之上也得配置中继日志

下载地址:

http://www.mysql.gr.jp/frame/modules/bwiki/index.php?plugin=attach&pcmd=open&file=mha4mysql-manager-0.56-0.el6.noarch.rpm&refer=matsunobu

wget http://www.mysql.gr.jp/frame/modules/bwiki/index.php?plugin=attach&pcmd=open&file=mha4mysql-node-0.56-0.el6.noarch.rpm&refer=matsunobu

一共使用4台虚拟机做测试,一台manager(192.168.238.223),一台主(192.168.238.224 ),两台从(192.168.238.225-

226),主从架构配置上篇博文有介绍这里就不说了,建议在每台mariadb的配置文件中设置skip_name_resolve=ON (禁用DNS主机名查找)

不过在两台从节点的配置文件中必须添加relay_log_purge=0(将中继日志重放完成自动删除中继日志的功能关闭),这是因为

manager要根据中继日志判断从节点的复制进度,从而在主节点宕机时提升拥有最新数据的从节点为主节点

以下操作在centos6上完成

1.在主节点授权一个用户,使manager能使用该用户在各主机上进行必要的管理操作:

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

flush privileges;

2.在MHA的架构中每个节点都必须要能同过ssh协议的密钥方式通信(即基于ssh协议通信无需手动输入密码)

  (1)为了方便在某个主机上生成一对ssh密钥,将该对密钥通过scp命令放置在各节点的相应目录下

     ssh-keygen -t rsa -P '' (-t 指使用rsa加密方式生成密钥对,-P ‘’ 指不对生成的私钥文件加密)

     如果此命令是root用户运行的,则私钥默认保存在/root/.ssh/id_rsa文件中,公钥保存在/root/.ssh/id_rsa.pub文件中

  (2)所有节点都是用相同的公钥和私钥,将公钥都追加到/root/.ssh/authorized_keys文件中

     cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

   (3) 将id_rsa,id_rsa.pub文件和authorized_keys文件都复制到其他节点的对应目录下

     例: scp -p .ssh/authorized_keys .ssh/id_rsa 192.168.238.225:/root/.ssh/

    为了安全建议将authorized_keys文件权限改为600权限,使用scp命令复制时使用-p选项来保留文件权限

接下来在各节点安装好从上面地址下载下来的rpm包,manager只安装在一台单独的服务器上,安装manager,要先配置好epel源

而且要先安装node包(上面下载的包在centos7上也可用)

定义application配置文件:mkdir /etc/mha  vim /etc/mha/cluster1.cnf

[server default]
user=mha

password=mhapass

manager_workdir=/data/masterha/app1       (manager工作目录,这个目录要事先创建)

manager_log=/data/mastermha/app1/manager.log      (manager 日志)

remote_workdir=/data/mastermha/app1      (manager 远程工作目录)

master_binlog_dir=/mydata/data     (指定主节点上二进制日志放置的目录)

ssh_user=root    

repl_user=repl

repl_password=replpass

ping_interval=1      (对主节点的检测时间间隔使用 ping)

[server1]
hostname=192.168.238.224

[server2]
hostname=192.168.238.225

candidate_master=1(如果主节点宕机,此节点会被提升为主节点即使此节点的不拥有最新数据,建议此节点与主节点配置半同步模式)

[server3]
hostname=192.168.238.226

使用masterha_check_ssh --conf=/etc/mha/cluster1.cnf检测各节点间ssh通信是否ok

最后看到All SSH connection tests passed successfully.表示成功

使用masterha_check_repl --conf=/etc/mha/cluster1.cnf检测主从复制是否ok

最后看到MySQL Replication Health is OK.表示成功

启动MHA: masterha_manager --conf=/etc/mha/cluster1.cnf  (在前台启动测试的目的用)

关掉主节点,查看指定的从节点是否被提升为主节点

检测MHA状态命令masterha_check_status --conf=/etc/mha/cluster1.cnf

停止MHA:masterha_stop --conf=/etc/mha/cluster1.cnf

启动MHA:nohup masterha_manager --conf=/etc/mha/cluster1.cnf > /data/masterha/app1/manager.log 2>&1 &

nohup 表示与当前终端剥离,关闭当前终端MHA依然运行

MHA manager发现主节点宕机时会提升一个从节点为主,但自己也会自动下线,必须手动从新启动MHA,手动启动的过程要通过从节

点的数据备份和从新导入到新的从节点等就绪工作才能从新启动MHA

当从节点提升为主时,manager会自动关闭从节点read_only

问题:当主节点切换,ip地址也会跟着切换,前端的正在进行的写操作将无法进行,如何做到ip地址不会跟着转换

MHA学习笔记的更多相关文章

  1. Mysql多实例安装+主从复制+读写分离 -学习笔记

    Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...

  2. MySQL 学习笔记 (一)

    1.InnoDB and Online DDL ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE; ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  7. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  8. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  9. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

随机推荐

  1. 二叉树的JAVA实现-二叉树的增删改查CRUD

    package org.lyk.interfaces; import java.util.List; public interface IBiTree<T extends Comparable& ...

  2. Java 开发 gRPC 服务和客户端

    新建一个普通的Maven项目: 配置pom文件,导入gRPC的依赖和插件 pom 中增加外部依赖 <dependency>     <groupId>io.grpc</g ...

  3. HYSBZ 1061 志愿者招募 【最小费用流】【差分】【最小费用流模板】

    #include<stdio.h> #include<queue> #define MAXN 1003 #define MAXM 10002*4 #define INF 100 ...

  4. task中的一些属性

    1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“tru ...

  5. nginx 状态码整理

    状态代码    状态信息     含义 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新)101 Switching Protocols 服务器将遵从 ...

  6. C++编译错误syntax error : identifier 'THIS_FILE' 解决方法

    你到代码里搜索 THIS_FILE看是不是它定义在别的头文件前面了,如果是,把它们的头文件紧跟到Stdafx.h后面 我遇到过这问题,这样搞定的 今天遇到个编译错误:..\vc98\include\n ...

  7. C++静态代码分析工具推荐——PVS-Studio

    长假归来,最近一直没更新,节前本来就想写这篇了,一直到今天才有时间. 关于静态代码分析在维基百科上可以查到很详细的介绍:https://en.wikipedia.org/wiki/List_of_to ...

  8. Swift学习(三)类型推导&基本运算&分支&循环

    一.Swift中类型推导&基本运算 Swift中类型推导 如果一个标识符在定义时有直接赋值,那么可以根据后面赋值的类型,来推导出前面标识符的类型,这样前面标识符的(:类型)可以省略 查看标识符 ...

  9. js 数组对象,数组的使用

    var a =new Array(1,2,3,4,'a','b','c',{x:1,y:2}); alert(a[7].x); //数组之中可以定义数组. var b=['a','b','c']; c ...

  10. django中时区设置

    通过django中的models更新数据库的DateTimeField字段,发现有错误,于是更改了: TIME_ZONE = 'Asia/Shanghai' 结果,还是不正确,于是把: USE_TZ ...