跳转至

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软件 MasterBackup 都要安装:

# 安装 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 网关地址为 DirectorIP地址。

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地址来实现的,DirectorRealServer 必需在同一个广播域的网络。

RealServer 上绑定的VIP配置在各自 Non-ARP 网络设备上(如 lotunl),DirectorVIP地址对外可见, 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 启动同步守护进程。他后面可以是masterbackup,用来说明LVS Routermaster 或是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 udptimeout 值 如:ipvsadm -L --timeout
  • --daemon 显示同步守护进程状态。
  • --stats 显示统计信息。
  • --rate 显示速率信息。
  • --sort 对虚拟服务器和真实服务器排序输出。
  • --numeric -n 输出IP 地址和端口的数字形式。

参考

Back to top