【Linux】LVS(Linux virual server)环境搭建

发布于:2025-07-22 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、LVS的运行原理

1.1 LVS简介

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVS+keepalived实现
LVS 官网: http://www.linuxvirtualserver.org/
LVS 相关术语
  • VS: Virtual Server,负责调度
  • RS:RealServer,负责真正提供服务

1.2 LVS概念

  • VSVirtual Server
  • RSReal Server
  • CIPClient IP
  • VIP: Virtual serve IP VS外网的IP
  • DIP: Director IP VS内网的IP
  • RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP

1.3 lvs集群的类型

  • lvs-nat: 修改请求报文的目标IP,多目标IPDNAT
  • lvs-dr 操纵封装新的MAC地址
  • lvs-tun: 在原请求IP报文之外新加一个IP首部
  • lvs-fullnat 修改请求报文的源和目标IP

1.4 nat模式

Ivs-nat:
  • 本质是多目标IPDNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RSRIPPORT实现转发
  • RIPDIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
  • 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标PORT
  • VS必须是Linux系统,RS可以是任意OS系统

1.4.1 nat模式数据逻辑

  1. 客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 9000port
  2. VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RSRIP和相应端口
  3. RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port
  4. VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP,响应目标端口(9000-->80
  5. VS服务器把修改过报文的响应数据包回传给客户端
  6. lvsNAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,IPVS存在后访问请求在通过PREROUTING后被ipvs结果并作nat转发
因为ipvs的作用点是在PREROUTINGINPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉。

 1.5 DR模式

DRDirect Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MACDIP所在的接口的MAC,目标MAC是某挑选出的RSRIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

1.5.1 DR模式数据逻辑

DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RSvs上都要有vip

1.5.2 DR模式数据传输过程

  1. 客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIPMAC
  2. VS调度主机接收到数据帧后把帧中的VIPMAC该为RS1MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1MAC
  3. RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1MAC+客户端IP+客户端IP的MAC

 1.5.3 DR模式的特点

  1. Director和各RS都配置有VIP
  2. 确保前端路由器将目标IPVIP的请求报文发往Director
  3. 在前端网关做静态绑定VIPDirectorMAC地址
  4. RSRIP可以使用私网地址,也可以是公网地址;RIPDIP在同一IP网络;
  5. RIP的网关不能指向DIP,以确保响应报文不会经由Director
  6. RSDirector要在同一个物理网络
  7. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  8. 不支持端口映射(端口不能修败)
  9. RS可使用大多数OS系统
  • RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
  • RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce

1.6 TUN模式(了解)

1.7 fullnet模式(了解)

二、环境准备

1.1 设备详情

主机名 角色 IP地址 网络类型
client 测试机 172.25.254.10 NAT
lvs
调度器(VS
172.25.254.100,192.168.10.100 NAT、仅主机
RS1
真实服务器(RS1
192.168.10.10 仅主机
RS2
真实服务器(RS2
192.168.10.20 仅主机

1.2 拓扑图

三、配置步骤

2.1 本地yum仓库配置

 2.2 关闭防火墙

所有的设备都关闭防火墙,或者放行80端口

2.3 设置网卡类型

主要是lvs网卡,需要两张网卡,配置步骤如下:

2.4 快速修改网卡IP地址,主机名脚本

rhel9系列:

#!/bin/bash
ifconfig $1 &> /dev/null || {
        echo "net device $1 is not exist"
        exit
}
ping -c1 -w1 $2 &> /dev/null && {
        echo "$2 is exist"
        exit
}

grubby --update-kernel ALL  --args  net.ifname=0
grubby --update-kernel ALL  --args  selinux=0

grep $1 -r /etc/NetworkManager/system-connections/ | awk -F : '{system("rm -rf " $1)}'
cat >/etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1

[ipv4]
method=manual
address1=$2/24,192.168.253.2 
dns=8.8.8.8
EOF
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
hostnamectl hostname $3
grep -e "$2\t$3" /etc/hosts || {
        echo -e "$2\t$3" >>/etc/hosts
}

rhel7系列:

#!/bin/bash
ifconfig $1 &> /dev/null || {
        echo "net device $1 is not exist"
        exit
}
ping -c1 -w1 $2 &> /dev/null && {
        echo "$2 is exist"
        exit
}


grubby --update-kernel ALL  --args  net.ifname=0
grubby --update-kernel ALL  --args  selinux=0

grep $1 -r /etc/sysconfig/network-scripts/ | awk -F : '{system("rm -rf " $1)}'
cat >/etc/sysconfig/network-scripts/ifcfg-$1 <<EOF
DEVICE=$1
NAME=$1
BOOTPROTO=none
IPADDR0=$2
PREFIX0=24
GATEWAY0=192.168.253.2
DNS1=8.8.8.8
ONBOOT=yes
EOF

nmcli connection reload
nmcli connection up $1
hostnamectl set-hostname $3
grep -e "$2\t$3" /etc/hosts || {
        echo -e "$2\t$3" >>/etc/hosts
}

2.5 使用脚本给每个设备修改IP地址和主机名

client:

lvs:

VIP:

CIP:

RS1:

RS2:

2.6 网关配置,并检验路由

rhel9网卡配置文件

client:

lvs:

RS1:

图中笔误,应该为DIP

RS2:

图中笔误,应该为DIP

2.7 LVS设备开启内部网卡路由策略

2.8 LVS安装ipvsadm包、配置策略

如果想要开机自启达到话,配置下面的命令 

2.9 效果

四、涉及到的知识点

3.1 lvs软件相关信息

  • 程序包:ipvsadm
  • Unit File: ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.2 ipvsadm命令

核心功能:
  • 集群服务管理:增、删、改
  • 集群服务的RS管理:增、删、改
  • 查看
命令参数:
管理集群服务
ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址) \
[-s scheduler(调度算法)] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags]


ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存


管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w
weight](权重)
ipvsadm -d -t|u|f service-address -r server-address 删除RS
ipvsadm -L|l [options] 查看rs
ipvsadm -Z [-t|u|f service-address] 清楚计数器

3.3 lvs集群中的增删改

① 管理集群服务中的增删改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A #添加
-E #修改
-t #tcp服务
-u #udp服务
-s #指定调度算法,默认为WLC
-p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-f #firewall mask 火墙标记,是一个数字




#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66

② 管理集群中RealServer的曾增删改

ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]

-a #添加realserver
-e #更改realserver
-t #tcp协议
-u #udp协议
-f #火墙 标签
-r #realserver地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-Z #清空计数器
-C #清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :输出速率信息


#添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
#更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
#删除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30




[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.100:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
[root@DR-server ~]# ipvsadm -C
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.20:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0

网站公告

今日签到

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