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

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

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

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

什么是Keepalived呢????

keepalived是一款c语言写的实现在linux系统上实现负载均衡和高可用的软件。它遵从于GNU是一款优秀的开源软件。keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障的发生。

两个关键词的解释

负载均衡

keepalived内置了对ipvs函数的调用支持。可以直接在keepalived中按照语法配置ipvs然后keepalived就可以实现对ipvs的配置。

高可用

keepalived是以VRRPVirtual Router Redundancy Protocol协议为实现基础的即虚拟路由冗余协议。虚拟路由冗余协议可以认为是实现路由器高可用的协议即将N台提供相同功能的路由器组成一个路由器组这个组里面有一个master和多个backupmaster上面有一个对外提供服务的vip该路由器所在局域网内其他机器的默认路由为该vipmaster会发组播当backup收不到vrrp包时就认为master宕掉了这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

本套架构中keepalive的作用????

由于mysql+replication方案中master和slave的关系是一对多的关系,整个系统中只有一个master节点(写入节点),多个slave节点,那么master节点一旦down机后,整个系统的数据写入操作将瘫痪,对系统造成严重后果。为此引入了keepalive工具,让这个系统的master和slave关系是多对多的关系,对master节点进行双机热备,以达到整个系统的高可用性。其中keepalive工具负责对两个master节点进行不间断监听,一旦工作中的master节点停止工作后,那么备份master节点就会接管 ,让这个系统正常工作。向外提供一个虚拟ip以供proxy访问master,虚拟ip对应了两个实ip的maser节点。

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

源码包安装keepalive

tar zxf keepalived-1.2.2.tar.gz     #解压源码包
cd keepalived-1.2.2        #进入目录
./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-x86_64
#configure编译
make && make install     #安装
 cp /usr/local/sbin/keepalived /sbin/keepalived    #拷贝可执行命令
service keepalived start        #启动keepalive服务
service keepalived stop    #关闭keepalive服务

make时可能报错如下:

解决方法:

cd keepalived-1.2.2    #进入源码目录
vi keepalived/libipvs-2.6/ip_vs.h    #修改如下
(1)#include <linux/types.h>        /* For __beXX types in userland */
#找到上面这一行
(2)#include <sys/types.h>
#把(1)这一行,放在(2)代码下面,接下来顺利make了。

编辑keepalived资源配置文件

vi /etc/keepalived/keepalived.conf    #修改如下
! Configuration File for keepalived
global_defs {
   router_id MYSQL-ha    #为router_id命名
}
vrrp_script check_running {
       script"/etc/keepalived/keepalived_check_mysql.sh"   #判断实例是running的脚本
       interval 5   #每5秒执行一次,判断实例是running的脚本
}
vrrp_instance PWRD_1 {      #指定vrrp_instance实例
       state BACKUP        #指定状态为备份
       interface bond0     #网络端口为bond0
      virtual_router_id 88   
       priority 150 #[另一台是100]   #本机权重
       advert_int 1
       nopreempt #[另一台不加]    #当主机恢复时,不抢占
       authentication{
       auth_type PASS      #密码验证
       auth_pass 99999
           }
      virtual_ipaddress {
             10.142.132.49   #指定VIP
       }
       track_script {
             check_running
       }
       notify_master/etc/keepalived/master.sh   #当前服务器为主时,觖发执行的脚本
       notify_backup/etc/keepalived/slave.sh   #当前服务器为备时,觖发执行的脚本
       notify_fault/etc/keepalived/notify_fault.sh  #当前服务器出现问题时,觖发执行的脚本
       notify_stop/etc/keepalived/down.sh  #当前服务器为down时,觖发执行的脚本
}

编写判断mysql服务是否正常的脚本

vi keepalived_check_mysql.sh   #增加如下内容
#!/bin/bash
MYSQL=/app/mysql/bin/mysql     #指定mysql命令
MYSQL_HOST=localhost         #指定主机IP
MYSQL_USER=root        #指定Mysql登录用户
MYSQL_PASSWORD=mysql     #指定Mysql登录密码
CHECK_COUNTS=3        #控制循环次数变量
 
#mysql is working MYSQL_OK is 0 , mysql isnot working MYSQL_OK is 1
MYSQL_OK=0   #标识mysql状态变量
 
function check_Mysql_Runing (){
 
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD}-e "show grants;" >/dev/null 2>&1
 #在操作系统层面,调用mysql命令
if [ $? = 0 ] ;then
        MYSQL_OK=0        #如果上面操作成功,证明Mysql正常
 
else
        MYSQL_OK=1         #如果上面操作不成功,证明Mysql不正常
 
fi
return $MYSQL_OK          #返回Mysql状态
 
}
 
while [ $CHECK_COUNTS -ne 0 ]      #循环控制
 
do
        let"CHECK_COUNTS -= 1"     #CHECK_COUNTS变量做自减1
 
       check_Mysql_Runing       #调用上面的函数
 
        if [ $MYSQL_OK= 0 ] ; then       #MYSQL_OK=0,mysql工作正常
         
             echo "mysql is runing!"
 
             exit 0
        fi
 
        if [ $MYSQL_OK-eq 1 ] && [ $CHECK_COUNTS -eq 0 ]  
 #MYSQL_OK=1和CHECK_COUNTS=0,mysql没有正常运行
        then
 
               echo "mysql is not runing!"
   
               exit 1
        fi
 
        sleep 1   #休眠1秒
done

编写当前服务器为主时的脚本

vi /etc/keepalived/master.sh   #增加如下内容
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` change master status!!! " >> /etc/keepalived/change.log
#输出当前时间到日志中

编写当前服务器为备时的脚本

vim/etc/keepalived/slave.sh
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` change slave status!!!" >> /etc/keepalived/change.log
#输出当前时间到日志中

编写当前服务器不正常时的脚本

vim/etc/keepalived/notify_fault.sh
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` change notify_fault status!!!" >>/etc/keepalived/change.log
#输出当前时间到日志中
sleep 3   #休眠3秒
echo "#`date +"%Y-%m-%d%H:%M"` try startup mysql!!!" >> /etc/keepalived/change.log
#输出当前时间到日志中     
service mysql start     #启动Mysql服务器

编写当前服务器wodn时的脚本

vim/etc/keepalived/down.sh
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` keepalived is down!!!" >> /etc/keepalived/change.log
#输出当前时间到日志中

为所有脚本授予可执行权限

chmod +x keepalived_check_mysql.sh
chmod +x /etc/keepalived/master.sh
chmod +x /etc/keepalived/slave.sh
chmod +x /etc/keepalived/notify_fault.sh
chmod +x /etc/keepalived/down.sh

通过vip登录Mysql服务器

(1) mysql -h10.142.132.49 -ulipengfei-plipengfei
SHOW VARIABLES LIKE ‘server_id‘;  #查看当前是哪个mysql主机,当前mysql主库
(2) 把mysql主库停止
(3) mysql -h10.142.132.49 -ulipengfei-plipengfei
SHOW VARIABLES LIKE ‘server_id‘;  #查看当前是哪个mysql主机,当前是mysql备主

可以看出主库停了,vip会自动漂移到备主上。

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

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

时间: 2024-10-12 03:15:21

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

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

-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的keepalive读写分离! 本篇文章主要介绍本次架构中的mha安装部分! 关于MHA MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于 Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在 0~30秒之内自动完成数据库的故

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

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

探索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