当前位置: 首页 > article >正文

基于 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)DIPDirector用于连接内外网网络的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前的测试


http://www.kler.cn/a/546572.html

相关文章:

  • 关于视频去水印的一点尝试
  • Okay, But Please Don’t Stop Talking
  • 日语发音的节拍
  • 本地部署DeepSeek集成VSCode创建自己的AI助手
  • redis sentinel模式 与 redis 分片集群 配置
  • 「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南
  • mariadb数据库的安装与部署
  • Django 项目自动化部署脚本全解析
  • 解释下SpringBoot中的服务、依赖项、微服务、分布式的概念和关系
  • Kafka 2.7.1客户端域名连接机制源码深度解析
  • Java面试第一山!《集合》!
  • Linux w 命令
  • Flutter_学习记录_数据更新的学习
  • 通过docker启用rabbitmq插件
  • 腿足机器人之三- 驱动器控制算法PID
  • 是德科技 | AI助力高速线缆卷向下一代速率
  • HARCT 2025 分论坛10:Intelligent Medical Robotics智能医疗机器人
  • Docker 网络的配置与管理
  • 在vscode中拉取gitee里的项目并运行
  • JVM ②-双亲委派模型 || 垃圾回收GC
  • 考公题目(每日一练)
  • 【Qt 为什么 unique_ptr<ClassExample> 和直接声明的 ClassExample对象,connect时的表现形式不一样?】
  • qt QToolButton使用总结
  • TDengine 客户端连接工具 taos-Cli
  • 网络中的传输介质
  • 【开源免费】基于SpringBoot+Vue.JS商品秒杀系统(JAVA毕业设计)