Linux虚拟服务器(LVS)了解使用

LVS术语

DIP:调度器连接后端节点服务器的IP地址
VIP:虚拟IP地址一公布给用户访问的虚拟IP地址
RIP:真实IP地址一集群节点上使用的IP地址
Director Server: 调度服务器,将负载分发到RealServer的服务器
Real Server: 真实服务器,真正提供应用服务的服务器

LVS工作模式

NAT -通过网络地址转换实现的虚拟服务器,-大并发访问时,调度器的性能成为瓶颈
DR  -直接使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意忽略MAC地址广播
TUN -通过隧道方式实现虚拟服务器

LVS目前实现了10种调度算法常用调度算法有4种

-轮询(Round Robin)
-加权轮询(Weighted Round Robin)
-最少连接(Least Connections)
-加权最少连接(Weighted Least Connections)
-源地址散列(Source Hashing)
-目标地址散列(Destination Hashing)
-基于局部性的最少链接
-带复制的基于局部性最少链接
-最短的期望的延迟
-最少队列调度

部署LVS-NAT集群

client proxy web1 web2 配置ip 网关如下

[root@client ~]# ifconfig ens33
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.100   0.0.0.0         UG    100    0        0 ens33
[root@proxy ~]# ifconfig ens33
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
[root@proxy ~]# ifconfig ens37
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
[root@web1 ~]# ifconfig ens33
        inet 192.168.4.11  netmask 255.255.255.0  broadcast 192.168.4.255
[root@web1 ~]#  route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.100   0.0.0.0         UG    100    0        0 ens33
[root@web1 html]# ip route show   #也可以查看网关
default via 192.168.4.100 dev ens33 proto static metric 100  #网关
192.168.4.0/24 dev ens33 proto kernel scope link src 192.168.4.11 metric 100
[root@web2 ~]# ifconfig ens33
        inet 192.168.4.12  netmask 255.255.255.0  broadcast 192.168.4.255
[root@web2 ~]#  route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.100   0.0.0.0         UG    100    0        0 ens33

设置Web服务器

[root@web1 ~]# yum -y install httpd    #安装软件,web2 同web1操作
[root@web1 ~]# echo "192.168.4.11" > /var/www/html/index.html   #创建网页文件
[root@web2 ~]# systemctl restart httpd
[root@proxy ~]# curl http://192.168.4.11
192.168.4.11

部署LVS-NAT模式调度器proxy

[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  #开启转发
[root@proxy ~]# sysctl -p
[root@proxy ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@proxy ~]# yum -y install ipvsadm

2)创建集群服务器

[root@proxy ~]# ipvsadm -A -t 192.168.1.100:80 -s wrr
# -A(add)是创建添加虚拟服务器集群
# -t(tcp)后面指定集群VIP的地址和端口,协议是tcp协议    -u是UDP
# -s后面指定调度算法,如rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)等等

[root@proxy ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.4.11:80 -w 1 -m
[root@proxy ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.4.12:80 -w 1 -m
#-a(add)往虚拟服务器集群中添加后端真实服务器IP,指定往-t 192.168.1.100:80这个集群中添加
#-r(real)后面跟后端真实服务器的IP和端口,这里不写端口默认是80端口
#-w(weight)指定服务器的权重,权重越大被访问的次数越多,英语词汇:weight(重量,分量)
#-m指定集群工作模式为NAT模式,如果是-g则代表使用DR模式,-i代表TUN模式

[root@proxy ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:80 wrr
  -> 192.168.4.11:80              Masq    1      0          0
  -> 192.168.4.12:80              Masq    1      0          0
[root@client ~]# curl 192.168.1.100
192.168.4.12
[root@client ~]# curl 192.168.1.100
192.168.4.11
[root@client ~]# curl 192.168.1.100
192.168.4.12
[root@client ~]# curl 192.168.1.100
192.168.4.11

2.4 ipvsadm命令用法

使用命令增、删、改LVS集群规则

[root@proxy ~]# ipvsadm -A -t 192.168.1.100:80 -s wrr
[root@proxy ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.4.11:80 -w 1 -m
[root@proxy ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.4.12:80 -w 1 -m
[root@proxy ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.4.13:80 -w 2 -m
[root@proxy ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:80 wrr
  -> 192.168.4.11:80              Masq    1      0          0
  -> 192.168.4.12:80              Masq    1      0          0
  -> 192.168.4.13:80              Masq    2      0          0

3)修改调度器算法,-E -s将加权轮询修改为轮询)

[root@proxy ~]# ipvsadm -E -t 192.168.1.100:80 -s rr
[root@proxy ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:80 rr ...  #之前是wrr

修改模式为DR模式 -e -t web真机 -g

[root@proxy ~]# ipvsadm -e -t 192.168.1.100:80 -r 192.168.4.11 -g
(使用-g为DR模式、-m为NAT模式、-i为tun)

6)创建另一个集群(算法为最少连接算法;使用-m选项,设置工作模式为NAT模式)

[root@proxy ~]# ipvsadm -A -t 192.168.1.100:3306 -s lc
[root@proxy ~]# ipvsadm -a -t 192.168.1.100:3306 -r 192.168.4.11:3306 -m
[root@proxy ~]# ipvsadm -a -t 192.168.1.100:3306 -r 192.168.4.12:3306 -m

7)清空所有规则ipvsadm -C

[root@proxy ~]# ipvsadm -C

8)永久保存所有规则(非必须的操作)一般不这么操作

[root@proxy ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
注意:ipvsadm只能临时生成。关机后会失效。永久规则需要确保ipvsadm服务为开机启动服务才可以。
(systemctl enable ipvsadm)。

ipvsadm命令用法

虚拟服务器

ipvsadm -A		(add)添加盘拟服务器
ipvsadm -E		(edit)修改虚拟服务器
ipvsadm -D		(delete)删除虚拟服务器
ipvsadm -C		(clear)清空所有
ipvsadm -L		(list)查看LVS 规则表
-s [rwrr|le|wlc|sh]		(scheduler)指定集群算法
ipvsadm -A -t|u 192.168.4.5:80 -s [算法]   #添加虚拟服务器,协议为tcp (-t) 或者udp (-u)
ipvsadm -E -t|u 192.168.4.5:80 -s [算法]   #修改虚拟服务器,协议为tcp或udp
ipvsadm -D -t|u 192.168.4.5:80	[算法]  	#删除虚拟服务器,协议为tcp或udp
ipvsadm -C		#清空所有添加真实服务器

真实服务器

ipvsadm -a		(add)添加真实服务器
ipvsadm -e		(edit)修改真实服务器
ipvsadm -d		(delete)删除真实服务器
ipvsadm -a -t|u 192.168.4.5:80 -r 192.168.2.100 [-g|i|m] [-w权重]  #一般是-m(NAT模式) -g(DR模式),-i(隧道模式)
ipvsadm -e -t|u 192.168.4.5:80 -r 192.168.2.100 [-g|i|m] [-w权重]  #修改真实服务器
ipvsadm -d -t|u 192.168.4.5:80 -r 192.168.2.100  #删除真实服务器
ipvsadm -Ln  #查看LVS 规则表