基于 openEuler 构建 LVS-DR 群集

LVS(Linux Virtual Server)即 Linux 虚拟服务器,是一个由章文嵩博士发起的自由软件项目,它的基本工作原理是在集群的前端使用一台负载均衡器,将用户的请求转发到后端的一组服务器上执行,而这台负载均衡器对用户来说是透明的,用户并不会察觉到后端服务器的存在。NAT(Network Address Translation)模式和 DR(Direct Routing)模式是 LVS 负载均衡群集中常用的两种工作模式,它们各自的优势如下:

NAT 模式的优势

  1. 易于部署和管理:NAT 模式下,负载均衡器作为所有客户端请求的入口和出口,后端服务器只需要配置内部私有 IP 地址,无需公网 IP 地址。这样可以方便地对后端服务器进行管理和维护,添加、删除或更换服务器时,只需要在负载均衡器上进行相应的配置即可,无需对外部网络进行过多的调整。例如,企业内部的服务器集群,后端服务器使用私有 IP 地址,通过负载均衡器的 NAT 转换与外部网络进行通信,管理起来较为简单。
  2. 良好的安全性:后端服务器隐藏在负载均衡器之后,外界只能看到负载均衡器的公网 IP 地址,无法直接访问后端服务器的内部 IP 地址,减少了后端服务器暴露在公网上的风险,降低了被攻击的可能性。比如,对于一些对安全性要求较高的应用,如金融交易系统,使用 NAT 模式可以有效保护后端服务器的安全。
  3. 支持端口映射:NAT 模式可以灵活地进行端口映射,将客户端请求的不同端口映射到后端服务器的不同端口上。这对于一些需要使用特定端口的应用非常有用,例如,将客户端对 8080 端口的请求映射到后端服务器的 80 端口上,方便对应用进行管理和部署。
  4. 适用于小规模网络:在小规模的网络环境中,NAT 模式的性能开销相对较小,因为所有的请求和响应都经过负载均衡器进行地址转换,处理流程相对简单。对于一些访问量不是很大的网站或应用系统,NAT 模式可以满足需求,并且成本较低。

DR 模式的优势

  1. 高性能:DR 模式中,负载均衡器只负责将请求的目的 MAC 地址修改为后端服务器的 MAC 地址,然后将请求转发出去,而响应数据包则直接从后端服务器返回给客户端,无需经过负载均衡器。这样大大减少了负载均衡器的流量压力,提高了系统的整体性能和吞吐量,适用于高并发、大流量的应用场景。例如,大型电商网站在促销活动期间,会有大量的用户访问,使用 DR 模式可以有效地处理这些请求。
  2. 低延迟:由于响应数据包直接从后端服务器返回给客户端,避免了在负载均衡器上的再次处理和转发,减少了数据传输的延迟。对于对延迟敏感的应用,如在线游戏、实时通信等,DR 模式可以提供更好的用户体验。
  3. 后端服务器扩展性好:DR 模式下,后端服务器可以使用公网 IP 地址或者与负载均衡器在同一网段的私有 IP 地址,并且可以很方便地添加或删除后端服务器,只需要保证后端服务器的 IP 地址与负载均衡器的 IP 地址在同一物理网络即可。这使得系统具有良好的扩展性,可以根据业务需求灵活地调整后端服务器的数量。
  4. 支持多种操作系统:DR 模式对后端服务器的操作系统没有严格的限制,几乎可以支持所有主流的操作系统,如 Linux、Windows、Solaris 等。这使得企业在选择后端服务器时具有更大的灵活性,可以根据实际需求选择合适的操作系统和硬件平台。

基于 openEuler 构建 LVS-DR 群集

1、环境准备

准备好下面四台服务器:

|-----|----------------|-----------------|
| 主机名 | IP地址 | 备注 |
| op1 | 192.168.121.10 | Director Server |
| op2 | 192.168.121.12 | Real Server1 |
| op3 | 192.168.121.13 | Real Server2 |
| op4 | 192.168.121.14 | Client |

2、Web服务器配置:

root@openEuler-2 \~# yum install nginx -y

root@openEuler-2 \~# echo "this is test page!(ip:`hostname -I`)" > /usr/share/nginx/html/index.html

root@openEuler-2 \~# systemctl enable --now nginx

root@openEuler-2 \~# curl localhost

this is test page!(ip:192.168.121.12 )

第二台RS配置同上

3、添加VIP的相关配置

在两台RS和DS上:

root@openEuler-1 \~# nmcli con add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.121.10/32

Connection 'dummy-dummy1' (7a44b435-72fc-4aa4-afb2-28bf52a1b5b4) successfully added.

root@openEuler-1 \~# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

link/ether 00:0c:29:12:dd:13 brd ff:ff:ff:ff:ff:ff

inet 192.168.121.11/24 brd 192.168.121.255 scope global noprefixroute ens160

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe12:dd13/64 scope link noprefixroute

valid_lft forever preferred_lft forever

3: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000

link/ether 82:81:c6:9e:a9:f6 brd ff:ff:ff:ff:ff:ff

inet 192.168.121.10/32 scope global noprefixroute dummy1

valid_lft forever preferred_lft forever

inet6 fe80::1837:14b2:ae95:267a/64 scope link noprefixroute

valid_lft forever preferred_lft forever

剩下二台RS配置同上

4、配置arp抑制

在两台RS上:

root@openEuler-2 \~# cat >> /etc/sysctl.conf << EOF

> net.ipv4.conf.all.arp_ignore = 1

> net.ipv4.conf.all.arp_announce = 2

> net.ipv4.conf.dummy1.arp_ignore = 1

> net.ipv4.conf.dummy1.arp_announce = 2

> EOF

使其生效

root@openEuler-2 \~# sysctl -p

5.LVS配置:

root@openEuler-1 \~# yum install ipvsadm -y

root@openEuler-1 \~# ipvsadm -At 192.168.121.10:80 -s rr

root@openEuler-1 \~# ipvsadm -at 192.168.121.10:80 -r 192.168.121.12:80 -g

root@openEuler-1 \~# ipvsadm -at 192.168.121.10:80 -r 192.168.121.13:80 -g

root@openEuler-1 \~# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.121.10:80 rr

-> 192.168.121.12:80 Route 1 0 0

-> 192.168.121.13:80 Route 1 0 0

相关参数说明

ipvsadm --help

-A 添加虚拟服务器

-t 设置群集地址(VIP,Virtual IP)

-s 指定负载调度算法

-a 添加真实服务器

-d 删除真实服务器

-r 指定真实服务器(Real Server)的地址

-m 使用NAT模式;-g、-i分别对应DR、TUN模式

-w 为节点服务器设置权重,默认为1

6.测试:

在Client上:

root@localhost \~# for ((i=1;i<10;i++)); do curl 192.168.121.10; done

this is test page!(ip:192.168.121.13 )

this is test page!(ip:192.168.121.12 )

this is test page!(ip:192.168.121.13 )

this is test page!(ip:192.168.121.12 )

this is test page!(ip:192.168.121.13 )

this is test page!(ip:192.168.121.12 )

this is test page!(ip:192.168.121.13 )

this is test page!(ip:192.168.121.12 )

this is test page!(ip:192.168.121.13 )

相关推荐
2401_834636993 天前
Keepalived + LVS (DR) + Nginx + NFS 高可用 Web 集群部署实战手册
前端·nginx·lvs
念何架构之路13 天前
接入层LVS
lvs
念何架构之路14 天前
接入LVS+Nginx和服务发现
nginx·服务发现·lvs
风曦Kisaki18 天前
Nginx代理与LVS(NAT/DR)全方位对比
运维·nginx·lvs
风曦Kisaki19 天前
# Linux运维Day05:Keepalived热备基础,Keepalived+LVS实现负载均衡
linux·运维·lvs
雨的旋律209922 天前
keepalived + LVS NAT模式
服务器·网络·lvs
源远流长jerry22 天前
LVS 与 Nginx 负载均衡:从原理到生产实战
运维·网络·网络协议·tcp/ip·nginx·负载均衡·lvs
风曦Kisaki22 天前
# Linux运维Day04:集群与 LVS 负载均衡(LVS-NAT 集群,LVS-DR 集群)
linux·运维·lvs
Donk_6723 天前
LVS 实验搭建
lvs
雨的旋律20991 个月前
keepalived + LVS DR
服务器·网络·lvs