Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实战 | Nginx+keepalived 实现高可用集群

实战 | Nginx+keepalived 实现高可用集群

原创
作者头像
开源Linux
修改于 2020-05-11 06:19:01
修改于 2020-05-11 06:19:01
1.5K0
举报
文章被收录于专栏:开源Linux开源Linux

前言

今天通过两个实战案例,带大家理解Nginx+keepalived 如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点:

给小白的 Nginx 10分钟入门指南

Nginx编译安装及常用命令

Nginx 配置文件详解

一文带你读懂Nginx反向代理

一文彻底读懂nginx中的location指令

Nginx负载均衡原理及配置实例

Nginx为什么快到根本停不下来?

Keepalived入门学习

Keepalived高可用服务配置实例

Nginx+Keepalived 高可用集群(主从模式)

集群架构图

注意:Keepalived服务器同样是nginx负载均衡器

1、准备四台机器

本实验系统均使用Centos 7.5,在所有节点进行以下操作:

代码语言:txt
AI代码解释
复制
// 查看操作系统
[root@LB-01 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

//关闭并禁用防火墙
[root@LB-01 ~]# systemctl stop firewalld
[root@LB-01 ~]# systemctl disable firewalld

//关闭selinux
[root@LB-01 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
[root@LB-01 ~]# setenforce 0

//安装nginx
yum -y install nginx
  若提示,无安装包,则需要安装epel扩展源:
   yum -y install epel-release 

2、配置后端web服务器

2.1)修改web01节点网站根目录默认文件

代码语言:txt
AI代码解释
复制
[root@web01 ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html

2.2)修改web02节点网站根目录默认文件

代码语言:txt
AI代码解释
复制
[root@web01 ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html

通过nginx主配置文件,可以看出nginx网站根目录文件默认是:/usr/share/nginx,如下:

2.3)启动nginx服务

代码语言:txt
AI代码解释
复制
//web01
[root@web01 ~]# systemctl start nginx

//web02
[root@web02 ~]# systemctl start nginx

2.4)验证

主机web01和web02已配置成web服务器

3、配置LB服务器

LB服务器需同时部署nginx和Keepalived服务,以下操作均在两台LB节点执行:

3.1)配置nginx反向代理服务

代码语言:txt
AI代码解释
复制
  编辑nginx主配置文件:`/etc/nginx/nginx.conf`

启动nginx服务;验证效果:

访问LB01:

访问LB02:

如图所示,LB01和LB02均可轮询访问后端web节点,即表示nginx LB集群搭建成功。

3.2)配置Keepalived服务

(1)安装Keepalived

代码语言:txt
AI代码解释
复制
yum -y install keepalived

(2)配置Keepalived服务

这里直接提供LB01与LB02两者配置文件差异对比,方便读者阅读:

代码语言:txt
AI代码解释
复制
vim /etc/keepalived/keepalived.con
左:LB01 右:LB02
左:LB01 右:LB02

(3)谁是主Keepalived?

通过上图得知,LB01优先级高于LB02,因此VIP绑定在LB01上:

代码语言:txt
AI代码解释
复制
[root@LB-01 ~]# ip a | grep 192.168.1.110
    inet 192.168.1.110/24 scope global secondary eth0:1
4、域名解析

由于不是真实环境,域名使用www.test.com用作测试,所以www.test.com的解析只能在客户机hosts文件设置。具体步骤如下:

打开:

C:\Windows\System32\drivers\etc\hosts

在末尾添加:

192.168.1.110 www.test.com

注意:这里的IP指定的是浮动IP,即通过客户端通过VIP访问web业务

5、测试验证


关闭LB01节点的keepalived服务。再次访问:

发现已然可以通过域名进行访问,只是此时VIP已绑定在LB02上,如下所示:

代码语言:txt
AI代码解释
复制
[root@LB-02 ~]# ip a | grep 192.168.1.110
    inet 192.168.1.110/24 scope global secondary eth0:1
[root@LB-02 ~]#

到此,Nginx+Keepalived 高可用集群(主从)就搭建完成了。

Nginx+Keepalived 高可用集群(双主模式)

将keepalived做成双主模式,其实很简单,就是再配置一段新的vrrp_instance(实例)规则。

集群架构图:

说明:还按照上面的环境继续做实验,只是修改LB节点上面的keepalived服务的配置文件即可。

此时LB-01节点既为Keepalived的主节点也为备节点,LB-02节点同样既为Keepalived的主节点也为备节点。

LB-01节点默认的主节点VIP(192.168.1.110),LB-02节点默认的主节点VIP(192.168.1.210)

1、配置 LB-01 节点

代码语言:txt
AI代码解释
复制
增加一段vrrp_instance VI_2实例规则:

vim /etc/keepalived/keepalived.conf

2、配置 LB02 节点

vim /etc/keepalived/keepalived.conf

3、重启Keepalived服务

代码语言:txt
AI代码解释
复制
//LB-01
[root@LB-01 ~]# systemctl restart keepalived

//LB-02
[root@LB-02 ~]# systemctl restart keepalived

4、查看VIP绑定情况

代码语言:txt
AI代码解释
复制
//LB-01
[root@LB-01 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq 
    inet 192.168.1.31/24 brd 10.43.1.255 scope global eth0
    inet 192.168.1.110/24 scope global secondary eth0:1

//LB-02
[root@LB-02 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq 
    inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0
    inet 192.168.1.210/24 scope global secondary eth0:2

5、高可靠验证

代码语言:txt
AI代码解释
复制
 停止LB-01节点的keepalived再次测试
代码语言:txt
AI代码解释
复制
此时VIP都绑定在LB-02上
代码语言:txt
AI代码解释
复制
[root@LB-02 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq 
    inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0
    inet 192.168.1.110/24 scope global secondary eth0:1
    inet 192.168.1.210/24 scope global secondary eth0:2

测试可以发现我们访问keepalived中配置的两个VIP都可以正常调度,当我们停止任意一台keepalived节点,同样还是正常访问;到此,nginx+keepalived+高可用集群(双主模式)就搭建完成了。

编写Nginx Web服务的守护脚本

以上实验测试有一个问题就是,我们是用Nginx做负载均衡分发请求的数据包的。如果主节点的Keepalived服务正常运行,而Nginx运行异常,那么将会出现Nginx负载均衡服务失灵,无法切换到Nginx负载均衡器02上,后端的Web服务器无法收到请求。所以,我们应该要检测Nginx的服务是否正常运行,如果不是正常运行,应该停掉Keepalived的服务,这样才能自动切换到备节点上。

我们可以通过检测80端口是否开启来判定Nginx的运行情况,2秒钟检测一次,脚本如下:

代码语言:txt
AI代码解释
复制
#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
    /etc/init.d/keepalived stop
fi
sleep 2
done

结语

欢迎关注微信公众号『开源Linux』,专注于分享Linux/Unix相关内容,包括Linux运维、Linux系统开发、网络编程、以及虚拟化云计算等技术干货。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
keepalived
  keepalived高可用对之间是通过VRRP协议通信的,VRRP协议是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会获得所有的资源,备节点处于等待状态,当主挂了时候,备节点,接管主节点的资源,然后顶替主节点对外提供服务。 VRRP协议是通过IP多播包的方式(224.0.0.18)发送的。   在keepalived之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度可以小于1秒。VRRP使用加密协议加密发送广播包。
云计算小黑
2021/06/16
6760
keepalived实现服务高可用
惨绿少年
2017/12/27
2.7K0
keepalived实现服务高可用
Keepalived高可用、四层负载均衡
通常做法是给路由器增加一台备节点,但是问题是,如果我们的主网关master故障了,用户是需要手动指向backup的,如果用户过多修改起来会非常麻烦。
HammerZe
2022/03/25
7240
Keepalived高可用、四层负载均衡
配置Keepalived+Nginx高可用
Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
陳斯托洛夫斯記
2024/08/07
3650
Nginx+keepalived高可用配置实战(内附彩蛋)
如果实际生产环境中当keeplived主的服务器nginx服务宕机,但是主又有VIP,这时就出现无法访问的现象,因此可以做如下的配置,使得这种情况可自已切换
民工哥
2020/09/16
7700
Nginx+keepalived高可用配置实战(内附彩蛋)
Keepalived高可用介绍与配置详解
Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
星哥玩云
2022/07/26
3620
第十章·Nginx高可用-Keepalived
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
4020
第十章·Nginx高可用-Keepalived
Nginx+keepalived实现高可用
环境: [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@db02 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) keepalived软件介绍 keepalived软件能干什么?   Keepalived软件起初是专为LVS负载均衡软件
863987322
2018/01/24
9330
Nginx+Keepalived 集群高可用
为保证业务7*24小时不间断运行从而提供高效、稳定、可靠的信息化服务,前端采双Nginx+Keepalived,Nginx反向代理到后端文件集群实现负载均衡(Load Balancing),Keepalived实现集群高可用(High Available),主Nginx故障后虚拟IP自动漂移到备Nginx。
Kevin song
2021/03/24
1.3K0
Nginx+Keepalived 集群高可用
Keepalived高可用集群(双主)
Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。
jwangkun
2021/12/23
9860
Keepalived高可用集群(双主)
深入浅出 LVS 负载均衡(四)实操 DR 模型、Keepalived DR 模型的高可用
本系列按照负载均衡器对数据包的处理方式分类,从计算机间通信的角度出发,浅谈 NAT、FULLNAT、DR、TUN 模型的实现原理。
CNCF
2021/07/07
7460
超哥带你部署高可用负载均衡
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
超蛋lhy
2020/06/11
1.1K0
Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
Nginx、LVS、HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能。 1)在四层(tcp)实现负载均衡的软件: lvs------>重量级 nginx------>轻量级,带缓存功能,正则表达式较灵活 haproxy------>模拟四层转发,较灵活 2)在七层(http)实现反向代理的软件: haproxy------>天生技能,全面支持七层代理,会话保持,标记,路径转移; nginx------>只在ht
洗尽了浮华
2018/01/22
9.4K0
Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
【Nginx】如何搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
3.6K0
【Nginx】如何搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!
Mysql双主热备+LVS+Keepalived高可用操作记录
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障。然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换。前面介绍了Mysql+Keepalived双主热备高可用方案记录,那篇文档里没有使用到LVS(实现负载均衡),而下面要介绍的就是如何通过Keepalived+LVS方式来是实现MySQL的高可用性,利用LVS实现MySQ
洗尽了浮华
2018/01/22
3.1K0
Mysql双主热备+LVS+Keepalived高可用操作记录
LVS+Keepalived高可用环境部署梳理(主主和主从模式)
在介绍LVS之前,先介绍下集群的概念 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。 集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群 计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务。 说的直白点,其实集群:就是一
洗尽了浮华
2018/01/22
4.8K0
LVS+Keepalived高可用环境部署梳理(主主和主从模式)
Nginx+keepalived主从与双主架构总结
keepalived会定期向服务器群中的服务器发送一个ICMP的数据包,如果发现某台服务器的IP地址无法ping通,keepalived便报告这台服务器失效,并将它从服务器集群中剔除。
好派笔记
2021/09/15
1.4K0
keepalived配置高可用(上)
编写脚本,keepalived是根据返回值判断的,所以这里直接grep进程名,能查到返回0,否则返回1 让keepalived每5秒运行一次脚本,2次都返回1则认为httpd服务挂掉了,则降低优先级,释放vip。
陈不成i
2021/07/08
4990
LVS+Keepalived实现四层负载及高可用
最近要上线一个新项目,需要软负载,本来决定用nginx做反向代理,但装完nginx以后,发现nginx无法显示css、js,目前还在研究中,但由于项目较急,所以依然采用了经典架构LVS+Keepalived来实现。
星哥玩云
2022/07/04
6200
nginx+keepalived 双机热备
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短。
随心助手
2019/10/15
1.7K0
nginx+keepalived 双机热备
相关推荐
keepalived
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入[游戏服务器] 腾讯云官方交流站
游戏服运维小技巧 常见问题齐排查
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档