mysql mha 主从自动切换 高可用

mha(Master High Availability)目前在MySQL多服务器(超过二台),高可用方面是一个相对成熟的解决方案。

一,什么是mha,有什么特性

1. 主服务器的自动监控和故障转移

MHA监控复制架构的主服务器,一旦检测到主服务器故障,就会自动进行故障转移。即使有些从服务器没有收到最新的relay log,MHA自动从最新的从服务器上识别差异的relay log并把这些日志应用到其他从服务器上,因此所有的从服务器保持一致性了。MHA通常在几秒内完成故障转移,9-12秒可以检测出主服务器故障,7-10秒内关闭故障的主服务器以避免脑裂,几秒中内应用差异的relay log到新的主服务器上,整个过程可以在10-30s内完成。还可以设置优先级指定其中的一台slave作为master的候选人。由于MHA在slaves之间修复一致性,因此可以将任何slave变成新的master,而不会发生一致性的问题,从而导致复制失败。

2. 交互式主服务器故障转移

可以只使用MHA的故障转移,而不用于监控主服务器,当主服务器故障时,人工调用MHA来进行故障故障。

3. 非交互式的主故障转移

不监控主服务器,但自动实现故障转移。这种特征适用于已经使用其他软件来监控主服务器状态,比如heartbeat来检测主服务器故障和虚拟IP地址接管,可以使用MHA来实现故障转移和slave服务器晋级为master服务器。

4. 在线切换主从服务器

在许多情况下,需要将现有的主服务器迁移到另外一台服务器上。比如主服务器硬件故障,RAID控制卡需要重建,将主服务器移到性能更好的服务器上等等。维护主服务器引起性能下降,导致停机时间至少无法写入数据。另外,阻塞或杀掉当前运行的会话会导致主主之间数据不一致的问题发生。MHA提供快速切换和优雅的阻塞写入,这个切换过程只需要0.5-2s的时间,这段时间内数据是无法写入的。在很多情况下,0.5-2s的阻塞写入是可以接受的。因此切换主服务器不需要计划分配维护时间窗口(呵呵,不需要你在夜黑风高时通宵达旦完成切换主服务器的任务)。

5.MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)

要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,管理节点可以和master在一台机器上。所以如果你只有二台机器的话,heartbeat,keepalive等都是不错的选择了。

6.MHA比较灵活,可以写脚本,来进行故障转移,或者主从切换等。

7.mha出现故障后,配置文件会被修改掉,这一点,让我觉得很搞笑,如果故障转移需要重新修改配置文件,重新启动masterha_manager服务.

二,服务器说明

查看复制打印?

  1. 192.168.10.103 masters   //主
  2. 192.168.10.209 slave1    //从
  3. 192.168.10.219 slave2    //从(主备)
  4. 192.168.10.220 manage    //管理节点

一主二从,一个管理节点,将上面的内容写入到每台/etc/hosts当中

三,服务器间,无密码ssh登录

查看复制打印?

  1. # ssh-keygen -t rsa
  2. # ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
  3. # ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
  4. # ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
  5. # ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

上面有5个命令,如果在103机器上,103本身不需要执行ssh-copy-id。copy完了以后,ssh测试一下,机器间切换是不是需要密码了。

四,安装mha

1,下载mha

https://code.google.com/p/mysql-master-ha/downloads/list

2,所有节点都要安装

  1. # yum install -y perl-DBD-MySQL
  2. # rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm

3,管理节点

  1. # yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
  2. # rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm

注意:manager和node节点的版本可以不一样

五,配置mysql replication

请参考:mysql replication 主从(master-slave)同步

要符合mha的配置,根这篇文章有点不同。

1,主从的配置都要有

查看复制打印?

  1. binlog-do-db=test
  2. replicate-do-db=test

一般情况下,主服务器需要包含binlog-do-db=test,从服务器需要包含replicate-do-db=test,这样主从就可以同步了。但是只是这样配置的话,会报以下错误

All log-bin enabled servers must have same binlog filtering rules (same binlog-do-db and binlog-ignore-db). Check SHOW MASTER STATUS output and set my.cnf correctly.

在摸索这一块配置的时候,浪费很多时间,我一直以为,上面英文的意思是说,主从同步的数据库要一样,其实不是,而是配置文件中,配置数据库这一块要一样。

2,从服务器,要加上relay_log_purge=0,不加的话,会报出warning,relay_log_purge=0 is not set on slave

六,corosync pacemaker mysql replication配置

请参考:corosync pacemaker mysql replication 实现高可用

配置corosync pacemaker的目的,其实就是为得到一个虚拟IP,连主和主备中的一个,我可以通过虚拟IP连接,这样做的好处就是,如果主down机了,我通过虚拟IP可以连接主备,如果主修改好了,那么虚拟IP可以连接到主,而不需要去修改代码。

七,配置mha manage

1,添加管理账号,每台机器都执行以下操作

查看复制打印?

  1. grant all privileges on *.* TO [email protected]‘192.168.%‘ IDENTIFIED BY ‘test‘;
  2. flush privileges;

2,配置/etc/mha/app1.cnf,只在管理端做,manage这台机器

查看复制打印?

  1. # mkdir /etc/mha
  2. # mkdir -p /var/log/mha/app1
  3. [[email protected] mysql]# cat /etc/mha/app1.cnf
  4. [server default]
  5. manager_log=/var/log/mha/app1/manager.log
  6. manager_workdir=/var/log/mha/app1.log
  7. master_binlog_dir=/var/lib/mysql
  8. user=mha
  9. password=test
  10. ping_interval=2
  11. repl_password=test
  12. repl_user=test
  13. ssh_user=root
  14. [server1]
  15. hostname=192.168.10.103
  16. port=3306
  17. [server2]
  18. candidate_master=1
  19. check_repl_delay=0
  20. hostname=192.168.10.219
  21. port=3306
  22. [server3]
  23. hostname=192.168.10.209
  24. port=3306

在server default中的配置,是三台机器共同的配置,也可以放到具体的server中进行定制

八,检查mha manage是不是配置成功

1,检查ssh登录

  1. # masterha_check_ssh --conf=/etc/mha/app1.cnf

如果看到,All SSH connection tests passed successfully,就说明ssh配置成功了

2,检查mysql replication是否配置成功

  1. # masterha_check_repl --conf=/etc/mha/app1.cnf

如果,出现以下内容,说明配置成功了。

mha 检验 mysql replication

3,管理端常用命令

  1. masterha_check_ssh       检查MHA的SSH配置状况
  2. masterha_check_repl      检查MySQL复制状况
  3. masterha_manger          启动MHA
  4. masterha_check_status    检测当前MHA运行状态
  5. masterha_master_monitor  检测master是否宕机
  6. masterha_master_switch   控制故障转移(自动或者手动)
  7. masterha_conf_host       添加或删除配置的server信息

九,在管理端,启动监控

查看复制打印?

  1. [[email protected] mha]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
  2. [1] 13675
  3. [[email protected] mha]# masterha_check_status --conf=/etc/mha/app1.cnf  //查看状态
  4. app1 (pid:13675) is running(0:PING_OK), master:192.168.10.103
  5. [[email protected] mha]# masterha_stop --conf=/etc/mha/app1.cnf  //关闭监控

到这儿,mha我们就配置好了。

十,说一下,我的测试过程

1,mysql -u test -p -h 192.168.10.130,通过虚拟IP登录

2,插入数据,查看一下主103有没有该数据,以及二个从服务器,是不是同步了数据。

3,在主103上,执行crm node standby,会带来几种结果。

在220机器上,/etc/mha/app1.cnf

[server1]
hostname=192.168.10.103
port=3306

这段配置消失了。

在219机器上,show master status;是有数据的,变成主机了

在209机器上,show slave status\G;中 Master_Host: 192.168.10.219,变成219了。

4,在103上面,执行# crm node online,这个时候,103既不是主,也不是从,standby后mysqld进程被关闭,所以在这儿要启动mysqld,然后在将103加入到219中。

查看复制打印?

  1. mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.10.219‘,
  2. MASTER_USER=‘test‘, MASTER_PASSWORD=‘test‘,
  3. MASTER_LOG_FILE=‘mysql-bin.000048‘,
  4. MASTER_LOG_POS=107;

5,在线切换主从

查看复制打印?

  1. [[email protected] mysql]# masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.10.103 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
  2. Wed Apr 29 04:14:55 2015 - [info] MHA::MasterRotate version 0.55.
  3. Wed Apr 29 04:14:55 2015 - [info] Starting online master switch..
  4. Wed Apr 29 04:14:55 2015 - [info]
  5. Wed Apr 29 04:14:55 2015 - [info] * Phase 1: Configuration Check Phase..
  6. Wed Apr 29 04:14:55 2015 - [info]
  7. Wed Apr 29 04:14:55 2015 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  8. Wed Apr 29 04:14:55 2015 - [info] Reading application default configurations from /etc/mha/app1.cnf..
  9. Wed Apr 29 04:14:55 2015 - [info] Reading server configurations from /etc/mha/app1.cnf..
  10. Wed Apr 29 04:14:55 2015 - [info] Current Alive Master: 192.168.10.219(192.168.10.219:3306)
  11. Wed Apr 29 04:14:55 2015 - [info] Alive Slaves:
  12. Wed Apr 29 04:14:55 2015 - [info] 192.168.10.209(192.168.10.209:3306) Version=5.1.73-log (oldest major version between slaves) log-bin:enabled
  13. Wed Apr 29 04:14:55 2015 - [info] Replicating from 192.168.10.219(192.168.10.219:3306)
  14. It is better to execute FLUSH NO_WRITE_TO_BINLOG TABLES on the master before switching. Is it ok to execute on 192.168.10.219(192.168.10.219:3306)? (YES/no): yes
  15. Wed Apr 29 04:15:10 2015 - [info] Executing FLUSH NO_WRITE_TO_BINLOG TABLES. This may take long time..
  16. Wed Apr 29 04:15:10 2015 - [info] ok.
  17. Wed Apr 29 04:15:10 2015 - [info] Checking MHA is not monitoring or doing failover
  18. 。。。。。。。。。。。。。省略了。。。。。。。。。。。。。。。

这样就切换到最原始的状态了。

时间: 2024-10-07 12:56:04

mysql mha 主从自动切换 高可用的相关文章

redis主从配置及通过keepalived实现redis自动切换高可用

一:环境介绍: Master: 192.168.1.4 Slave: 192.168.1.5 Virtural IP Address (VIP): 192.168.1.253 二:设计思路: 当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby: 当 Master 挂掉,Slave 正时, Slave接管服务,同时关闭主从复制功能: 当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Sl

MHA实现mariadb的高可用的详细步骤及配置参数详解

MHA实现mariadb的高可用的详细步骤及配置参数详解 A. 实验环境说明 a) 4台centos7主机 b) 角色说明: a. MHA:192.168.36.35 b. Master_mariadb:192.168.36.121 c. Slave_mariadb:192.168.36.120 d. Slave_mariadb:192.168.36.27 B. 安装程序包 a) mariadb上安装: mariadb-server 版本:5.5.60 mha4mysql-node -0.56-

新版keeplived + MySQL双主自动切换

### 新版keeplived + MySQL双主自动切换 ###参考网址: http://biancheng.dnbcw.info/mysql/381020.html###一.网络结构  ###    VIP 10.125.141.249    mysq1m1 10.125.141.138 主1(相对而言是主库)    mysqlm2 192.168.88.131 主2(相对而言是备库)### 二.主要步骤 ###    一 mysql 主主同步    二 安装keepalived     三

Memcached+magent实现主从同步 +keepalived高可用群集

Memcached+magent实现主从同步 +keepalived高可用群集 简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 实验部署 主机名称 IP地址 主要服务软件 memcach

[转帖]【MySQL+keepalived】用keepalived实现MySQL主主模式的高可用

[MySQL+keepalived]用keepalived实现MySQL主主模式的高可用 https://www.jianshu.com/p/8694d07595bc 一.实验说明 MySQL主主模式,是两台MySQL数据库互为主从. 此实验是用keepalived实现MySQL主主模式的高可用,基于已经安装好了主主架构的MySQL,然后配置keepalived,验证高可用性! 二.实验环境 操作系统:CentOS 7.5 serverA:192.168.1.104 serverB: 192.1

【转】双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的nginx,nginx对于静态资源请求就直接在本机检索并返回,对于php的动态请求,则负载均衡到server1和server2.对于SQ

双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构. 架构简介 此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的Nginx,nginx对于静态资源请求就直接在本机检索并返回,对于PHP的动态请求,则负载均衡到server1和server2.对于S

jumpserver+MySQL主从-Nginx+Keepalived高可用

环境: 系统: CentOS 7.3 关闭 selinux 和防火墙 一.安装jumpserver 官网安装文档:http://docs.jumpserver.org/zh/docs/step_by_step.html 1 setenforce 0 # 可以设置配置文件永久关闭 2 systemctl stop iptables.service 3 4 5 修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文 6 localedef -c -f UTF-8 -

Mysql之双向主从加keepalived高可用

最近在做MySQL数据库的双向主从,了解到keepalived能够自动判断并切换到可用数据库,自己试了一下,整理出文档来. 先声明一下环境 iptables开启3306端口或者关掉,关闭selinux MySQL-01:192.168.204.138 MySQL-02:192.168.204.139 VIP:192.168.204.200             #web服务器连接的ip,自己可以使用工具连接试一下. MySQL的安装过程就略过了,根据个人情况自己安装即可. 1.修改数据库的配置