简介

keepalived是基于VRRP协议的,全称 Virtual Redundent Routing Protocal 虚拟路由协议,为解决静态路由单点故障引起的网络失效问题设计的一套主备协议

两台互为主备的MySQL服务器运行keepalived,master会向backup节点发送广播信号,当backup节点接收不到master发送的VRRP,会认为master宕机,这时会根据VRRP优先级

选举一个backup来充当master,这个master就会持有vip(对外应用连接IP地址),从而保证线上现有业务的正常运行,高可用完美体现出来

VRRP优先级用0-255来表示,数字越小优先级越低,0代表master放弃持有vip,255表示master持有最高优先级&vip

VRRP中还有一个vrid(虚拟路由标识),同组机器内的vrid必须一致

keepalived服务启动之后有3个进程,watch dog,vrrp,Health-check

vrrp 切换服务    health-check 检查服务器  watch-dog 监控check,vrrp进程

集群搭建思路:

1)2台MySQL服务器互为主从,都可读写 其实就是一台服务器A负责数据的写入,另一台服务器B作为备用

2)使用yum安装keepalived软件包

3)整理好keepalived配置文件,理清keepalived 3种状态,+一个MySQL监控脚本,以便检测宕机,从而顺利切换

4)2台服务器配置keepalived参数种,state都要选择backup + nopreempt这种非抢占模式,避免出现脑裂

实验部署:

A: 192.168.139.144

B: 192.168.139.145

VIP(虚拟IP):  192.168.139.160  ====> 可以通过该IP访问集群的主mysql

注意事项:

1)防火墙必须关闭或者开发数据库端口

2)2台服务器的MySQL配置中server-id 不能一样,否则会报1593 主从同步错误

前提:2台服务器搭建MySQL,版本 5.7.22  ;按照步骤略

步骤一,搭建主主MySQL

1)创建主从同步账号(A,B都执行,且命令相同)

mysql>create user 'bak'@'192.168.139.%' identified by '123456';

mysql>grant replication slave on *.* to 'bak'@'192.168.139.%';

mysql>flush privileges;

2)备库配置同步

mysql>change master to master_host='192.168.139.144',master_user='bak',master_password='123456',master_auto_position=1;

如果报gtid_mode没有为ON

解决办法:

  查看当前状态show variables like "%gtid_mode%"   ,我这边显示为off

  mysql>set global gtid_mode=off_permissive

  mysql>set global gtid_mode=on_permissive

  mysql>set global  ENFORCE_GTID_CONSISTENCY=on

   mysql>set global gtid_mode=on

打开主从同步开关:

start slave;

查看主从状态:

show slave status\G;

从库2个线程slave_io_running:yes    slave_sql_running:yes   ====>代表正常

3)主库配置主从

mysql>change master to master_host='192.168.139.145',master_user='bak',master_password='123456',master_auto_position=1

开启主从开关:

mysql>start slave;

查看主从状态

mysql>show slave status\G;

从库2个线程slave_io_running:yes    slave_sql_running:yes   ====>代表正常

步骤二,安装keepalived

两台服务器上都安装keepalived

yum install -y keepalived

步骤三,编写MySQL检测脚本

cd /etc/keepalived/

vim checkmysql.sh

内容如下:#!/bin/bash
mysqlstr=/usr/local/mysql/bin/mysql
host=192.168.139.145     ====>host A B 使用各自的IP,密码也是
user=bak
password=123456
port=3306
#####mysql 正常状态为1  否则为0
mysql_status=1
####check mysql status
$mysqlstr -h $host -u $user -p$password -P $port -e "show status;"  > /dev/null 2>&1
if [ $? = 0 ];then
echo "mysql_status=1"
        exit 0
else
/etc/init.d/keepalived stop
fi

步骤四,配置keepalived

vim /etc/keepalived/keepalived.conf

#####################设置一个脚本检测MySQL状态,脚本执行间隔为10s 比较合理

vrrp_script vs_mysql_100 {  ====>注意格式,这里的 { 必须在这里,否则会报错,且有一个空格  ====》主备的函数名称最好也要有区别

script "/etc/keepalived/checkmysql.sh"

interval 10

}

#####################

vrrp_instance VI_100 {  ####集群名称(A,B不一致)####

state BACKUP               #####指定keepalived角色,master为主,backup为备,这里2台机器都设置为backup,以免脑裂现象

nopreempt                     #######设置为资源不抢占模式

interface eth0                 ###VIP 绑定的网卡

virtual_route_id 100       ##vrid 的值100,2台机器必须一致

priority 100                     ###优先级,数值越大,优先级越高

advert_int 5                   #####主备之间同步检查时间间隔,设置为5S

authentication {

auth_type PASS

auth_pass 1314         #######验证密码,主备保持一致

}

track_script {

vs_mysql_100             ######调用监控函数,执行监控服务

}

virtual_ipaddress {

192.168.139.160    ####虚拟IP即VIP

}

}

五,启动&检查keepalived

主服务器上执行: /usr/sbin/keepalived   ====》启动后等待几秒,再查看IP

查看日志: cat /var/log/message

检查主服务器上IP信息: ip a ====> 可以看见虚拟IP生成

从服务器执行:/usr/sbin/keepalived

六,验证

其他服务器:

mysql -u bak -p123456 -h 192.168.139.160   ====》连接不上关闭防火墙

进行MySQL后执行\s

可以看见连接数据库是通过虚拟IP(192.168.139.160)实现的

关闭主服务器的MySQL,连接会出现短时间的中断,当VIP漂移至备服务器时,连接恢复

附:如果日志有报错,检查配置文件是否存在格式不对||拼写错误

keepalived+双主架构的更多相关文章

  1. 企业Nginx+Keepalived双主架构案例实战

    通过上一次课程的学习,我们知道Nginx+keepalived主从配置,始终有一台服务器处于空余状态,那如何更好的利用起来呢,我们需要借助Nginx+keepalived双主架构来实现,如下图通过改装 ...

  2. keepalived+双主架构部署

    在高可用集群环境中,keepalived使用的是VIP,利用keepalived自带的服务监控功能和自定义脚本来实现MYSQL故障时自带切换. Keepalived基于VRRP协议,虚拟冗余路由协议, ...

  3. Nginx+Keepalived双主架构实现

    Keepalived+Nginx实现高可用Web负载均衡 Master 192.168.0.69 nginx.keepalived Centos7.4backup 192.168.0.70 nginx ...

  4. Centos7+nginx+keepalived集群及双主架构案例

    目录简介 一.简介 二.部署nginx+keepalived 集群 三.部署nginx+keepalived双主架构 四.高可用之调用辅助脚本进行资源监控,并根据监控的结果状态实现动态调整 一.简介 ...

  5. keepalived+双主实践HA

    工作不怎么忙,搞点儿开发吧差点儿事,就想着弄点儿架构的事儿.正好前段时间看过关于keepalived+双主实现高可用的文章,也恰好身边的朋友所在的公司也部分用这个架构.没什么事儿就搞搞吧,正好对比下M ...

  6. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  7. MySQL系列详解七:MySQL双主架构演示-技术流ken

    前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mys ...

  8. Mysql+Keepalived双主热备高可用操作记录

    我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...

  9. [转] Haproxy、Keepalived双主高可用负载均衡

    http://blog.chinaunix.net/uid-25266990-id-3989321.html 在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepaliv ...

随机推荐

  1. POJ 1179 - Polygon - [区间DP]

    题目链接:http://poj.org/problem?id=1179 Time Limit: 1000MS Memory Limit: 10000K Description Polygon is a ...

  2. TensorRT优化过程中的dropout问题

    使用tensorRT之前,你一定要注意你的网络结构是否能够得到trt的支持,无论是CNN还是RNN都会有trt的操作. 例如:tf.nn.dropout(features, keep_prob),tr ...

  3. Hot Plug Detection, DDC, and EDID

    Hot Plug Detection, DDC, and EDID DataPro Tech Info > Hot Plug Detection, DDC, and EDID Hot Plugg ...

  4. 使用c#反射实现接口可视化调试页面

    直接上代码,引用CommTools.dll.包括aspx显示页面和aspx.cs获取反射数据源代码 using System; using System.Collections.Generic; us ...

  5. 上传本地代码到github&&从github下载源码

    最近在玩github,下面简单介绍下githup的使用 将本地代码同步到github. 使用Git GUI同步  1,先下载git,然后安装.右键如图所示. 2,在github里新建一个 reposi ...

  6. 基于VUE,VUX组件开发的网易新闻页面搭建过程

    根据妙味课堂上的一个教程练习总结,供自己复习用 一.功能介绍 一个网易新闻客户端的浏览页面,通过网易新闻的api接口实时获取新闻数据,用vux搭建样式框架,以轮播图,文字滚动,图文列表等形式把内容展示 ...

  7. MonkeyRunner_手机触摸屏幕坐标获取

    坐标单位为像素,获取方式包括手机自带.画图软件和photoshop软件. 方式一.android4.0以上系统手机自带坐标功能,在设置->开发者选项->显示指针位置 方式二.画图或phot ...

  8. bug:*** Collection <__NSArrayM: 0x1c444d440> was mutated while being enumerated.

    崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CAL ...

  9. c# string 扩展方法

    场景:只显示一字符串的前50个字符,多余的用“...”省略号替代 如果不用扩展方法当然也可以实现,写一个静态方法,如下: public class StringUtil { /// <summa ...

  10. java使用DateUtils对日期进行运算

    最近在写数据上传的程序,需要对Date进行一些数学运算,个人感觉在java中,日期的数学运算还是比较常用的,所以把Date的数学运算都玩了一下.试了一下,发现DateUtils这个工具类对于Date的 ...