mysql master/slave结构最大的缺点:当master宕机时不能切换到slave,这样就影响了业务的运行。为了弥补这个缺陷,我采用了keepalived+master/master结构。如图:

关于mysql的配置请参考:http://liuping0906.blog.51cto.com/2516248/879877

安装keepalived

tar zxf keepalived-1.2.8.tar.gz
cd keepalived-1.2.8
./configure --prefix=/opt/app/keepalived-1.2.8
make
make install

在192.168.110.128上配置文件keepalived.conf

! Configuration File for keepalived
global_defs {router_id MYSQL-HA
}
vrrp_instance keepalive_mysql {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1preemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.110.8/24}
}

在192.168.110.137上配置文件keepalived.conf

! Configuration File for keepalived
global_defs {router_id MYSQL-HA
}
vrrp_instance keepalive_mysql {state BACKUPinterface eth0virtual_router_id 51priority 99advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.110.8/24}
}

说明:

配置上注意priority的值,192.168.110.128是master,优先级要高。

preempt表示抢占服务,当192.168.110.128恢复后,重新把服务抢过来。

keepalived默认网卡eth0和自身服务出现问题时才会切换。

通过编写脚本来监控mysql的状态进而控制keeepalived服务

#!/bin/bash
MYSQL="/usr/bin/mysql"
MYSQL_HOST=127.0.0.1
MYSQL_USER=admin
MYSQL_PASSWORD=admin
LOG_FILE="/opt/app/keepalived/check_mysql.log"
MYSQL_OK=1 # mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
check_mysql_helth()
{$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p${MYSQL_PASSWORD} -e "show status" &>/dev/nullif [ $? = 0 ] ; thenMYSQL_OK=1elseMYSQL_OK=0fireturn $MYSQL_OK
}
while :
doCHECK_TIME=3while [ $CHECK_TIME -ne 0 ]dolet "CHECK_TIME -= 1"check_mysql_helth[ $MYSQL_OK == 1 ] && breakif [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]; thenpkill keepalivedecho `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql invaild. keepalived stop. >> $LOG_FILEfidone
done

说明:

通过监控mysql服务状态来控制keepalived服务,这里mysql停掉则kill掉keepalived。

分别在两台机器上执行下面命令

shell>/opt/app/keepalived/sbin/keepalived -f \  /opt/app/keepalived/etc/keepalived/keepalived.conf -D
shell>nohup sh /opt/app/keepalived/bin/check_mysql.sh &

把第二条命令写入/etc/rc.local。

测试:

> ip addr

>killall mysqld

查看192.168.110.137

此时192.168.110.137充当临时服务器。

恢复192.168.110.128上的业务后查看

此时业务被192.168.110.128抢占过来,192.168.110.137充当备份、临时服务器。

遗留的问题:

1、本来在keepalived使用vrrp_script和strack_script来监控这个脚本,但是测试过几遍脚本都不运行。网上很多人都谈到这个问题,我不知道其他人怎么成功的。

2、当写入数据时主服务器宕机,从服务器来不及同步数据。此时造成用户数据写入但不能读取。缓解这个问题可以采用同步或者半同步。

3、主从切换时会造成业务闪断。

4、对于第一个问题可以结合lvs来解决。

5、主键冲突问题

参考文档

http://bbs.ywlm.net/thread-855-1-1.html

http://bbs.ywlm.net/thread-845-1-1.html

http://bbs.ywlm.net/thread-790-1-1.html

转载于:https://blog.51cto.com/liuping0906/1295092

使用keepalived搭建mysql主从备份、切换相关推荐

  1. centos mysql 主从_CentOS 搭建 MySql 主从备份

    约定: 192.168.21.128 Master 192.168.21.129  Slave 以下配置拷贝与网络 配置篇 一.配置MySQL主服务器(192.168.21.128) mysql -u ...

  2. liunx下搭建mysql主从_linux下搭建mysql主从

    在master上创建repl账户,用于复制. grant replication slave on *.* to [email protected]%' identified by 'P@$$W0rd ...

  3. mysql主从备份及原理分析

    为什么80%的码农都做不了架构师?>>>    以下教程结合网上资料和自己的总结,综合而成,实际做的过程中发现网上部分网友的教程不是很详细,有些地方的坑也没有点到,从而产生了如下教程 ...

  4. Docker - Docker中搭建MySQL主从

    1.pull完centos7纯净版的镜像后,创建容器,然后将宿主机上下载的MySQL文件 (MySQL下载地址:http://mysql.mirror.kangaroot.net/Downloads/ ...

  5. docker搭建mysql主从

    前言 为什么要使用Docker搭建? 不管是使用源码安装还是离线安装,在服务器上安装一个mysql总会花费不少的时间,而且对于新人来说,中间稍不注意哪一步出错了就导致安装失败,我之前也是安装过2次才成 ...

  6. MySql主从备份Slave

    Mysql主从备份可以在除主服务器外的其他服务器是部署从库,用于实时备份生产环境数据,核心是mysql的log-bin日志(二进制日志),主库开启bin日志后,从库通过日志同步(Slave I/O)和 ...

  7. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  8. haproxy负载均衡_基于mycat+haproxy+keepalived搭建mysql数据库高可用负载均衡

    概述 目前业界对数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,mysql则比较推荐用mycat去搭建数据库集群,下面介绍一下怎么用mycat+haproxy+keepalived搭 ...

  9. mysql集群和主从区别_搭建MySQL主从集群,主从复制过程中同步延迟问题

    上一节我们成功搭建了主从复制.读写分离,实际上并发量和数据量不大的情况下,使用起来也是非常的流畅,无任何问题,可以正常运行了. 但是,要保证高可用,高并发的情况,可以写数据库master就有累了,从服 ...

最新文章

  1. Install NSCA
  2. 五大常用算法之二:动态规划算法
  3. farbox editor是个好东西
  4. app中使用用户名/邮箱/手机号登录的思路分析
  5. tensorflow1、2会话、变量、feed、fetch、最小二乘法
  6. 【机器学习】机器学习从零到掌握之七 -- 教你使用KNN进行手写数字识别
  7. 用screenfetch显示带有酷炫Linux标志的基本硬件信息
  8. windows 2003 iis 360防黑加固后不能使用
  9. 水溶彩铅的特点技法运用
  10. Error pulling origin: error: The following untracked working tree files would be overwritten by...
  11. 普通Java类获取Spring的bean
  12. php生成11位不重复数字,php生成8位不重复字符串
  13. MAC 安装caffe 教程 排坑
  14. 和巨耀通杯计算机基础知识大赛,南京邮电大学第二十二届科技节活动之 “和巨耀通杯”网页设计大赛圆满落幕...
  15. 艾滋病多学科协作诊治模式的实施与成效
  16. ExoPlayer+Shaka-packager播放自制DRM视频
  17. QTP10破解方法及mgn-mqt82.exe下载
  18. java我的世界_我的世界Java版
  19. 【Android】声音播放截断(骤停)的问题
  20. 项目实战 之 vue3 + vite + pinia

热门文章

  1. delphi php 加密解密_如何恢复被MaMoCrypt勒索软件加密的数据
  2. 2021年高考成绩查询衡阳市八中,优秀!衡阳2020年各大高中成绩出炉!
  3. python之路day2_Python之路,day2
  4. 大数据学习笔记53:Flume Sink Processors(Flume接收器处理器)
  5. JavaScript学习笔记:AJAX基础
  6. 【SPOJ COT2】Count on a tree II,树上莫队
  7. java jaxb 集合_java-使用JAXB解组/编组List String
  8. bzoj4514 [Sdoi2016]数字配对 费用流
  9. Intel Core Enhanced Core架构/微架构/流水线 (14) - 存储器/内存读写 Memory Load/Store
  10. 在mac上用文本编辑器写python_Mac开源文本编辑器CotEditor