mysql主从备份+keepalived自动切换
数据库这一层需要做到避免单点故障可以是主从备份和主主备份,主主备份可能有性能损耗和数据同步的问题。这里记录下主从备份,
mysql进行备份之前确保mysql的版本是一样的,我这里用的都是mysql5.7.18
1、原文博客地址:http://qizhanming.com/blog/2017/06/20/how-to-config-mysql-57-master-slave-replication-on-centos-7
这篇博客已经写的很好了,不再记录了。
mysql备份好了以后,操作主mysql上面的数据可以看到从数据库的数据实时同步的。
2、那问题来了,如果在项目中主mysql挂了,我们是要手动切换msyql吗,这样会比较麻烦的,而且这段时间项目是不能用的。这里用keepalived实现IP的vip漂移,
keepalived就是一个软件,在主mysql和从mysql上面都安装后,会有一个虚拟IP在其中的一台服务器上面,如果这台服务器宕机了,这个IP就会出现在另一台服务器上面,这是keepalived的功能,能够判断是否可用和权重大小,然后自动漂移IP,这个IP是虚拟IP,我们可以自己随意设置,不过要跟主,从mysql的IP在同一个网段,云服务器好像需要再设置下默认是关闭的,如果是主机是可以直接用的。
1、安装keepalived
# yum install keepalived –y
2、备份keepalived.conf
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.back
3、编辑keepalived.conf
global_defs {
notification_email{
xxx@qq.com
}
notification_email_from waterlufei123@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KeepAlive_Mysql
}
vrrp_script vs_mysql_82 {
script "/etc/keepalived/checkMySQL.sh"
interval 60
}
vrrp_instance VI_82 {
state BACKUP
nopreempt
interface eth1
virtual_router_id 82
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
vs_mysql_82
}
virtual_ipaddress {
192.168.108.156/24 brd 192.168.108.255 dev eth1 label eth1:1
}
}
virtual_server 192.168.108.156 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.108.146 3306 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
其中/etc/keepalived/checkMySQL.sh需要新建,内容为:
echo "enter mysql_check.sh" >> /etc/keepalived/check_mysql.log
MYSQL=/usr/bin/mysql
MYSQL_HOST=127.0.0.1
MYSQL_USER=user
MYSQL_PASSWORD=password
MYSQL_PORT=3306
# 日志文件
LOG_FILE=/etc/keepalived/check_mysql.log
# 检查次数
CHECK_TIME=3
#mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_helth (){
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -P${MYSQL_PORT} -e "show status;" >/dev/null 2>&1
if [ $? = 0 ] ;then
MYSQL_OK=1
else
MYSQL_OK=0
fi
return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME -= 1"
check_mysql_helth
if [ $MYSQL_OK = 1 ] ; then
CHECK_TIME=0
#echo `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql available: success[$MYSQL_OK] >> $LOG_FILE
exit 0
fi
if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
then
/etc/init.d/keepalived stop
echo `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql invaild. keepalived stop. >> $LOG_FILE
exit 1
fi
sleep 1
done
添加执行权限:
shell > chmod +x /etc/keepalived/checkMySQL.sh
手动执行下这个脚本,看看返回是否是0,如果是1,请检查mysql连不上的原因:
shell > /etc/keepalived/checkMySQL.sh
shell > echo $?
从库的keepalived.conf为:
global_defs {
notification_email{
1163804452@qq.com
}
notification_email_from waterlufei123@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KeepAlive_Mysql
}
vrrp_script vs_mysql_82 {
script "/etc/keepalived/checkMySQL.sh"
interval 60
}
vrrp_instance VI_82 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 82
priority 90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
vs_mysql_82
}
virtual_ipaddress {
192.168.108.156/24 brd 192.168.108.255 dev eth0 label eth0:1
}
}
virtual_server 192.168.108.156 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.108.145 3306 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
/etc/keepalived/checkMySQL.sh文件一样。
然后主从服务器都启动keepalived:
shell > service keepalived start
shell > chkconfig keepalived on
查看虚拟VIP
# ip addr
连接数据库IP是192.168.108.156,当从库坏了以后不应该主库,当主库坏了以后,VIP会漂移到145上,当我们继续访问192.168.108.156时,实际访问的是145上的数据库
总的来说就是keepalived可以实现生成虚拟IP的功能,但是已什么为条件生成转移VIP呢?所以这里就加了checkMySQL.sh配置文件,根据mysql的状态漂移vip,然后呢,然后这里keepalived还可以用到其他地方,例如nginx,然后弄一个checkNginx.conf之类的,实现nginx的自动切换,这里也就是 说说还没做过
mysql主从备份+keepalived自动切换的更多相关文章
- mysql主从备份及常见问题处理
1.mysql主从备份基本原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新 ...
- mysql主从备份及原理分析
一.mysql主从备份(复制)的基本原理mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更 ...
- 检测MySQL主从备份是否运行
通过查看 slave 状态,确保 Slave_IO_Running: Yes Slave_SQL_Running: Yes #!/bin/bash#Author:Darius-Dmysql -uro ...
- MySQL主从备份配置实例
转载自:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0 ...
- django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现
首先画图一张,用来展示今天要做的事情,读写分离,个人理解就是使用mysql主从备份的原理,让两个数据库同时为自己提供服务.其中主库负责数据保存,从库负责数据展示,可以一主一从,也可以一主多从.从而降低 ...
- 一次mysql主从加keepalived配置搭建及切换演示
[需求] 根据需求需要搭建mysql主从架构数据库及加keepalived进行自动切换VIP [环境介绍] 系统环境:CentOS release 6.4 (Final) + Server vers ...
- mysql主从备份、主从切换的例子
指定binlog(因为时通过binlog实现数据同步的) 配置完后重启数据库服务,用show master status可以看到Master信息. StepB: 在SerB的my.cnf中指定 [ht ...
- Mysql主从备份、主主备份
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- mysql主从备份功能配置与測试
在高訪问量服务环境下,单机配置mysql服务将无法满足频繁快速的数据读写操作. 一旦mysql出现故障造成数据丢失.无法恢复. 因此.在mysql服务上启用主从备份功能,支持读写分离技术.最靠可的是搭 ...
随机推荐
- 原生JS—实现图片循环切换及监测鼠标滚动切换图片
今天我们主要讲讲如何使用原生JS实现图片的循环切换的方法以及如何检测鼠标滚动循环切换图片.多余的话我们就不多说了,我们一个一个开始讲吧. 1 原生JS实现图片循环切换 -- 方法一 在上栗子之前我们 ...
- 第二篇-FPGA学习之RoadMap
古语云:知己知彼,百战不殆.那么既然选择了FPGA之路,欲练此功,必先-- 必先了解清楚,FPGA的特点,FPGA善于/不善于解决什么类型问题,以及FPGA应用的方向,FPGA学习的要素等等. 一.F ...
- Scratch——教小孩子学编码
教小孩子学编码 http://scratch.mit.edu/ http://v.163.com/movie/2013/3/H/I/M92389L06_M9238GTHI.html
- canvas图表(2) - 折线图
原文地址:canvas图表(2) - 折线图 话说这天气一冷啊, 就患懒癌, 就不想码代码, 就想着在床上舒舒服服看视频. 那顺便就看blender视频, 学习下3D建模, 如果学会了建3D模型, 那 ...
- struts2对于处理JSON的配置
由于最近几年日益流行前后端分离模式,JSON作为数据载体也变得不可或缺.几乎所有的web框架都需要支持JSON,下面咱就一起了解下struts2是如何支持JSON的. 对于JSON的发送 这里有两种方 ...
- SSM框架开发web项目系列(二) MyBatis真正的力量
前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...
- 集合、set以及HASH
集合的数据结构数据结构就是内存中保存输出数据的形式,不同的数据结构会有不同的特征.堆栈结构:先进后出 代表类(stack):应用场景:java中的方法运行时所占用的空间就是这种结构.队列结构:先进先出 ...
- continue,break以及加上标签的使用(goto思路)
代码例子在java编程思想70-73页.这里只是想做做总结 java中需要用到标签的唯一理由就是因为由循环嵌套的存在,而且想从多层嵌套循环中break或者continue. 因此,标签只能放在循环前面 ...
- QTP日期格式化
'以下函数将日期参数进行格式转化,例如:2017-01-02 Function ShortDateToLongDate(strChangeDate) b=split(strChangeDate, ...
- poj 3070 && nyoj 148 矩阵快速幂
poj 3070 && nyoj 148 矩阵快速幂 题目链接 poj: http://poj.org/problem?id=3070 nyoj: http://acm.nyist.n ...