探索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     #网络端口为bond0virtual_router_id 88   priority 150 #[另一台是100]   #本机权重advert_int 1nopreempt #[另一台不加]    #当主机恢复时,不抢占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 ] ;thenMYSQL_OK=0        #如果上面操作成功,证明Mysql正常elseMYSQL_OK=1         #如果上面操作不成功,证明Mysql不正常fi
return $MYSQL_OK          #返回Mysql状态}while [ $CHECK_COUNTS -ne 0 ]      #循环控制dolet"CHECK_COUNTS -= 1"     #CHECK_COUNTS变量做自减1check_Mysql_Runing       #调用上面的函数if [ $MYSQL_OK= 0 ] ; then       #MYSQL_OK=0,mysql工作正常echo "mysql is runing!"exit 0fiif [ $MYSQL_OK-eq 1 ] && [ $CHECK_COUNTS -eq 0 ]  #MYSQL_OK=1和CHECK_COUNTS=0,mysql没有正常运行thenecho "mysql is not runing!"exit 1fisleep 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功能就配置结束了!

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

转载于:https://blog.51cto.com/51power/1672220

探索MySQL高可用架构之MHA(6)相关推荐

  1. MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)

    目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...

  2. MySQL高可用系列之MHA(二)

    一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: ho ...

  3. MySQL(10)数据库实现高可用架构之MHA

    文章目录 一.MySQL MHA介绍 1.1 什么是 MHA? 1.2 MHA 的组成 1) MHA Node(数据节点) 2) MHA Manager(管理节点) 1.3 MHA 的特点 二.MyS ...

  4. 搭建MySQL高可用架构MHA

    搭建MySQL高可用架构MHA v1.0 MHA简介 MHA的主要目的是自动化master故障转移和slave自动提升为master,在较短时间(一般为10-30秒)的停机时间,可以避免复制和一致性问 ...

  5. Mysql的高可用架构搭建(MHA)

    文章目录 Mysql高可用架构(MHA)简介 MySQL高可用系统 MHA技术介绍 MHA提供了如下功能 MHA工作原理 MHA的优点 MHA组件介绍 Manager工具包主要包括以下工具 Node工 ...

  6. Spring - MySql实现高可用架构之MHA

    一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...

  7. 从mysql高可用架构看高可用架构设计

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  8. 第5章 MySQL高可用架构设计

    第5章 MySQL高可用架构设计 数据库复制 复制解决了什么问题????? 非共享架构 二进制日志 binlog工具 查看日志格式 show variables like "binlog_f ...

  9. MySQL高可用方案之MHA

    目录 一.简介 二.MHA特点 三.搭建MySQL MHA 1.安装MHA 2.在所有服务器上配置无密码认证 3.在manager节点上配置MHA 4. manager节点编辑配置文件,管理 mysq ...

最新文章

  1. web浏览器_如何在iPhone和iPad上更改默认的Web浏览器
  2. 美多商城之用户登录(QQ登录)
  3. SpringBoot2.XX 产生的问题
  4. 解决socket粘包的两种low版模式 os.popen()和struct模块
  5. golang中文文档_Golang开发环境搭建
  6. 用二维数组实现矩阵转置
  7. 监听localStorage变化(同页面监听)
  8. SorterBot-第1部分
  9. bzoj1222: [HNOI2001]产品加工
  10. 读取csv格式的数据
  11. Robots.txt 协议——百度之星
  12. python爬股票历史价格_【Python】利用ricequant获取上证指数以及所有股票历史价格数据...
  13. java逻辑删除代码_MybatisPlus实现逻辑删除功能
  14. 计算机面试专业英语词汇,英语面试中常用高频词汇
  15. python编程求100以内能被5整除之和_C语言,求100以内能被3整除或能被5整除的数的和...
  16. url中出现“%22”等如何处理?如何判断url中是否有“%22等”?如何获取当前网址?传入多个参数在url上? encodeURL和(js)
  17. linux安装liinuxrar教程,linux操作系统下RAR的安装和使用
  18. 抖音同款雪花飘落圣诞树
  19. SpringBootAdmin超详细教程以及端点指标控制
  20. 每日算法(四十三)-java为了更改的规划城市,需要统计楼栋数目信息。

热门文章

  1. 算法分析之-主方法分析递归式
  2. 汇编语言随笔(11)- int 指令(返回到应用程序的中断例程),实验13(编写、应用中断例程)
  3. python property理解
  4. OpenCascade Primitives BRep-Cylinder
  5. 磁头号和起始扇区的计算方法------软盘结构
  6. 用bochs调试自己写的系统引导代码
  7. 使用Struts2验证框架实现输入校验
  8. 机器学习和计算机视觉相关的数学
  9. golang二维数组初始化
  10. golang显式类型初始化