目录
前言
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
一、集群概述
(一)、负载均衡技术类型
四层负载均衡器 也称为 4 层交换机,主要通过分析 IP 层及 TCP/UDP 层的流量实现基于 IP 加端口的负载均衡,如常见的 LVS、F5 等;
七层负载均衡器 也称为 7 层交换机,位于 OSI 的最高层,即应用层,此负载均衡器支持多种协议,如HTTP、FTP、SMTP 等。7 层负载均衡器可根据报文内容,配合一定的负载均衡算法来选择后端服务器,即“内容交换器”。如常见的 HAProxy、Nginx。
(二)、负载均衡实现方式
硬件负载均衡产品:F5 、深信服 、Radware
软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)
二、LVS结构
(一)、三层结构
负载调度器
服务器池
共享存储
(二)、架构对象
VS Virtual Server,也称为 Director,负载均衡服务器
RS Real Server,真正的服务器,集群中各节点
VIP Director 向外部提供服务的 IP
DIP Director 向内部与 RS 通信的 IP
RIP 真实服务器的 IP
CIP 客户端的 IP
(三)、LVS工作模式
LVS-NAT (NAT模式)
LVS-DR (直接路由模式)(应用最广泛)
LVS-TUN (IP隧道(Tunnel)模式,不常用)
FULL-NAT模式 (双向转换模式,不常用)
三、LVS负载均衡算法
(一)、静态负载均衡
rr (round robin,轮询 )
wrr (weight round robin,加权轮询)
sh (source hashing,源地址散列算法(HASH))
dh (destination hashing,目标地址 HASH)
(二)、动态负载均衡
lc (leash-connection,最少连接 )
wlc (加权最少连接)
sed (最少期望延迟)
nq (never queue,永不排队)
LBLC (基于局部性的最少连接 )
LBLCR (基于局部性的带复制功能的最少连接)
(三)、ipvsadm命令详解
-A
添加虚拟服务节点
-D
删除虚拟服务节点
-L
查看虚拟服务节点列表
-a
添加真实服务节点
-d
删除真实服务节点
-l
查看真实服务节点列表
-t
指定虚拟服务器IP地址
-s
指定调度算法
-r
指定真实服务器节点IP地址
-w
指定权重值
-g
直接路由模式(默认)
-i
隧道模式(不常用)
-m
NAT模式
四、LVS配置案例
配置好基础环境
防火墙设置,宽容模式,图形化设置,网卡配置
192.168.238.138
192.168.238.139
192.168.238.140
(一)、实现NAT模型搭建
负载调度器配置
192.168.238.138
配置本地yum源 yum install -y epel-release
安装ipvsadm yum install -y ipvsadm
增加一块网卡对应电脑主机段
ens33
ens37
systemctl restart network
主机上试通
开启路由转发功能
vim /etc/sysctl.d/route.conf 中插入net.ipv4.ip_forward=1
sysctl -p /etc/sysctl.d/route.conf
192.168.238.139
vim /etc/sysconfig/network-scripts/ifcfg-ens33
配置本地yum源 yum install -y epel-release
yum install -y nginx
cd /usr/share/nginx/html
echo who > index.html
systemctl start nginx
验证是否启动成功netstat -anptu |grep 80
网关是否正确route -n
192.168.238.140
vim /etc/sysconfig/network-scripts/ifcfg-ens33
配置本地yum源 yum install -y epel-release
yum install -y nginx
cd /usr/share/nginx/html
echo I AM > index.html
systemctl start nginx
验证是否启动成功netstat -anptu |grep 80
网关是否正确route -n
配置负载分配策略
回192.168.238.138
modprobe ip_vs
lsmod |grep ip_vs
systemctl start ipvsadm
前期未创建目录或文件会报错,建议创建文件,方便存储数据,重启不会异常
cd /etc/sysconfig/ipvsadm
touch ipvsadm
systemctl start ipvsadm
ipvsadm -A -t 192.168.22.100:80 -s rr
ipvsadm -a -t 192.168.22.100:80 -r 192.168.238.139:80 -m
ipvsadm -a -t 192.168.22.100:80 -r 192.168.238.140:80 -m
ipvsadm-save > /etc/sysconfig/ipvsadm
ipvsadm-Ln查看状态
测试
Ctrl F5深度刷新
(二)、实现DR模型搭建
192.168.238.138
将ipvsadm还原
ipvsadm-Ln查看状态
删除路由设置
配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
mv ifcfg-ens37 ifcfg-ens33:0
192.168.238.139和192.168.238.140网卡配置删除网关(也可以配置静态IP)
调整ARP参数
vim /etc/sysctl.conf中插入
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
配置负载分配策略
ipvsadm -A -t 192.168.238.200:80 -s rr
ipvsadm -a -t 192.168.238.200:80 -r 192.168.238.139:80 -g
ipvsadm -a -t 192.168.238.200:80 -r 192.168.238.140:80 -g
ipvsadm-save > /etc/sysconfig/ipvsadm
ipvsadm -Ln
调整web节点配置ARP参数
192.168.238.139
vim /etc/sysctl.conf中插入
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2
sysctl -p
配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
systemctl restart network
route add -host 192.168.238.200/32 dev lo:0
route -n
192.168.238.140同上操作
测试
总结
本篇文章介绍了LVS的两者工作模式,NAT和DR。总体不难,需要注意添加网卡前将用网络的地方先下载或者停掉第二段网卡进行下载,DR模式需要现将环境构建,不能在原来的NAT模式上进行操作,否则会出错。