使用Keepalived配置主从热备实现Nginx高可用(HA)
Keepalived 简要介绍
Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议,
VRRP 协议将两台或多台路由器设备虚拟成一个 设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,
或者是通过算法选举产生,MASTER 实现针对虚拟路由器 IP 的各种网络功能, 如 ARP 请求,ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,
除了接收 MASTER 的 VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。
VRRP 协议使用多播数据来传输 VRRP 数据,VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身 网卡的 MAC 地址,VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,
表示 MASTER 工作正常以及虚 拟路由器 IP(组),BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信 息,各 BACKUP 将宣告自己成为 MASTER,
发送通告信息,重新进行 MASTER 选举状态。
Keepalived + Nginx 方案图

Nginx相关环境基于上篇Nginx安装博客的配置;
Keepalived 安装
通过yum安装:
yum install -y keepalived
耐心等待安装完毕。
安装完毕后 会生成 /etc/keepalived 目录
相关命令:
service keepalived start #启动服务
service keepalived stop #停止服务
service keepalived restart #重启服务
Keepalived 配置
防火墙添加arrp组播规则,或关闭防火墙
iptables:
vi /etc/sysconfig/iptables
-A INPUT -p vrrp -d 224.0.0.18/ -j ACCEPT
firewall:
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT --in-interface enp4s0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
关闭selinux:(此处包含一个无敌天坑:如果不关闭此项,配置成功后关掉keepalived服务vip会正常切换,但若关闭服务器vip则不会切换,妈的坑了好久。。。)
vi /etc/sysconfig/selinux
#修改:
SELINUX=disabled
#setenforce
keepalived 的所有功能都是通过配置 keepalived.conf文件来实现的。
建议备份一下keepalived.conf文件重新添加一个新文件填写或者清空keepalived.conf文件重新填写。
抢占模式配置
红色字体为不同配置
Master节点:
global_defs {
router_id nginx_01 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 ,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval #每2秒检测一次nginx的运行状态
weight - #失败一次,将自己的优先级-
}
vrrp_instance VI_1 {
state MASTER # 状态,主节点为MASTER,备份节点为BACKUP
interface eno16777736 # 绑定VIP的网络接口,通过ip add查看自己的网络接口
virtual_router_id # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 192.168.60.131 # 本机IP地址(80端口已配置好nginx)
priority # 节点优先级,值范围0~,MASTER要比BACKUP高
advert_int # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
192.168.60.200
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}
BackUp 节点:
global_defs {
router_id nginx_02 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 ,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval #每2秒检测一次nginx的运行状态
weight - #失败一次,将自己的优先级-
}
vrrp_instance VI_1 {
state BACKUP # 状态,主节点为MASTER,备份节点为BACKUP
interface eno16777736 # 绑定VIP的网络接口,通过ip add查看自己的网络接口
virtual_router_id # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 192.168.60.133 # 本机IP地址(80端口已配置nginx)
priority 90 # 节点优先级,值范围0~,MASTER要比BACKUP高
advert_int # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
192.168.60.200
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}
创建nginx服务检测脚本
分别在主备服务器/etc/keepalived目录下创建nginx_check.sh脚本,并为其添加执行权限chmod +x /etc/keepalived/nginx_check.sh。
用于keepalived定时检测nginx的服务状态,如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备份机器上。
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq ];then
/usr/local/nginx/sbin/nginx #尝试重新启动nginx
sleep #睡眠2秒
if [ `ps -C nginx --no-header | wc -l` -eq ];then
killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
fi
fi
配置完毕,分别启动主从服务器keepalived服务
service keepalived start
ps aux | grep keepalived
两节点的启动情况

查看vip绑定情况
ip add
主节点:

BackUp节点:

测试vip漂移
停止Master上的keepalived服务

BackUp节点:

重新开启Master的keepalived服务再次看下vip绑定情况:

BackUp:

实现抢占式配置。
非抢占模式
Master 节点修改配置文件:
global_defs {
router_id nginx_01 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 ,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval #每2秒检测一次nginx的运行状态
weight - #失败一次,将自己的优先级-
}
vrrp_instance VI_1 {
state MASTER # 状态,主节点为MASTER,备份节点为BACKUP
interface eno16777736 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
virtual_router_id # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 192.168.60.131 # 本机IP地址
priority # 节点优先级,值范围0~,MASTER要比BACKUP高
advert_int # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
#非抢占式
nopreempt
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
192.168.60.200
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}
BackUp节点修改配置文件:
global_defs {
router_id nginx_02 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 ,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval #每2秒检测一次nginx的运行状态
weight - #失败一次,将自己的优先级-
}
vrrp_instance VI_1 {
state BACKUP # 状态,主节点为MASTER,备份节点为BACKUP
interface eno16777736 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
virtual_router_id # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 192.168.60.133 # 本机IP地址
priority 100 # 节点优先级,值范围0~,MASTER要比BACKUP高
advert_int # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
#非抢占式
nopreempt
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
192.168.60.200
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}
红色为修改部分,从中可看出backup节点需要把优先级设置与master节点一样。
重启两个节点的keepalived服务,再次断开Master节点keepalived服务,vip漂移到BackUp节点,然后再开启Master节点keepalived服务:
Master:

BackUp:

Master没有抢占过去,非抢占式配置成功。
最后看下keepalived与nginx的配置成果:

使用Keepalived配置主从热备实现Nginx高可用(HA)的更多相关文章
- Lvs+keepalived+mysql主从热备
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- nginx:负载均衡实战(四)nginx+keepalived配置双机热备
1.下载安装 下载keepalived地址:http://www.keepalived.org/download.html 解压安装: tar -zxvf keepalived-.tar.gz 安装o ...
- tomcate+keepalived配置双机热备
环境清单: 应用1:192.168.51.101 应用2:192.168.51.75 虚拟IP:192.168.51.179 一.安装Tomcat(参照其他文档): 二.部署应用,并修改响应的端口(9 ...
- 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题. 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像 ...
- Centos7 Mysql 双机热备实现数据库高可用
mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器. 双机热备的条件是双机mysql版本必须一致. 服务器分 ...
- Mysql双机热备实现数据库高可用
mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器. 双机热备的条件是双机mysql版本必须一致. 服务器分 ...
- docker toolbox的redis 配置主从及哨兵模式保证高可用
redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一 主从模式1 搜索redis镜像 docker search redis2 拉取镜像docker pul ...
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- Nginx+Keepalived主从配置(双机主从热备)+Tomcat集群
拓扑环境 以下表格是这次測试须要的拓扑环境,几台server.每台server上安装什么,都有介绍. server名称 系统版本号 预装软件 IP地址/VIP Nginx主server CentOS ...
随机推荐
- JMeter-生成性能测试结果报告
1.将jmeter添加至环境变量,验证环境是否配置完毕: 终端输入jmeter,如果返回如下信息并启动jmeter说明环境已配置好了 2.修改配置文件 查找“Results file configur ...
- Pocket Gems面经prepare: Diamond and Ruby
说我有一个背包,有n个格子,一个格子可以放5个钻石,一个钻石10块钱,一个格子可以放5个ruby,一个ruby 5块钱, 一个格子可以放一个装备,一个装备25块钱. 然后给你n个钻石n个ruby n个 ...
- spark MLlib实现的基于朴素贝叶斯(NaiveBayes)的中文文本自动分类
1.自动文本分类是对大量的非结构化的文字信息(文本文档.网页等)按照给定的分类体系,根据文字信息内容分到指定的类别中去,是一种有指导的学习过程. 分类过程采用基于统计的方法和向量空间模型可以对常见的文 ...
- 关于IE浏览器 ajax 请求返回数据不对的问题
在使用ajax向后台发送请求的时候,在使用ie 进行调试的时候发现根据条件进行查询时,返回的数据与没有根据条件进行查询时数据相同,也就是条件没有发生作用. 经过同事的帮助发现ajax初始化设置时没有c ...
- JavaScript之jsx&react
1.Virtual DOM 1.将网页所有内容映射到一颗树形结构的层级对象模型上,浏览器提供对dom的支持,用户可以是用脚本调用dom,api来动态修改dom节点,从而达到修改网页目的,这种修改是浏览 ...
- Linux 故障问题处理
一. Debian 网卡问题 原因: 网卡提示 Device Not Managed 处理方法: . 编辑/etc/NetworkManager/NetworkManager.conf: 将其 ...
- angular 4 实战开发--安卓兼容问题(1)
首先我强调下我只是个菜鸟,大神不喜勿喷. 先介绍下项目背景,主要是公司的官网h5 ,架构用的是angular4 有点大材小用的赶脚,but ,公司要求. 在项目主功能做的差不多了.交给测试,这时候发现 ...
- 手把手教你如何安装Pycharm
手把手教你如何安装Pycharm——靠谱的Pycharm安装详细教程 今天小编给大家分享如何在本机上下载和安装Pycharm,具体的教程如下: 1.首先去Pycharm官网,或者直接输入网址: ...
- Saiku资源帖
一.精选 1.李秋 随笔分类 - pentaho 二.概述 1.Saiku + Kylin 多维分析平台探索 三.Saiku+Kylin 1.使用Saiku+Kylin构建多维分析OLAP平台 2.使 ...
- Java面向对象概述和三大特性
Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心.围绕着 Java 类和 Java 对象,有三大基本特性:封装是 Java 类的编写规范.继承是类与类之间联系的一种形式.而多态 ...