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 ServerLinux虚拟服务器)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 地址和端口的数字形式。