keepalived+MySQL双主搭建
server1:MySQL5.7.14+keepalived1.+172.16.16.34
server2:MySQL5.7.14+keepalived1.+172.16.16.35
VIP:172.16.16.20
我们两台机器是搭建的MySQL双主,我们平时只会通过VIP对MySQL进行读写,我们要实现的是,当VIP所在的主机的MySQLDOWN掉以后,VIP能够切换到另外一台机器上并且继续提供服务。
yum install -y keepalived
[root@localhost maxiangqian]# rpm -ql keepalived
[root@localhost maxiangqian]# vi /etc/keepalived/keepalived.conf
vrrp_instance VI_20 {
state BACKUP
nopreempt
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
172.16.16.20
}
}
/etc/init.d/keepalived start
[root@localhost maxiangqian]# ip addr |grep 172.16
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc mq state UP qlen
inet 172.16.16.34/ brd 172.16.16.255 scope global eth0
inet 172.16.16.20/ scope global eth0
/etc/init.d/keepalived stop
vrrp_script checkmysql {
script "/etc/keepalived/checkmysql.sh"
interval #监控脚本,每十秒运行一次
}
vrrp_instance VI_20 {
state BACKUP #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态
nopreempt #非抢占模式
interface eth0
virtual_router_id
priority #权重,同一个vrrp_instance的MASTER优先级必须比BACKUP高。我们使用非抢占模式,设置相同即可
advert_int #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒
authentication {
auth_type PASS #验证authentication。包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS
auth_pass
}
track_script { #执行定义的监控脚本
checkmysql
}
virtual_ipaddress {
172.16.16.20/
}
}
#!/bin/sh
#isok=$(sed -n '2p' /etc/keepalived/result.txt)
isok=$(/usr/local/mysql/bin/mysql -uroot -p123456 -e 'select 1' |sed -n '2p')
function error_query(){
service keepalived stop
echo "172.16.16.34 mysql down, keepalived 切换" | mail -s "34MySQL+keepalived通知" ma.xiangqian@sf-express.com
}
echo "$isok"
if [ "$isok" != "1" ]
then
#echo 'diaoyong error'
error_query
fi
现在我们执行以下语句,从新load以下keepalived的配置文件:
/etc/init.d/keepalived reload
server1和server2都要执行重新load一下新的配置文件,下面我们测试一下当server1 MySQL DOWN掉的话会发生什么:
server1:shutdown MySQL
server1和server2:tail -f /var/log/messages
server1信息:
May :: localhost Keepalived_healthcheckers[]: TCP connection to [172.16.16.34]: failed !!!
May :: localhost Keepalived_healthcheckers[]: Removing service [172.16.16.34]: from VS [172.16.16.20]:
May :: localhost Keepalived_healthcheckers[]: IPVS : Virtual service [172.16.16.20]: illegal timeout.
May :: localhost Keepalived_healthcheckers[]: Executing [/etc/keepalived/shutdown.sh #检测到服务down后执行的脚本] for service [172.16.16.34]: in VS [172.16.16.20]:
May :: localhost Keepalived_healthcheckers[]: Lost quorum -= > for VS [172.16.16.20]:
May :: localhost Keepalived_vrrp[]: VRRP_Script(checkmysql) failed
May :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_20) Entering FAULT STATE
May :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_20) removing protocol VIPs.
May :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_20) Now in FAULT state
May :: localhost Keepalived_healthcheckers[]: Netlink reflector reports IP 172.16.16.20 removed
server2信息:
May :: mxqmongodb2 Keepalived_healthcheckers[]: IPVS : Virtual service [172.16.16.20]: illegal timeout.
May :: mxqmongodb2 Keepalived_healthcheckers[]: Using LinkWatch kernel netlink reflector...
May :: mxqmongodb2 Keepalived_healthcheckers[]: Activating healthchecker for service [172.16.16.35]:
May :: mxqmongodb2 Keepalived_vrrp[]: VRRP_Script(checkmysql) succeeded
May :: mxqmongodb2 Keepalived_vrrp[]: VRRP_Instance(VI_20) Transition to MASTER STATE
May :: mxqmongodb2 Keepalived_vrrp[]: VRRP_Instance(VI_20) Entering MASTER STATE
May :: mxqmongodb2 Keepalived_vrrp[]: VRRP_Instance(VI_20) setting protocol VIPs.
May :: mxqmongodb2 Keepalived_vrrp[]: VRRP_Instance(VI_20) Sending gratuitous ARPs on eth0 for 172.16.16.20
May :: mxqmongodb2 Keepalived_healthcheckers[]: Netlink reflector reports IP 172.16.16.20 added
May :: mxqmongodb2 Keepalived_vrrp[]: VRRP_Instance(VI_20) Sending gratuitous ARPs on eth0 for 172.16.16.20
我们可以看到虚IP链接已经切换了,我们从客户端两个时间点执行MySQL的操作也可以很明显看到切换:
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
| |
+-------------+
row in set mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
| |
+-------------+
row in set
keepalived+MySQL双主搭建的更多相关文章
- MySQL 高可用性—keepalived+mysql双主(有详细步骤和全部配置项解释)
博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 前言:生产环境中一台mysql主机存在单 ...
- MySQL 高可用性—keepalived+mysql双主
MySQL 高可用性—keepalived+mysql双主(有详细步骤和全部配置项解释) - 我的博客 - CSDN博客https://blog.csdn.net/qq_36276335/articl ...
- 基于 MySQL 5.6 keepalived的双主搭建
环境介绍: 说明 IP 节点1 192.168.56.56 节点2 192.168.56.57 w_ip 192.168.56.6 安装keepalived tar -zxvf keepalived- ...
- Keepalived+MySQL双主
一.Keepalived+MySQL Replication的应用场景 MySQL的高可用方案有cluster,MMM,MHA等,这些高可用方案都要三台服务器以上,成本有点高,今天介绍一个低成本高可用 ...
- keepalived+mysql双主复制高可用方案
MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...
- nginx+mysql双主搭建
说明:mysql双主架构经过测试在生产环境中使用没有问题,但是还是建议使用读写分离, Mysql主主同步环境部署: centos 7.4 三台云主机:mysql1 :10.1.1.142 mysql2 ...
- keepalived+mysql双主热备
这里使用keepalived实现mysql的双主热备高可用 实验环境: 主机名 IP 系统版本 软件版本 master 192.168.199.6/vip:192.168.199.111 Rhel7. ...
- Keepalived + Mysql 双主
VIP 192.168.1.41 Master 192.168.1.42 Slave 192.168.1.43 .配置 yum -y install mysql-server chkconfig -- ...
- Keepalived+MySQL双主架构
l 架构准备 Node1 192.168.15.3 Node2 192.168.15.4 VIP 192.168.15.254 l 软件 MySQL 5.6 Keepalive yum insta ...
随机推荐
- Partition Array by Odd and Even
Partition an integers array into odd number first and even number second. Example Given [, , , ], , ...
- CSAPP阅读笔记-数组分配与访问-来自第三章3.8的笔记-P176-P183
这一节比较简单,仅记录几个比较重要的点: 1.C语言允许对指针进行运算,计算出的值会根据该指针引用的数据类型大小进行伸缩. 例子: 其中,xE是数组的起始地址.注意,指针运算时,若最终结果为指针,则指 ...
- mysql 02
CREATE TABLE emp(eid INT,ename VARCHAR(20),egender CHAR(2),ebirthday DATE,eemail CHAR(10),eramark VA ...
- linux mint 18.1 安装nvidia显卡驱动
原文地址 http://www.gamersonlinux.com/forum/threads/updating-nvidia-drivers-mint.1746/ 主要步骤很简答 就是将ppa仓库地 ...
- Win32 DPAPI加密编程
DPAPI函数是CryptoAPI中少有的简单易用的加密函数,调用过程简单,其调用接口几乎不涉及密码学概念.Win32 DPAPI有4个函数,它们分别是CryptProtectData.CryptUn ...
- mybatis学习之动态sql
mybatis的动态sql语句很强大,在mapper映射文件中使用简单的标签即可实现该效果,下面一个个记录: 1.select查询 简单的select类似如下: <select id=" ...
- [android] 练习使用ListView(三)
解决OOM和图片乱序问题 package com.android.test; import java.io.InputStream; import java.net.HttpURLConnection ...
- 同步ajax请求
/* * 发送同步ajax请求的函数 CreateBy 秋水 */ function syncAjax(data) { var resp = null; $.ajax({ type : "P ...
- javascript之Array()数组函数讲解
Array()是一个用来构建数组的内建构造器函数.数组主要由如下三种创建方式: array = new Array() array = new Array([size]) array = new Ar ...
- fzu 2136 取糖果 好几种方法解决。
Problem 2136 取糖果 Accept: 39 Submit: 101 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem ...