mysql探索高可用,探索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节点。

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

源码包安装keepalivetar 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时可能报错如下:

51544f9b448db9890dfa5016359940b9.png

解决方法:cd keepalived-1.2.2    #进入源码目录

vi keepalived/libipvs-2.6/ip_vs.h    #修改如下

(1)#include         /* For __beXX types in userland */

#找到上面这一行

(2)#include 

#把(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功能就配置结束了!

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

本文出自 “走不完的路,看不完的书!” 博客,请务必保留此出处http://51power.blog.51cto.com/3549599/1672220

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

标签:ha   高可用   keepalived   读写分离   mha

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://51power.blog.51cto.com/3549599/1672220

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值