基于 openEuler 构建 LVS-DR 群集(同网段)。

发布于:2025-02-14 ⋅ 阅读:(29) ⋅ 点赞:(0)

一、LVS相关原理

1.LVS简介

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在 Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已 经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用 的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能

2.LVS体系结构

使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(调度层DIP),用Load Balancer表示,中间的 服务器群组层(RIP),用Server Array表示,最底端的数据共享存储层(本实验不涉及),用Shared Storage表示。

3.LVS相关术语

名称 缩写 说明
虚拟IP地址(Virtual IP Address) VIP 客户端访问服务的ip
真实IP地址(Real Server IP Address) RIP 集群服务器(real server)的ip
Director的IP地址(Director IP Address) DIP Director用于连接内外网网络的IP地址
客户端主机IP地址(Client IP Address) CIP 客户端用户计算机请求集群服务器的IP地址,该地址用作 发送给集群的请求的源IP地址

4.LVS工作模式(重点分析VS/NAT、VS/DR模式)

共有三种模式:nat(地址转换)、tunnl(隧道)、dr(直连)

NAT优势:

• 部署简单:只需在负载均衡器上进行地址转换配置,内部服务器无需特殊设置,可使用私有IP地址,易于构建和管理小型负载均衡集群。

• 易于管理:所有外部请求都由负载均衡器接收和分发,对后端服务器的管理相对集中,便于进行流量控制、监控和故障排查等操作。

• 支持端口映射:能灵活地将外部请求的不同端口映射到后端服务器的不同端口,满足后端服务器提供多种服务且端口需求不同的情况。

• 网络隔离性好:内部服务器使用私有IP,与外部网络隔离,增强了内部网络的安全性,减少了外部网络攻击的风险。

DR优势:

• 高性能:直接将请求数据包通过MAC地址转发到后端服务器,无需像NAT模式那样进行地址转换,减少了网络开销,提高了转发效率,能处理大量并发请求,提升系统整体性能。

• 支持大规模集群:由于转发效率高,理论上可以连接的后端服务器数量更多,能更好地满足大规模服务器集群的负载均衡需求,实现更高的扩展性。

• 对后端服务器要求低:后端服务器只需配置与负载均衡器在同一物理网段的IP地址,无需进行复杂的网络配置,兼容性好,可方便地添加或替换后端服务器。

• 响应速度快:请求直接到达后端服务器,响应数据可以直接返回给客户端,无需经过负载均衡器再次转发,缩短了响应时间,提高了用户体验。

5 LVS调度算法(主要掌握标红即可)

当Director收到来自客户端计算机访问她的VIP上的集群服务的入站请求时,Director必须决定那个集 群节点应该获得请求。Director可用于做出该决定的调度方法分成两个基本类别:

固定调度算法:rr,wrr,dh,sh

动态调度算法:lc,wlc,lblc,lblcr,SED,NQ(后两种官方站点没提到)

算法 说明
rr 轮循调度(Round-Robin),它将请求依次分配不同的RS,也就是在RS中均摊请求。这种 算法简单,但是只适合于处理性能相差不大的情况
wrr 加权轮循调度(Weighted Round-Robin)它将依据不同RS的权值分配任务。权值较高的 RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相 同数目的连接数。
lc 最小连接数调度(Least-Connection),IPVS表存储了所有的活动的连接。把心的连接请 求发送到当前连接数最小的RS。
wlc 加权最小连接数调度(weighted leastconnection)假设各台RS的权值依次为wi (i=1..n),当前的TCP连接数依次为Ti(i=1..n),依次选取Ti/Wi为最小的RS作为下一个 分配的RS。

二、LVS-DR集群服务搭建

1.对real server 配置

1)下载nginx安装包,并写测试页面,启动服务

2)配置VIP

(1)命令格式
nmcli connection add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 10.0.0.70/32  ####2台rs服务器相同操作

或者采用子接口方式配置VIP
 ifconfig eth160:70 192.168.63.70 netmask 
255.255.255.255 up

3)arp抑制

#1.打开下面配置文件
vi /etc/sysctl.conf
#2.添加arp抑制
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 
#3. 重载配置文件
sysctl -p 

(2)脚本配置
#!/bin/sh
 #
 # Startup script handle the initialisation of LVS
 # chkconfig: - 28 72
 # description: Initialise the Linux Virtual Server for DR
 #
 ### BEGIN INIT INFO
 # Provides: ipvsadm
 # Required-Start: $local_fs $network $named
 # Required-Stop: $local_fs $remote_fs $network
 # Short-Description: Initialise the Linux Virtual Server
 # Description: The Linux Virtual Server is a highly scalable and highly
 #   available server built on a cluster of real servers, with the load
 #   balancer running on Linux.
 # description: start LVS of DR-RIP
 LOCK=/var/lock/ipvsadm.lock
 VIP=192.168.95.70
 . /etc/rc.d/init.d/functions
 start() {
     PID=`ifconfig | grep lo:10 | wc -l`
     if [ $PID -ne 0 ];
     then
         echo "The LVS-DR-RIP Server is already running !"
     else
         /sbin/ifconfig ens160s:70 $VIP netmask 255.255.255.255 broadcast $VIP up
         /sbin/route add -host $VIP dev ens160s:70
         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/eth0/arp_ignore
         echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
         echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
         echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
         /bin/touch $LOCK
         echo "starting LVS-DR-RIP server is ok !"
     fi
 }
 stop() {
         /sbin/route del -host $VIP dev lo:10
         /sbin/ifconfig lo:10 down  >/dev/null
         echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
         echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
 echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_announce
 echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
 rm -rf $LOCK
 echo "stopping LVS-DR-RIP server is ok !"
 }
 status() {
 if [ -e $LOCK ];
 then
 echo "The LVS-DR-RIP Server is already running !"
 else
 echo "The LVS-DR-RIP Server is not running !"
 fi
 }
 case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 restart)
 stop
 start
 ;;
 status)
 status
 ;;
 *)
 echo "Usage: $1 {start|stop|restart|status}"
 exit 1
 esac
 exit 0

2.对direct server配置

1)行配置添加LVS服务并增加两台RS

再操作前要先安装ipvsadm服务

(1)命令配置
 [root@localhost ~]# ipvsadm -A -t 192.168.63.70:80 -s rr  #配置VIP
 [root@localhost ~]# ipvsadm -a -t 192.168.63.70:80 -r 192.168.63.11:80 -g -w 1 
 [root@localhost ~]# ipvsadm -a -t 192.168.63.70:80 -r 192.168.63.12:80 -g -w 1
  ###添加两台RS          
 [删除方法]
  # ipvsadm -D -t 192.168.63.70:80 -s wrr
  # ipvsadm -d -t 192.168.63.70:80 -r 192.168.63.11:80
[root@localhost ~]# ipvsadm –help
                -A  添加虚拟服务器
                -t  设置群集地址(VIP,Virtual IP)
                -s  指定负载调度算法
                -a  添加真实服务器
                -d  删除真实服务器
                -r  指定真实服务器(Real Server)的地址
                -m  使用NAT模式;-g、-i分别对应DR、TUN模式
                -w  为节点服务器设置权重,默认为1
(2)脚本配置
lvs director 上的脚本
=================================================================
 #!/bin/sh
 #
 # Startup script handle the initialisation of LVS
 # chkconfig: - 28 72
 # description: Initialise the Linux Virtual Server for DR
 #
 ### BEGIN INIT INFO
 # Provides: ipvsadm
 # Required-Start: $local_fs $network $named
 # Required-Stop: $local_fs $remote_fs $network
 # Short-Description: Initialise the Linux Virtual Server
 # Description: The Linux Virtual Server is a highly scalable and highly
 #   
available server built on a cluster of real servers, with the load
 #   
balancer running on Linux.
 # description: start LVS of DR
 LOCK=/var/lock/ipvsadm.lock
 VIP=192.168.63.70
 RIP1=192.168.63.11
 RIP2=192.168.63.12
DipName=ens160
 . /etc/rc.d/init.d/functions
 start() {
     PID=`ipvsadm -Ln | grep ${VIP} | wc -l`
     if   [ $PID -gt 0 ];
     then
           echo "The LVS-DR Server is already running !"
     else
           #Set the Virtual IP Address
           /sbin/ifconfig ${DipName}:70 $VIP broadcast $VIP netmask 
255.255.255.255 up   
           /sbin/route add -host $VIP dev ${DipName}:70  #基于子接口方式配置VIP
           #Clear IPVS Table
           /sbin/ipvsadm -C
           #Set Lvs
           /sbin/ipvsadm -At $VIP:80 -s rr 
           /sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g
           /sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g
           /bin/touch $LOCK
           #Run Lvs
           echo "starting LVS-DR Server is ok !"       
     fi
 }
 stop()    {                                   #停止LVS集群服务
           #clear Lvs and vip 
           /sbin/ipvsadm -C
           /sbin/route del -host $VIP dev ${DipName}:70
           /sbin/ifconfig ${DipName}:10 down >/dev/null
           rm -rf $LOCK
           echo "stopping LVS-DR server is ok !"
 }
 status() {
     if [ -e $LOCK ];
     then
         echo "The LVS-DR Server is already running !"
     else
         echo "The LVS-DR Server is not running !"
     fi
 }
 case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        status
        ;;
  *)
        echo "Usage: $1 {start|stop|restart|status}"
        exit 1
 esac
 exit 0
 ======================================================

2)查看ipvsadm配置

# ipvsadm -L -n

三、测试

1)上面是没关防火墙和seliunx前的测试


网站公告

今日签到

点亮在社区的每一天
去签到