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

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

一、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.10NAT
lvs
调度器(VS
172.25.254.100,192.168.10.100NAT、仅主机
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=0grep $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=0grep $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
EOFnmcli 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:

RS2:

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
http://www.dtcms.com/a/287963.html

相关文章:

  • uni-app 应用、页面、组件生命周期
  • Python+大模型 day02
  • 1.2M 小工具! 解决 Windows 系统疑难杂症
  • MVP 最小可行产品
  • 《Electron应用性能深耕:资源加载与内存治理的进阶路径》
  • 【51单片机学习】LED、独立按键
  • 一站式PDF转Markdown解决方案PDF3MD
  • Python技术题2
  • PostgreSQL常用命令与工具指南
  • 93.数字信号处理相关的一些问题
  • 【Java】【力扣】48.旋转图像
  • PyCharm + AI 辅助编程
  • 小明记账簿焕新记:从单色到多彩的主题进化之路
  • k8s快速部署(亲测无坑)
  • Go 语言核心机制深度剖析:指针、defer、多态与空接口实战指南
  • Windows 编程辅助技能:使用 MSDN
  • 千线万网,电路之行——LVS检查的内核逻辑
  • uniapp中腾讯地图SDK-安装及配置(自动定位回显城市)
  • 探索量子计算与法律理论的交叉领域
  • 智能体之变:深度解析OpenAI ChatGPT Agent如何重塑人机协作的未来
  • 文献阅读:全球农田的植被总初级生产力(GPP)、蒸散发(ET)和水分利用率(WUE)的变化研究
  • 周末总结(2024/07/19)
  • 若依部署项目到服务器
  • 数字图像处理(三:图像如果当作矩阵,那加减乘除处理了矩阵,那图像咋变):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么
  • Springboot项目的搭建方式5种
  • 深入解析 Amazon Q:AWS 推出的企业级生成式 AI 助手
  • 默认显示两行文字,多余的文字省略掉,变成省略号
  • Vue状态管理:Vuex模块设计方案
  • SpringBoot服装推荐系统实战
  • C++string类(2)