MHA是一种方便简单可靠的MySQL高可用架构,具体的介绍我在这里就不多说了,下面是我在网上找的一个教程,我在此基础上进行了一些修改:

大致步骤

  1. (一)、环境介绍
  2. (二)、用ssh-keygen实现四台主机之间相互免密钥登录
  3. (三)、安装MHAmha4mysql-nodemha4mysql-managerperl环境包
  4. (四)、建立masterslave1slave2之间主从复制
  5. (五)、管理机manager上配置MHA文件
  6. (六)、masterha_check_ssh工具验证ssh信任登录是否成功
  7. (七)、masterha_check_repl工具验证mysql复制是否成功
  8. (八)、启动MHA manager,并监控日志文件
  9. (九)、测试master宕机后,是否会自动切换

(一)环境介绍

1.主机部署

CentOS 7改主机名

  1. hostnamectl set-hostname master
  2.  
  3. 192.168.56.121 master
  4. 192.168.56.122 slave1 #备用master
  5. 192.168.56.123 slave2
  6. 192.168.56.124 manager

将ip和域名配置到/etc/hosts文件中

尝试在各主机上的防火墙上加上端口的允许

  1. iptables -I INPUT -s 0/0 -p tcp --dport 3306 -j ACCEPT

这条规则的意思是,想要在输入数据INPUT中,protocol为tcp/IP的方式,访问端口3306,都会被允许的

  1. iptables -L -n|grep 3306
  2. ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306

(二)用ssh-keygen实现四台主机之间相互免密钥登录

1.生成密钥

[master,slave1,slave2,manager]

  1. ssh-keygen -t rsa

[slave1,slave2,manager]

  1. scp .ssh/id_rsa.pub master:/root/.ssh/slave1.pub
  2. scp .ssh/id_rsa.pub master:/root/.ssh/slave2.pub
  3. scp .ssh/id_rsa.pub master:/root/.ssh/manager.pub

2.在主机上用cat xxx >> authorized_keys导入公钥到/root/.ssh/authorized_keys文件中

[master]

  1. cat ~/.ssh/*.pub>>~/.ssh/authorized_keys
  2. scp ~/.ssh/authorized_keys slave1:/root/.ssh/authorized_keys
  3. scp ~/.ssh/authorized_keys slave2:/root/.ssh/authorized_keys
  4. scp ~/.ssh/authorized_keys manager:/root/.ssh/authorized_keys

(三)安装MHAmha4mysql-node,mha4mysql-manager 软件包

1.安装MHAmha4mysql-node

  1. [manager,master,slave1,slave2]
  2.  
  3. yum -y install perl-DBD-MySQL
  4. yum -y install perl-Config-Tiny
  5. yum -y install perl-Log-Dispatch
  6. yum -y install perl-Parallel-ForkManager
  7. mha4mysql-node-0.55-0.el6.noarch.rpm

2.安装mha4mysql-manager

  1. [manager]
  2.  
  3. yum -y install perl
  4. yum -y install cpan
  5. rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm

缺啥,yum install xxx 啥就行。

(四)、建立master,slave1,slave2之间主从复制

(五)、管理机manager上配置MHA文件

  1. [manager]

1.创建目录

  1. mkdir -p /masterha/app1
  2. mkdir /etc/masterha
  3. vi /etc/masterha/app1.cnf
  4.  
  5. [server default]
  6. user=root
  7. password=root
  8. manager_workdir=/masterha/app1
  9. manager_log=/masterha/app1/manager.log
  10. remote_workdir=/masterha/app1
  11. ssh_user=root
  12. repl_user=rep
  13. repl_password=repl
  14. ping_interval=1
  15. [server1]
  16. hostname=192.168.56.122
  17. master_binlog_dir=/var/lib/mysql
  18. candidate_master=1
  19. #relay_log_purge=0
  20. [server2]
  21. hostname=192.168.56.121
  22. master_binlog_dir=/var/lib/mysql
  23. candidate_master=1
  24. [server3]
  25. hostname=192.168.56.123
  26. master_binlog_dir=/var/lib/mysql
  27. no_master=1
  28. #relay_log_purge=0

(六)、masterha_check_ssh工具验证ssh信任登录是否成功

  1. [manager]
  2.  
  3. masterha_check_ssh --conf=/etc/masterha/app1.cnf
  4. [root@manager ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
  5. Thu Feb 23 12:00:24 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  6. Thu Feb 23 12:00:24 2017 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
  7. Thu Feb 23 12:00:24 2017 - [info] Reading server configurations from /etc/masterha/app1.cnf..
  8. Thu Feb 23 12:00:24 2017 - [info] Starting SSH connection tests..
  9. Thu Feb 23 12:00:25 2017 - [debug]
  10. Thu Feb 23 12:00:24 2017 - [debug] Connecting via SSH from root@192.168.56.122(192.168.56.122:22) to root@192.168.56.121(192.168.56.121:22)..
  11. Thu Feb 23 12:00:25 2017 - [debug] ok.
  12. Thu Feb 23 12:00:25 2017 - [debug] Connecting via SSH from root@192.168.56.122(192.168.56.122:22) to root@192.168.56.123(192.168.56.123:22)..
  13. Thu Feb 23 12:00:25 2017 - [debug] ok.
  14. Thu Feb 23 12:00:25 2017 - [debug]
  15. Thu Feb 23 12:00:25 2017 - [debug] Connecting via SSH from root@192.168.56.121(192.168.56.121:22) to root@192.168.56.122(192.168.56.122:22)..
  16. Warning: Permanently added '192.168.56.121' (ECDSA) to the list of known hosts.
  17. Thu Feb 23 12:00:25 2017 - [debug] ok.
  18. Thu Feb 23 12:00:25 2017 - [debug] Connecting via SSH from root@192.168.56.121(192.168.56.121:22) to root@192.168.56.123(192.168.56.123:22)..
  19. Thu Feb 23 12:00:25 2017 - [debug] ok.
  20. Thu Feb 23 12:00:26 2017 - [debug]
  21. Thu Feb 23 12:00:25 2017 - [debug] Connecting via SSH from root@192.168.56.123(192.168.56.123:22) to root@192.168.56.122(192.168.56.122:22)..
  22. Warning: Permanently added '192.168.56.123' (ECDSA) to the list of known hosts.
  23. Thu Feb 23 12:00:26 2017 - [debug] ok.
  24. Thu Feb 23 12:00:26 2017 - [debug] Connecting via SSH from root@192.168.56.123(192.168.56.123:22) to root@192.168.56.121(192.168.56.121:22)..
  25. Thu Feb 23 12:00:26 2017 - [debug] ok.
  26. Thu Feb 23 12:00:26 2017 - [info] All SSH connection tests passed successfully.
  27. [root@manager ~]#

(七)、masterha_check_repl工具验证mysql复制是否成功

  1. [manager]
  2.  
  3. masterha_check_repl --conf=/etc/masterha/app1.cnf
  4.  
  5. [root@manager mysql]# masterha_check_repl --conf=/etc/masterha/app1.cnf
  6. Thu Feb 23 14:37:05 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  7. Thu Feb 23 14:37:05 2017 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
  8. Thu Feb 23 14:37:05 2017 - [info] Reading server configurations from /etc/masterha/app1.cnf..
  9. Thu Feb 23 14:37:05 2017 - [info] MHA::MasterMonitor version 0.55.
  10. Thu Feb 23 14:37:05 2017 - [info] Dead Servers:
  11. Thu Feb 23 14:37:05 2017 - [info] Alive Servers:
  12. Thu Feb 23 14:37:05 2017 - [info] master(192.168.56.121:3306)
  13. Thu Feb 23 14:37:05 2017 - [info] slave1(192.168.56.122:3306)
  14. Thu Feb 23 14:37:05 2017 - [info] slave2(192.168.56.123:3306)
  15. Thu Feb 23 14:37:05 2017 - [info] Alive Slaves:
  16.  
  17. .......此处省略
  18.  
  19. Thu Feb 23 14:37:08 2017 - [info] Connecting to root@192.168.56.123(slave2:22)..
  20. Creating directory /masterha/app1.. done.
  21. Checking slave recovery environment settings..
  22. Opening /var/lib/mysql/relay-log.info ... ok.
  23. Relay log found at /tmp, up to mysql-relay-bin.000004
  24. Temporary relay log file is /tmp/mysql-relay-bin.000004
  25. Testing mysql connection and privileges..Warning: Using a password on the command line interface can be insecure.
  26. done.
  27. Testing mysqlbinlog output.. done.
  28. Cleaning up test file(s).. done.
  29. Thu Feb 23 14:37:08 2017 - [info] Slaves settings check done.
  30. Thu Feb 23 14:37:08 2017 - [info]
  31. master (current master)
  32. +--slave1
  33. +--slave2
  34.  
  35. Thu Feb 23 14:37:08 2017 - [info] Checking replication health on slave1..
  36. Thu Feb 23 14:37:08 2017 - [info] ok.
  37. Thu Feb 23 14:37:08 2017 - [info] Checking replication health on slave2..
  38. Thu Feb 23 14:37:08 2017 - [info] ok.
  39. Thu Feb 23 14:37:08 2017 - [warning] master_ip_failover_script is not defined.
  40. Thu Feb 23 14:37:08 2017 - [warning] shutdown_script is not defined.
  41. Thu Feb 23 14:37:08 2017 - [info] Got exit code 0 (Not master dead).
  42.  
  43. MySQL Replication Health is OK.

(八)、启动MHA manager,并监控日志文件

  1. [manager]
  2.  
  3. masterha_manager --conf=/etc/masterha/app1.cnf
  4. tail -f /masterha/app1/manager.log

(九)测试master(宕机后,是否会自动切换

1.停掉master上的mysql服务

  1. [master]
  2.  
  3. [root@master ~]# service mysql stop
  4. Shutting down MySQL..... SUCCESS!
  5. [root@master ~]#
  6. [manager]

2.宕掉master后,/masterha/app1/manager.log文件显示:

  1. tail -f /masterha/app1/manager.log

日志文件显示:

  1. ----- Failover Report -----
  2.  
  3. app1: MySQL Master failover master to slave1 succeeded
  4.  
  5. Master master is down!
  6.  
  7. Check MHA Manager logs at manager:/masterha/app1/manager.log for details.
  8.  
  9. Started automated(non-interactive) failover.
  10. The latest slave slave1(192.168.56.122:3306) has all relay logs for recovery.
  11. Selected slave1 as a new master.
  12. slave1: OK: Applying all logs succeeded.
  13. slave2: This host has the latest relay log events.
  14. Generating relay diff files from the latest slave succeeded.
  15. slave2: OK: Applying all logs succeeded. Slave started, replicating from slave1.
  16. slave1: Resetting slave info succeeded.
  17. Master failover to slave1(192.168.56.122:3306) completed successfully.

上面的结果表明master成功切换。

切换过程中需要关注的几个问题

1.切换过程会自动把read_only关闭

2.切换之后需要删除手工删除/masterha/app1/app1.failover.complete,才能进行第二次测试

3.一旦发生切换管理进程将会退出,无法进行再次测试,需将故障数据库加入到MHA环境中来

4.原主节点重新加入到MHA时只能设置为slave,在

  1. change master to master_host='192.168.56.122',
  2. master_user='repl',
  3. master_password='repl',
  4. master_log_file='mysql-bin.000010',
  5. master_log_pos=120;

之前需要先 reset slave

5.关于ip地址的接管有几种方式,这里采用的是MHA自动调用IP别名的方式,好处是在能够保证数据库状态与业务IP切换的一致性。启动管理节点 之后 VIP会自动别名到当前主节点上,Keepalived也只能做到对3306的健康检查,但是做不到比如像MySQL复制中的Slave-SQL、 Slave-IO进程的检查,容易出现对切换的误判。

6.注意:二级从服务器需要将log_slave_updates打开

7.手工切换需要先定义好master_ip_online_change_script脚本,不然只会切换mysql,IP地址不会绑定上去,可以根据模板来配置该脚本

8.通过设置no_master=1可以让某一个节点永远不成为新的主节点

恢复集群运行

①在manager上删除app1.failover.complete文件

  1. cd /masterha/app1
  2. rm -f app1.failover.complete

②原master主节点服务启动

  1. service mysql start

③ manager管理节点,检查同步报错

  1. masterha_check_repl --conf=/etc/masterha/app1.cnf
  2. Thu Feb 23 15:00:56 2017 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln604] There are 2 non-slave servers! MHA manages at most one non-slave server. Check configurations.

⑤查看现在的slave1上的信息

  1. mysql> show master status\G
  2. *************************** 1. row ***************************
  3. File: mysql-bin.000010
  4. Position: 120
  5. Binlog_Do_DB:
  6. Binlog_Ignore_DB:
  7. Executed_Gtid_Set:
  8. 1 row in set (0.00 sec)

④配置187节点mysql为新的slave,并启动同步进程

  1. change master to master_host='192.168.56.122',
  2. master_user='repl',
  3. master_password='repl',
  4. master_log_file='mysql-bin.000010',
  5. master_log_pos=120;
  6. mysql> start slave;

再次在管理节点上检查同步状态成功:

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

需注意:按如上步骤操作后,此时121节点作为slaver已加入到集群中,但是宕机这段时间122、123中新产生的数据在121中没有,所以还需要先从主节点备份导入最新的数据再启动同步

⑤启动MHA
nohup masterha_manager –conf=/etc/masterha/app1.cnf > /mha/app1/mha_manager.log &1 &

回切:
同样的道理,以上步骤配置无问题的话停止当前master的MySQL进程,MHA可直接切换master至原节点

来源:http://blog.itpub.net/24742969/viewspace-2134542/

MHA搭建及故障维护的更多相关文章

  1. mysql高可用架构MHA搭建(centos7+mysql5.7.28)

    无论是传统行业,还是互联网行业,数据可用性都是至关重要的,虽然现在已经步入大数据时代,nosql比较流行,但是作为数据持久化及事务性的关系型数据库依然是项目首选,比如mysql. 现在几乎所有的公司项 ...

  2. 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法

    非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...

  3. 搭建Windows故障转移群集

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/windows 概述 本章内容主要讲述搭建windows故障转移群集 环境: 域服务器:windows server 2008 R ...

  4. MySQL MHA 搭建&测试(环境:CentOS7 + MySQL5.7.23)

    MySQL MHA架构介绍: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Face ...

  5. MySQL MHA 搭建&测试

    一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...

  6. MySQL高可用方案--MHA部署及故障转移

    架构设计及必要配置 主机环境 IP                 主机名             担任角色 192.168.192.128  node_master    MySQL-Master| ...

  7. MySQL MHA搭建

    MHA算是业内比较成熟的MySQL高可用解决方案,在MySQL故障切换过程中,MHA能做到自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义 ...

  8. 8.3 MHA 搭建

    操作步骤 1.配置主从 1.1 master /etc/my.cnf server-id log-bin skip-name-resolve 1.2 master 建立repl用户 grant rep ...

  9. MySQL 有关MHA搭建与切换的几个错误log

    1:masterha_check_repl 副本集方面报错  replicates is not defined in the configuration file! 具体信息如下: # /usr/l ...

随机推荐

  1. Java实现18位身份证校验代码

    import java.util.Scanner; /** * 18位身份证校验 * @author [J.H] * */ public class Test { // 身份证校验 public st ...

  2. CentOS7上安装google谷歌浏览器

      1.首先进入根目录,然后进入etc/yum.repos.d目录下,创建google-chrome.repo文件 cd / cd etc/yum.repos.d vim google-chrome. ...

  3. SyntaxError Generator expression must be parenthesized

    环境: Windows10 python3.7.0 Django1.11.15 异常 启动Django时抛出以下异常: Unhandled exception in thread started by ...

  4. tcpsock.v2 与 ecocache

    因为很不满意 tcpsock 的设计与实现,及有意专为譬如游戏服务器端开发设计一套 TCP 网络库,所以年初即有了 tcpsock.v2 的开发计划,于是粗略整理出了以下几条目标计划: 1) TcpC ...

  5. gcp – 源于CP的高级命令行文件拷贝工具

    作者:linux 出处:http://linux.cn/thread/11868/1/1/ gcp – 源于CP的高级命令行文件拷贝工具 几周前,我们讨论了高级拷贝(修改于cp命令,让其可以显示复制进 ...

  6. BZOJ 1009 [HNOI2008]GT考试 (KMP+矩阵乘法)

    ---恢复内容开始--- 题目大意:给定一个由数字构成的字符串A(len<=20),让你选择一个长度为n(n是给定的)字符串X,一个合法的字符串X被定义为,字符串X中不存在任何一段子串与A完全相 ...

  7. koa,express,node 通用方法连接MySQL

    这个教程不管node,express,koa都可以用下面方法连接,这里用koa做个参考 这个教程的源码地址: https://github.com/xiaqijian/... 新建文件目录,我是这样子 ...

  8. js滚动事件实现滚动触底加载

    移动端触底加载时前端开发过程中常用功能,主要是通过三个值的大小来进行判断: 首先介绍jquery的写法,代码如下: $(window).scroll(function(){ var windowH=$ ...

  9. apche本地测试,无法访问此网站

  10. ASP.NET-后台cookie与前台JQUERY解析cookie

    在controller中给cookie赋值 HttpCookie cookie =newHttpCookie("pageInfo"); cookie["page_inde ...