Nginx合集-高可用(LVS-DR)

LVS介绍

LVS 是 Linux Virtual Server 的简写,即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。此项目在 1998 年 5 月由章文嵩博士成立,是国内最早出现的自由软件项目之一,是根据 iptables 的实现来开发的,所以使用的时候会和 iptables 相类似

官网:The Linux Virtual Server Project

中文站点: LVS中文站点

LVS三种模式介绍

  1. NAT模式(网络地址映射)
  2. IP TUN模式(IP Tunneling IP隧道)
  3. DR模式(Direct Routing 直接路由)

不同的转发模式决定了不同的的网络结构

NAT模式

NAT 模式(即:网络地址映射)其工作原理是:客户端访问LVS时,LVS通过重写请求报文的目标地址,且根据预设的调度算法,将请求分派给后端真实服务器,真实服务器接收到请求处理后,发出响应报文也需要通过LVS返回,返回时需要修改报文的源地址,然后返回给客户,完成整个负载调度过程

  1. DNAT:目标地址转换,改变的是目标地址
  2. SNAT:源地址转换,改变的是源地址

NAT 模式就是使用 SNAT 和 DNAT 技术完成报的转发,NAT 方式可支持任何的操作系统,以及私有网络,并且只需一个 Internet IP 地址,非常节省成本,但是整个系统的性能受到限制。因为执行 NAT 每次需要重写数据包,有一定的延迟,另外,大部分应用有 80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对LVS形成很大压力,容易成为瓶颈

IP TUN模式

IP TUN(IP Tunneling 即 IP隧道)当 LVS 分配请求到不同的 real server,real server 处理请求后直接回应给用户,这样 LVS 仅处理客户机与服务器的一半连接。IP TUN 技术极大地提高了 LVS 的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过 100 个节点。real server 可以在任何 LAN 或 WAN 上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。但此模式要求所有服务器必须支持 IP 隧道协议,因此只能在 linux 下使用,在 windows 无法使用

DR模式

DR(即 Direct Routing 直接路由)与 IP TUN 类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性,DR 与 IP TUN 相比,没有 IP 封装的开销,但由于采用物理层(修改 MAC地址)技术,所有服务器都必须在同一个局域网

DR 和 IP TUN 的区别:

DR 与 IP TUN 相比,没有 IP 封装的开销,但由于采用数据链路层(修改 MAC地址)技术,所有服务器都必须在一个物理网段

三种模式对比


NAT模式

IP TUN模式

DR模式

对服务器要求

任何操作系统均支持

必须支持IP隧道协议,目前只有Linux支持

支持虚拟网卡,且可以禁用ARP响应

网络要求

局域网

局域网或广域网

局域网

支持的节点数

10~20个,视Director处理能力而定

可以支持到100个节点

可以支持到100个节点

安全性

较高,可隐藏real server

较差,real server 容易暴露

较差,real server 容易暴露

IP要求

仅需要一个合法IP地址作为VIP

除VIP外,每个服务器需要拥有合法IP地址可以直接路由至客户端

除VIP外,每个服务器需要拥有合法IP地址可以直接路由至客户端

拓展性

很好

特点

地址转换

封装IP

修改MAC地址

LVS配置实践

LVS-DR(直接路由)+ NGINX ——负载均衡集群部署及测试案例

环境准备

操作系统

IP

角色

备注

centos7 7.9.2009

10.0.53.77

vip虚拟ip



10.0.53.75

lvs



10.0.53.81

nignx-1



10.0.53.82

nignx-2



10.0.53.83

nignx-3


LVS服务器配置(10.0.53.75)

从Linux2.4内核及以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能

uname -r
find /lib/modules/$(uname -r)/ -iname "**.ko*" | cut -d/ -f5-  | grep ip_vs

安装LVS管理工具:ipvsadm

yum -y install ipvsadm
ipvsadm -v

虚拟ip配置

在ens192设备上绑定了一个虚拟设备ens192:0,同时设置了一个虚拟IP是10.0.53.77,然后指定广播地址也为10.0.53.77

虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255;因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。

ifconfig ens192:0 10.0.53.77 broadcast 10.0.53.77 netmask 255.255.255.255 up
#需要安装net-tools工具

服务器添加路由规则

route add -host 10.0.53.77 dev ens192:0

启用内核系统的包转发功能

echo "1" >/proc/sys/net/ipv4/ip_forward

清除原有lvs转发规则

ipvsadm --clear

添加虚拟IP规则(-s rr表示采用轮询策略, :80表示负载转发的端口是80)

ipvsadm -A -t 10.0.53.77:80 -s rr

在虚拟IP中添加服务规则

在新加虚拟IP记录中添加三条新的Real Server记录,-g表示指定LVS 的工作模式为直接路由模式;
注意: lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口一致,这里都使用了80端口

ipvsadm -a -t 10.0.53.77:80 -r 10.0.53.81:80 -g
ipvsadm -a -t 10.0.53.77:80 -r 10.0.53.82:80 -g
ipvsadm -a -t 10.0.53.77:80 -r 10.0.53.83:80 -g

重启LVS

ipvsadm

nginx服务器配置(10.0.53.81、82、83)

nginx安装配置(略)

额外配置

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

在每个回环设备上绑定了一个虚拟IP地址

ifconfig lo:0 10.0.53.77 broadcast 10.0.53.77 netmask 255.255.255.255 up

添加路由规则

route add -host 10.0.53.77 dev lo:0

关闭arp解析

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

启动nginx

测试

IP轮询验证

浏览器访问虚拟ip:10.0.53.77,观察响应的后端nginx的ip

编辑

编辑

编辑

健康检查验证

停掉一个nginx服务测试:LVS具有健康检测机制,不会丢请求

关停10.0.53.81

编辑

不再访问10.0.53.81

编辑

编辑

重启10.0.53.81

编辑

重新访问10.0.53.81

编辑

参考文档

https://zhuanlan.zhihu.com/p/445202915

相关文章

CentOS Nginx安装及配置

安装在 CentOS 上,可直接使用 yum 来安装 Nginxyum install nginx -y扩展: 卸载用 yum remove nginx启动安装完成后,使用 nginx 命令启动 Ng...

windows下安装nginx,并注册为系统服务,开机自启动

1.官网地址:http://nginx.org/en/download.html选择windows版的最新稳定版,如下图2.下载:点击下载链接得到:nginx-1.20.1.zip;使用解压工具进行解...

离线状态下安装 Nginx 各个模块?这篇攻略让你轻松搞定

你是不是也在为离线状态下安装 Nginx 各个模块而发愁?在互联网大厂后端开发工作中,我们常常会遇到一些特殊的网络环境,比如公司内部的离线服务器,或是处于隔离状态的测试环境。当需要在这些离线环境中安装...

后端开发必看!没网也能在 Linux 服务器上安装 Nginx 的神操作

在互联网大厂后端开发的日常工作里,不少人都遇到过 “紧急时刻”—— 需要在没有网络的 Linux 服务器上安装 Nginx 服务。望着空白的网络连接状态,一时间不知道从何下手?别着急!今天就手把手教你...

nginx如何安装使用

nginx是什么?Nginx,简称为"engine x",是一个高性能的HTTP和反向代理web服务器,同时也Nginx,简称为"engine x",是一个高性能的HT...

一步步教你使用 docker 快速安装实用的 nginx 服务器

nginx 是一款高性能的 web 服务器,支持反向代理、负载均衡、静态资源管理,非常实用。使用 docker 安装 nginx 非常简便,不仅可以快速启动服务,因为容器特性,有良好的隔离性,还方便管...