对ipvsadm 的命令参考,并根据自己使用的经验,进行了一个简单的翻译,希望
对ipvsadm 的使用者有一定的帮助。
为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍
一下:
1,virtual-service-address:是指虚拟服务器的ip 地址
2,real-service-address:是指真实服务器的ip 地址
3,scheduler:调度方法
命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
以。
-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。在这个功能上也可以采用keepalived 的
VRRP 功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-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 地址和端口的数字形式
LVS琐碎记忆:
1、InActConn并不代表错误连接,它是指不活跃连接(Inactive Connections),
我们将处于TCP ESTABLISH状态以外的连接都称为不活跃连接,例如处于SYN_RECV状态的连接,处于TIME_WAIT状态的连接等。
2、用四个参数来关闭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
3、ipvsadm -L -n --stats
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
连接数 输入包 输出包 输入流量 输出流量
4、注意事项:
1)在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。
虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255。 为什么要这样呢?因为有若干机器要使用同一个ip地址,
用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。
2)假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地 址还是被替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp 命令(piranha软件包里带的一个小工具) 格式如下:
send_arp:
send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr
这个命令不一定非要在VS上执行,只+要在同一VLAN即可。
/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW
5.Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地
提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连
在同一物理网段上。
6. LVS 经验:
1). LVS调度的最小单位是“连接”。
2). 当apache的KeepAlive被设置成Off时,“连接”才能被较均衡的调度。
3). 在不指定-p参数时,LVS才真正以“连接”为单位按“权值”调度流量。
4). 在指定了-p参数时,则一个client在一定时间内,将会被调度到同一台RS。
5). 可以通过”ipvsadm –set tcp tcpfin udp”来调整TCP和UDP的超时,让连接淘汰得快一些。
6). 在NAT模式时,RS的PORT参数才有意义。
7). DR和TUN模式时,InActConn 是没有意义的(Thus the count in the InActConn column for LVS-DR, LVS-Tun is
inferred rather than real.)
/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW
三、LVS 性能调优
Least services in System or Compile kernel.
Performace Tuning base LVS:
LVS self tuning( ipvsadm Timeout (tcp tcpfin udp)).
ipvsadm -Ln --timeout
Timeout (tcp tcpfin udp): 900 120 300
ipvsadm --set tcp tcpfin udp
Improving TCP/IP performance
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_fin_timeout=30
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog=3000
项目实施案例及经验分享:
1、机房无法实时刷新MAC,LVS+Heartbeat方案无法正常随机切换IP?
假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里无法及时刷新MAC.关于vip这个
地址的MAC地址还是替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp /arpiing命令.
以arping命令为例.
/sbin/arping -I eth0 -c 3 -s ${vip}${gateway_ip} > /dev/null 2>&1
Eg:
/sbin/arping -I eth0 -c 3 -s 192.168.1.6192.168.1.1
【注】07年部署某大型商业网站项目时,263机房遇到此问题,最好让机房调整路由
MAC缓存表的刷新频率;同朋公司移动机房实施相关项目时发现切换IP后还是无法
访问VIP,最后利用上面的arping一个命令搞定.
【附】如果采用Piranha/keealived方案切换的时候会内置自动发送send_arp命令.
UltraMonkey方案经测试也会自动发送此命令.如用heartbeat方案,需要写一个send_arp或者arping相关的脚本当作
heartbeat一个资源切换服务的时候自动发送
相关命令脚本.
2、某台机器down掉以后,IPVS列表中权值已经置0了,为什么还轮询到这台机器上?
配置 ldirectord.conf
quiescent=no或 echo 1 >/proc/sys/net/ipv4/vs/expire_nodest_conn
【注】经如上设置某台Realserver服务down掉以后如何从IPVS列表自动中删除恢复时如何自动添加.
3、为什么做压力测试的时候,LVS不能负载均衡多部分连接只到某一台机器上?
难道是LVS不能实现真正的负载均衡?
这和LVS脚本里指定-p参数有关,如果指定了一个client在一定的时间内,将会被调度到同一台RS上。所以你在从来源来做压力测试的时候大部分连接
会调度到同一台机器上,这样就出现了负载不均衡的状况。很多人经常问我这个问题,仍后我叫他们多从几个点去同时向LVS服务器做压力测试的时候就发现负载
很均衡了。
阅读(2223) | 评论(0) | 转发(0) |