探索MySQL高可用架构之MHA(7)

-----构建mysql高可用系列(共9篇)

上一篇文章介绍了本次架构的keepalive读写分离!

本篇文章主要介绍本次架构中的mha安装部分!

关于MHA

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

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其 他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器 硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最 新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

MHA工作原理

a.从宕机崩溃的master保存二进制日志事件(binlog events)。

b.识别含有最新更新的slave。

c.应用差异的中继日志(relay log)到其它slave。

d.应用从master保存的二进制日志事件(binlog events)。

e.提升一个slave为新master。

f.使其它的slave连接新的master进行复制。

MHA工具包

Manager工具

a.masterha_check_ssh : 检查MHA的SSH配置。

b.masterha_check_repl : 检查MySQL复制。

c.masterha_manager : 启动MHA。

d.masterha_check_status : 检测当前MHA运行状态。

e.masterha_master_monitor : 监测master是否宕机。

f.masterha_master_switch : 控制故障转移(自动或手动)。

g.masterha_conf_host : 添加或删除配置的server信息。

Node工具

a.save_binary_logs : 保存和复制master的二进制日志。

b.apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它slave。

c.filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)。

d.purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。

下面就让我们开始操作吧:

安装node源码包(依赖很多per包,请按照我的安装顺序安装!)

rpm -ivhperl-DBI-1.620-1.el5.rfx.x86_64.rpm          
rpm -ivhMySQL-shared-compat-5.6.21-1.rhel5.x86_64.rpm
rpm -ivhperl-DBD-MySQL-3.0007-2.el5.x86_64.rpm   #如果是6系统先安装 rpm -ivhperl-Data-ShowTable-3.3-1.2.el6.rf.noarch.rpm
tar xfmha4mysql-node-0.53.tar.gz
cd mha4mysql-node-0.53
perl Makefile.PL
make && make install
#redhat5系列系统,会出现 Pleaseenter your CPAN site: []   随便输入反正也不用CPAN模块

安装manager源码包(依赖很多per包,请按照我的安装顺序安装!)

rpm -ivhperl-Config-Tiny-2.10-1.el5.noarch.rpm       
rpm -ivhepel-release-5-4.noarch.rpm
rpm -ivh perl-Parallel-ForkManager-0.7.5-4.el5.noarch.rpm
rpm -ivhperl-Mail-Sender-0.8.16-1.el5.rf.noarch.rpm
rpm -ivhperl-Mail-Sendmail-0.79-1.2.el5.rf.noarch.rpm
rpm -ivhperl-Params-Validate-0.95-1.el5.rf.x86_64.rpm
rpm -ihvperl-Email-Date-Format-1.002-4.el5.noarch.rpm
rpm -ivhperl-MIME-Lite-3.029-1.el5.rf.noarch.rpm
rpm -ivhperl-TimeDate-1.16-1.2.el5.rf.noarch.rpm     #解决依赖:perl(Date::Format) perl(Date::Parse)
rpm -ivhperl-Pod-Escapes-1.04-5.el5.noarch.rpm
rpm -ivhperl-Pod-Simple-3.16-1.el5.rf.noarch.rpm
rpm -ivhperl-Test-Pod-1.45-1.el5.rf.noarch.rpm
rpm -ivh perl-MailTools-2.12-1.el5.rf.noarch.rpm  #解决依赖:perl(Mail::send)
rpm -ivhperl-Log-Dispatch-2.20-1.el5.noarch.rpm
tar xfmha4mysql-manager-0.53.tar.gz
cd mha4mysql-manager-0.53
perl Makefile.PL
make && make install
#redhat5系列系统,会出现 Pleaseenter your CPAN site: []   随便输入反正也不用CPAN模块

配置ssh信任(所有机器全做)

拿47机器举例
(1)#生成公钥
ssh-keygen -t rsa  生成公钥
(2)#输出公钥匙
cat id_rsa.pub  
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA7........
(3)#在48、50、51、52分别操作, vi authorized_keys 
增加47机器上 id_rsa.pub的内容
(4)#测试
ssh 10.142.132.52 date
ssh 10.142.132.51 date
ssh 10.142.132.50 date
ssh 10.142.132.48 date
ssh 10.142.132.47 date
总结:上面4步操作,在其它机器也一样操作,所有机器就可以实现ssh信任了

编辑manager节点配置文件  //10.142.132.50

(1) mkdir -p /etc/masterha   #创建目录
(2) vi /etc/masterha/app1.cnf   #增加如下内容
[server default]
user=root   #linux用于管理mysql用戶名
password=mysql   #linux用于管理mysql密码
ssh_user=root    #ssh免密钥登录的帐号名
repl_user=lipengfei  #mysql复制帐号,用来在主从机之间同步二进制日志等
repl_password=lipengfei   #mysql复制帐号的密码
manager_workdir=/app/masterha/app1    #manager目录       
manager_log=/app/masterha/app1/app1.log   #管理节点工作日志文件
remote_workdir=/app/masterha/app1    #node 上用于产生日志的工作目录
ping_interval=1    #ping间隔,用来检测master是否正常
[server1]
hostname=10.142.132.52  #具体IP
candidate_master=1    #优先级成为新master
check_repl_delay=0    #MHA在选择新的Master时,会忽略复制延迟。
master_binlog_dir=/app/mysql/data  #binlog日志所在目录
[server2]
hostname=10.142.132.51   #具体IP
candidate_master=1     #优先级成为新master
check_repl_delay=0      #MHA在选择新的Master时,会忽略复制延迟。
master_binlog_dir=/app/mysql/data  #binlog日志所在目录
[server3]
hostname=10.142.132.48   #具体IP
no_master=1     #不能成为主库
[server4]
hostname=10.142.132.47    #具体IP
no_master=1  #不能成为主库

启动mha-manager

nohup masterha_manager--conf=/etc/masterha/app1.cnf --ignore_last_failover < /dev/null > /app/masterha/app1/app1.log2>&1 &    #以nohup模式,放在后台启动

故障测试

a.手工停止 52上的mysql服务,service mysql stop
b.大约30秒,51自动成为新的主库   #在47或48从库上show slave status就可以看出来
c.52再次启动mysql服务,要手工加入到AB架构中   #51是主库,使用如下演示命令加入AB架构
  change master to master_host=‘10.142.132.51‘, master_port=3306,master_user=‘lipengfei‘, master_password=‘lipengfei‘,master_log_file=‘binlog.000001‘,master_log_pos=120;
d.手工停止51上的Mysql服务
e大约30秒,52自动成为新的主库  #在47或48从库上show slave status就可以看出来

注意如下2个问题

a.当主DB故障,切换到另外的服务器上后,即使恢复了原来的主DB,也不能立即加入整套MHA系统中,得重新手工加入AB架构。
b.当发生一次切换后,管理节点的监控进程就会自动退出,需要用脚本来自动启动。另外还得删除app1.failover.complete这个文件,否则新的主DB出现问题MHA就不会切换了。

mha-manager常用命令

(1) nohup masterha_manager--conf=/etc/masterha/app1.cnf --ignore_last_failover < /dev/null > /app/masterha/app1/app1.log2>&1 &  
#开启MHA Manager监控
(2) masterha_check_status--conf=/etc/masterha/app1.cnf 
#查看MHA Manager监控是否正常
(3) masterha_stop--conf=/etc/masterha/app1.cnf 
#关闭MHA Manage监控
(4)masterha_check_ssh--conf=/etc/masterha/app1.cnf    
#检查SSH配置
(5)masterha_check_repl--conf=/etc/masterha/app1.cnf  
#检查整个复制环境状况

到此为止,咱们的mah功能就配置结束了!

只要朋友们仔细点按着我写的文章一步一步操作,相信你也可以成功的,加油吧!

时间: 2024-10-11 13:30:37

探索MySQL高可用架构之MHA(7)的相关文章

探索MySQL高可用架构之MHA(4)

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构中的Mysql源码安装.本篇文章主要介绍本次架构中的ABBB复制. 首先我们先介绍什么是MySql AB复制???? AB复制又称主从复制,实现的是数据同步.如果要做MySQL AB复制,数据库版本尽量保持一致.如果版本不一致,从服务器版本高于主服务器,但是版本不一致不能做双向复制. MySQL AB复制有什么好处呢? a.解决宕机带来的数据不一致,因为MySQL AB复制可以实时备份数据. b.减轻数据库服务器压力,这点很容

探索MySQL高可用架构之MHA(6)

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的Atlas读写分离! 本篇文章主要介绍本次架构中的keepalive部分! 什么是Keepalived呢???? keepalived是一款c语言写的实现在linux系统上实现负载均衡和高可用的软件.它遵从于GNU是一款优秀的开源软件.keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障的发生. 两个关键词的解释 负载均衡 keepalived内置了对ipvs函数的调

探索MySQL高可用架构之MHA(5)

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的AB复制操作! 本篇文章主要介绍本次架构中的Atlas读写分离! 为什么要分库.分表.读写分离? 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库. Master库负责数据更新,Slave库当然负责非实时数据查询. 因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体

MySQL高可用架构之MHA (未完,待续)

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

MySQL高可用架构之MHA

1.关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover功能.MHA在监控到master节点故障时,会提升其中拥有的最新数据的slave节点成为新的master节点,在此期间,MHA会通过其它从节点获取额外信息来避免一致性方面的问题.MHA还提供了master节点的在线切换功能,即按需切换master/slave节点. MHA服务有两种角色,MHA Manager(管理节点)和MHA No

MySQL高可用系列之MHA(二)

一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名: ip为MySQL Server的IP地址,缺省从$hostname中获取:port为MySQL Server的端口号,缺省为3306 ssh_host/ssh_ip/ssh_por

mysql高可用集群——MHA架构

目录 1.下载 2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰到的问题 3.测试切换 3.1 正常切换测试 3.2 回切测试 3.3 雪崩测试 3.4 主从不一致切换测试 下载 mha链接地址:http://pan.baidu.com/s/1pJkDGX9#dir/path=%2Fmysql%2FHA%2Fmha 或者:https://code.googl

mysql实现高可用架构之MHA

一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题.MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点. MHA 是由日本人 yoshinorim

整个MHA+keepalived+lvs+mysql高可用架构配置说明

整个MHA+keepalived+lvs+mysql高可用架构配置说明1.1. 环境简介1.1.1.vmvare虚拟机,系统版本CentOS7.5 x86_64位最小化安装,mysql的版本5.7.21,1.1.2.虚拟机器的ssh端口均为默认22,1.1.3.虚拟机的iptables全部关闭,1.1.4.虚拟机的selinux全部关闭,1.1.5.虚拟机服务器时间全部一致 ntpdate 0.asia.pool.ntp.org1.1.6.3台机器的ssh端口为22**1.2.此次试验采用的是3