LVS - Linux虚拟服务器
2014-03-27 by dongnan
环境
角色与IP地址
LVS-VIP: 172.27.233.45/10.0.0.45
LVS-Master: 172.27.233.41/10.0.0.41
LVS-BACKUP: 172.27.233.42/10.0.0.42
Realserver-WEB1: 172.27.233.43/10.0.0.43
Realserver-WEB2: 172.27.233.44/10.0.0.44
关键词
LB
(Load Balancer
负载均衡)HA
(High Available
高可用)FailOver
(失败切换)CLUSTER
(集群)LVS
(Linux Virtual Server
Linux虚拟服务器)RealServer
后端真实服务器,这个概念相对于LVS Director
,指lvs集群中真正执行客户端请求的服务器。Director
前端调度器,指安装LVS(ipvsadm
)的服务器,负责调度realserver
提供负载均衡。VIP
(Virtual IP Address
) 虚拟的Ip
地址 。
软件版本
# 操作系统
head -n1 /etc/issue
Red Hat Enterprise Linux Server release 6.2 (Santiago)
# 内核版本
uname -r
2.6.32-220.el6.x86_64
# LVS
yum info ipvsadm
Name : ipvsadm
Version : 1.26
Release : 2.el6
Size : 78 k
Summary : Utility to administer the Linux Virtual Server
Description : ipvsadm is a utility to administer the IP Virtual Server services
: offered by the Linux kernel.
# keepalived
yum info keepalived
Name : keepalived
Version : 1.2.7
Release : 3.el6
Size : 526 k
Summary : High Availability monitor built upon LVS, VRRP and service pollers
安装部署
Director
LVS软件 Master
和 Backup
都要安装:
# 安装 lvs
yum install ipvsadm
检查ipvsadm
版本
ipvsadm -v
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
Realserver
安装apache
服务器:
yum install httpd
创建index
文件:
# 每台 Realserver 的 index.html文件内容为其`ip`地址:
echo "172.27.233.43" > /var/www/html/index.html
启动http
服务:
/etc/init.d/httpd start
VS/NAT 模式
VS/NAT
(Virtual Server via Network Address Translation
)是最简单的方式,
所有的RealServer
只需要将自己的网关指向Director
(负载均衡器)即可,客户端可以是任意操作系统。
VS/NAT
将报文的目标IP
地址与目标端口改写成选定服务器(realserver
)的地址,最后将修改后的报文发送给选定的服务器(realserver
)。
Director
打开转发
LVS
在3种方式下均需要打开ip_forward
功能,配置如下:
编辑 /etc/sysctl.conf
文件:
net.ipv4.ip_forward = 1
配置立即生效执行:
sysctl -p
设置 SANT
/sbin/iptables -t nat -A POSTROUTING -s 172.27.233.0/24 -j MASQUERAD
如需要开机自动执行,可以将这条语句添加到 /etc/rc.local
文件。
添加规则
ipvsadm -C
ipvsadm -Z
ipvsadm --set 30 5 60
ipvsadm -A -t 172.27.233.41:80 -s wrr
ipvsadm -a -t 172.27.233.41:80 -r 10.0.0.43:80 -m -w 1
ipvsadm -a -t 172.27.233.41:80 -r 10.0.0.44:80 -m -w 2
参数含义
-C
:清除所有规则-Z
:计数器清零-A
:添加虚拟服务器-t
:tcp 服务-s
:调度算法,wrr 加权轮询-a
:添加真实服务器-m
:使用VS/NAT模式-w
:真实服务器的权值--set
(tcp tcpfin udp):设置连接超时值
查看规则
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.27.233.41:80 wrr
-> 10.0.0.43:80 Masq 1 0 0
-> 10.0.0.44:80 Masq 2 0 0
参数含义
-L
:显示虚拟服务器列表-n
:输出IP
地址和端口
RealServer
确保 realserver
网关地址为 Director
的 IP
地址。
ip route
172.27.233.0/24 dev eth0 proto kernel scope link src 172.27.233.43
10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.43
default via 10.0.0.41 dev eth0
模拟测试
客户端模拟请求
# 执行命令
for((i=1;i<=9;i++));do curl http://172.27.233.41/; done
# 返回结果
172.27.233.44
172.27.233.44
172.27.233.43
172.27.233.44
172.27.233.44
172.27.233.43
172.27.233.44
172.27.233.44
172.27.233.43
请求分配结果
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.27.233.41:80 wrr
-> 10.0.0.43:80 Masq 1 0 3
-> 10.0.0.44:80 Masq 2 0 6
客户端总共请求9
次,在lvs
加权轮询模式情况下:
10.0.0.43
(权重1)lvs
分配3
次请求。10.0.0.44
(权重2)lvs
分配6
次请求。
VS/DR 模式
在WEB
应用服务中请求的流量一般小于回应的流量,VS/DR(Virtual Server via Direct Routing
)模式利用这种非对称的特点,
Director
只负责调度请求,而RealServer
直接将相应的报文返回给客户机。
VS/DR
方式是通过改写请求报文中的MAC地址来实现的,Director
和 RealServer
必需在同一个广播域的网络。
RealServer
上绑定的VIP
配置在各自 Non-ARP
网络设备上(如 lo
或 tunl
),Director
的VIP
地址对外可见, RealServer
的VIP对外是不可见的。
Director
打开转发,方法请参考测试VS/NAT部分。
绑定VIP
/sbin/ifconfig lo:0 172.27.233.45 netmask 255.255.255.255 broadcast 172.27.233.45 up
/sbin/route add -host 172.27.233.45 dev lo:0
添加规则
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
/sbin/ipvsadm --set 30 5 60
/sbin/ipvsadm -A -t 172.27.233.45:80 -s wrr
/sbin/ipvsadm -a -t 172.27.233.45:80 -r 172.27.233.43:80 -g -w 1
/sbin/ipvsadm -a -t 172.27.233.45:80 -r 172.27.233.44:80 -g -w 1
参数含义
-g
使用VS/DR
模式。- 其它参数请参考
VS/NAT
。
查看规则
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.27.233.45:80 wrr
-> 172.27.233.43:80 Route 1 0 0
-> 172.27.233.44:80 Route 1 0 0
RealServer
由于VS/DR
工作原理,Realserver
需要抑制arp
广播。
绑定VIP
/sbin/ifconfig lo:0 172.27.233.45 netmask 255.255.255.255 broadcast 172.27.233.45 up
/sbin/route add -host 172.27.233.45 dev lo:0
忽略对VIP的ARP请求
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/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
查看VIP
ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:172.27.233.45 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
解除VIP
如果需要删除vip
,执行相反的步骤:
/sbin/ifconfig lo:0 down
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/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
模拟测试
客户端模拟请求
# 执行命令
for((i=1;i<=10;i++));do curl http://172.27.233.45/; done
# 返回结果
172.27.233.44
172.27.233.43
172.27.233.44
172.27.233.43
172.27.233.44
172.27.233.43
172.27.233.44
172.27.233.43
172.27.233.44
172.27.233.43
请求分配结果
ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.27.233.45:80 10 50 0 4330 0
-> 172.27.233.43:80 5 25 0 2165 0
-> 172.27.233.44:80 5 25 0 2165 0
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
连接数 输入包 输出包 输入流量 输出流量
参数含义
--stats
:显示统计信息- 其它参数请参考"测试VS/NAT"
客户端总共请求10
次,在lvs
加权轮询模式情况下:
10.0.0.43
(权重1)lvs
分配5
次请求。10.0.0.44
(权重1)lvs
分配5
次请求。
命令帮助
ipvsadm --help
-A --add-service
在内核的虚拟服务器表中添加一条新的虚拟服务器记录。-E --edit-service
编辑内核虚拟服务器表中的一条虚拟服务器记录。-D --delete-service
删除内核虚拟服务器表中的一条虚拟服务器记录。-C --clear
清除内核虚拟服务器表中的所有记录。-R --restore
恢复虚拟服务器规则。-S --save
保存虚拟服务器规则,输出为-R
选项可读的格式。-a --add-server
在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。-e --edit-server
编辑一条虚拟服务器记录中的某条真实服务器记录。-d --delete-server
删除一条虚拟服务器记录中的某条真实服务器记录。-L|-l --list
显示内核虚拟服务器表。-Z --zero
虚拟服务表计数器清零(清空当前的连接数量等)。--set tcp tcpfin udp
设置连接超时值--start-daemon
启动同步守护进程。他后面可以是master
或backup
,用来说明LVS Router
是master
或是backup
。--stop-daemon
停止同步守护进程-t --tcp-service service-address
说明虚拟服务器提供的是tcp
的服务。-u --udp-service service-address
说明虚拟服务器提供的是udp
的服务。-f --fwmark-service fwmark
说明是经过iptables
标记过的服务类型。-s --scheduler scheduler
使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
,默认的调度算法是:wlc
。-p --persistent
持久稳固的服务。这个选项是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout
的默认值为300
秒。-r --real-server server-address
真实的服务器。-g --gatewaying
指定LVS
的工作模式为直接路由模式(也是LVS 默认的模式)。-i --ipip
指定LVS
的工作模式为隧道模式。-m --masquerading
指定LVS
的工作模式为NAT
模式。-w --weight weight
真实服务器的权值。--mcast-interface interface
指定组播的同步接口。-c --connection
显示LVS 目前的连接 如:ipvsadm -L -c
。--timeout
显示tcp tcpfin udp
的timeout
值 如:ipvsadm -L --timeout
。--daemon
显示同步守护进程状态。--stats
显示统计信息。--rate
显示速率信息。--sort
对虚拟服务器和真实服务器排序输出。--numeric -n
输出IP 地址和端口的数字形式。