探索MySQL高可用架构之MHA(6)
探索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)相关推荐
- MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)
目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...
- MySQL高可用系列之MHA(二)
一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: ho ...
- MySQL(10)数据库实现高可用架构之MHA
文章目录 一.MySQL MHA介绍 1.1 什么是 MHA? 1.2 MHA 的组成 1) MHA Node(数据节点) 2) MHA Manager(管理节点) 1.3 MHA 的特点 二.MyS ...
- 搭建MySQL高可用架构MHA
搭建MySQL高可用架构MHA v1.0 MHA简介 MHA的主要目的是自动化master故障转移和slave自动提升为master,在较短时间(一般为10-30秒)的停机时间,可以避免复制和一致性问 ...
- Mysql的高可用架构搭建(MHA)
文章目录 Mysql高可用架构(MHA)简介 MySQL高可用系统 MHA技术介绍 MHA提供了如下功能 MHA工作原理 MHA的优点 MHA组件介绍 Manager工具包主要包括以下工具 Node工 ...
- Spring - MySql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- 从mysql高可用架构看高可用架构设计
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...
- 第5章 MySQL高可用架构设计
第5章 MySQL高可用架构设计 数据库复制 复制解决了什么问题????? 非共享架构 二进制日志 binlog工具 查看日志格式 show variables like "binlog_f ...
- MySQL高可用方案之MHA
目录 一.简介 二.MHA特点 三.搭建MySQL MHA 1.安装MHA 2.在所有服务器上配置无密码认证 3.在manager节点上配置MHA 4. manager节点编辑配置文件,管理 mysq ...
最新文章
- web浏览器_如何在iPhone和iPad上更改默认的Web浏览器
- 美多商城之用户登录(QQ登录)
- SpringBoot2.XX 产生的问题
- 解决socket粘包的两种low版模式 os.popen()和struct模块
- golang中文文档_Golang开发环境搭建
- 用二维数组实现矩阵转置
- 监听localStorage变化(同页面监听)
- SorterBot-第1部分
- bzoj1222: [HNOI2001]产品加工
- 读取csv格式的数据
- Robots.txt 协议——百度之星
- python爬股票历史价格_【Python】利用ricequant获取上证指数以及所有股票历史价格数据...
- java逻辑删除代码_MybatisPlus实现逻辑删除功能
- 计算机面试专业英语词汇,英语面试中常用高频词汇
- python编程求100以内能被5整除之和_C语言,求100以内能被3整除或能被5整除的数的和...
- url中出现“%22”等如何处理?如何判断url中是否有“%22等”?如何获取当前网址?传入多个参数在url上? encodeURL和(js)
- linux安装liinuxrar教程,linux操作系统下RAR的安装和使用
- 抖音同款雪花飘落圣诞树
- SpringBootAdmin超详细教程以及端点指标控制
- 每日算法(四十三)-java为了更改的规划城市,需要统计楼栋数目信息。