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

一、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前的测试

相关推荐
lllsure7 小时前
Linux 实用指令
linux·物联网
努力的小T7 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
Nerd Nirvana7 小时前
OpenSSL crt & key (生成一套用于TLS双向认证的证书密钥)
linux·ssl·shell·认证·加密·tls·oepnssl
letisgo58 小时前
记录一次部署PC端网址全过程
linux·阿里云·服务器运维
枫叶落雨2228 小时前
08-Elasticsearch
运维·jenkins
猫猫的小茶馆9 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp
尚墨11119 小时前
linux 安装启动zookeeper全过程及遇到的坑
linux·zookeeper
鱼嘻9 小时前
Linux自学day23-进程和线程
linux·服务器·c语言·进程和线程
AuGuSt_819 小时前
在windows下安装windows+Ubuntu16.04双系统(下)
linux·ubuntu·双系统
old_power9 小时前
Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0
linux·opencv