keepalived实现对mysql主从复制的主备自动切换

备注:君子性非议也,善假于物也。 温故而知新,可以为师矣。

使用MySQL+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台 MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换。

实验环境中用两台主机搭建了一个mysql主从复制的环境,两台机器分别安装了keepalived,用一个虚IP实现mysql服务器的主备自动切换功能.

模拟环境:

VIP:192.168.1.197                     :虚拟IP地址

Master:192.168.1.198                  :主数据库IP地址

Slave:192.168.1.199                    :从数据库IP地址

备注:MySQL的主从同步配置不在此文档中说明(前提:主从同步已完成)

安装步骤:

1、keepalived的安装

Yum install -y keepalived

Chkconfig keepalived on

2、keepalived.conf文件的配置

Master:keepalived.conf

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]

}

[email protected]

smtp_connect_timeout 3

smtp_server  smtp.xishiqu.com

router_id MySQL-ha

}

vrrp_script check_run {                         #声明vrrp_script 的函数check_run

script "/root/keepalived_check_mysql.sh"     #监控MySQL的脚本

interval 5

}

vrrp_sync_group VG1 {

group {

VI_1

}

}

vrrp_instance VI_1 {

state MASTER                  #指定主服务器节点为主节点,备用节点上设置需一致

interface eth0                  #指定虚拟IP的网络接口

virtual_router_id 88   #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组

priority 100                 #主节点的优先级(1-254之间),备用节点必须比主节点优先级低。

advert_int 1                 #组播信息发送间隔,两个节点设置必须一样

nopreempt

authentication {             #设置验证信息,两个节点必须一致

auth_type PASS

auth_pass 1111

}

track_script {              #调用函数代码块

check_run

}

virtual_ipaddress {      #虚拟IP(对外提供MySQL服务的IP地址)

192.168.1.197       #不能和网内其他IP地址冲突

}

}

Slave:keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]

}

[email protected]

smtp_connect_timeout 3

smtp_server smtp.xishiqu.cn

router_id MySQL-ha

}

vrrp_script check_run {

script "/root/keepalived_check_mysql.sh"

interval 5

}

vrrp_sync_group VG1 {

group {

VI_1

}

}

vrrp_instance VI_1 {

state MASTER

interface eth1                #本地网口 按实际情况配置

virtual_router_id 88

priority 99

advert_int 1

nopreempt

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

check_run

}

virtual_ipaddress {

192.168.1.197

}

}

3、mysql状态检测脚本

在目录root下创建脚本keepalived_check_mysql.sh:

vim /root/keepalived_check_mysql.sh

#!/bin/bash

MYSQL=/usr/local/mysql/bin/mysql

MYSQL_HOST=localhost

MYSQL_USER=root

MYSQL_PASSWORD=123456

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} -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

exit 0

fi

if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]

then

pkill keepalived

exit 1

fi

sleep 1

Done

Chmod 755 /root/keepalived_check_mysql.sh

4、两台服务器同时启动mysql和keepalived

Service keepalived restart

Service mysqld restart

5、功能验证

#Ip a          :通过查看虚拟IP,验证keepalived服务是否启动

#tcpdump vrrp    :查看vrrp通读记录,进行测试

由keepalived的配置文件可知,mysql关闭的话,将会执行keepalived_check_mysql.sh这一脚本。这个脚本在执行的时候,会判断mysql的状态,如果mysql关闭了,将会关闭keepalived进程,将mysqld的服务切换到从数据库。而后主数据修复,需手动切换到主数据库,再重启keepalived服务。Keepalived和nagios配合使用才能提供更好的服务。

时间: 2024-12-25 23:38:08

keepalived实现对mysql主从复制的主备自动切换的相关文章

Redis主备自动切换

Sentinel(哨兵)是用于监控redis集群中Master状态的工具. 一.Sentinel作用  1.Master状态检测   2.如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave;  3.Master-Slave切换后,master_redis.conf.slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,se

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

MySQL建立双向主备复制服务器配置方法

1.环境描述 服务器A(主) 192.85.1.175 服务器B(从) 192.85.1.176 Mysql版本:5.1.61 系统版本:System OS:ubuntu 10.10 X86 (系统安装及数据环境搭建,省略) 2. 创建同步用户: 在服务B命令行执行 : grant replication slave on *.* to 'replication'@'%' identified by 'mysqlsync'; flush privileges; grant FILE,SELECT

Windows下Java程序实现对Mysql数据库的插入,删除,修改和查询

运行环境:Windows7,Eclipse,MySql,JDK1.7,mysql-connector-java-5.1.17-bin.jar 1 //import java.io.*; 2 import java.util.*; 3 import java.sql.*; 4 5 /** 6 * 7 * @date 2014-05-20 8 * @author asif 9 * @作用 java实现对mysql数据库的增减删查 10 * @bug 插入,删除,更新的时候异常停止 11 * 12 *

Zabbix配合fpmmm(mpm)实现对Mysql的全面监控

Zabbix使用fpmmm(mpm)模块实现对Mysql的全面监控(Performance Monitor for MySQL) fpmmm is the FromDualPerformance Monitor for MySQL and MariaDB and the counterpart to the MySQL EnterpriseMonitor from Oracle.With fpmmm you can monitor your MySQL/MariaDB databases and

shell实现对mysql数据库的增、删、改、查操作

shell实现对mysql数据库的增.删.改.查操作 #!/bin/bash #数据库信息 HOSTNAME="192.168.111.84" PORT="3306" USERNAME="root" PASSWORD="" DBNAME="test_db_test" TABLENAME="test_table_test" #也可以写 HOSTNAME="localhost&qu

思科核心交换主备引擎切换与测试

某省级大型国企业,某项目涉及到引擎切换测试.做了些记录还有心得与大家共享.注:现场实际环境 1,设备硬件 Cisco WS-C6509-E Component name Description 板卡1 WS-X6724-SFP 24 port 1000mb SFP 板卡2 WS-X6748-GE-TX 48 port 10/100/1000mb Ethernet 板卡1 WS-X4648-GE-TX 48 port 10/100/1000mb Ethernet 引擎1 WS-SUP720-3B

mysql 主从复制+双主复制

我们在使用MySQL Server数据库时,可能会遇到这种问题,如果其中一台mysql数据库宕掉后,我们希望以最短的时间进行解决,并尽快使用数据库,但是如果遇到一些无法快速修复的故障时,该怎么办呢? 我们可以设想,如果这是有另外一台和这个数据库一模一样的数据库时,问题就不一样了,怎么才可以实现实时,并自动的备份或者复制呢?   Mysql的主从复制: 1.主机安装好mysql服务后,首先修改my.cnf文件,添加两行,其中server id确保唯一 2.备机修改my.cnf 3.两台mysql重

MySQL 主从复制(实时热备)原理与配置

MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术.MySQL主从复制可以做到实时热备数据.本文介绍MySQL主从复制原理及其配置过程. 术语:主从复制——master slave replication(M-S模式). 用途 备份 读写分离 高可用和故障切换(需要做HA) MySQL升级测试 原理 实际上,它的原理思路很简单.MySQL 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的