ipvsadm 命令行工具
概述
参考:
Syntax(语法)
处理 Virtual Service 的命令语法:
- ipvsadm COMMAND VirtualService [-s Scheduler] [Persistence OPTIONS]
处理指定 Virtual Service 下的 Real Server 的命令语法:
- ipvsadm COMMAND VirtualService ServerAddress [PacketForwardingMethod] [Weight Options]
** 命令语法中各参数的含义
- VirtuslService # 用于指定基于协议或者地址或者端口号的虚拟服务,通过三元组定义:Protocol、IP、PORT。
- 格式:
-PROTOCOL IP:PORT
- -PROTOCOL 分两种
- -t, –tcp-service
- -u, –udp-service
- -PROTOCOL 分两种
- 格式:
- Scheduler # Director 的调度方法
- 详见 LVS 文章中描述的调度方法,使用其中 10 种任意一种的英文简称来写该参数,注意:是小写字母
- ServerAddress # RS 的 IP
- PacketForwardingMethod # 该位置指明 LVS 的工作模式,不写该参数表明默认 DR 类型
- -g, –gatewaying # 网关,表示 DR 模式
- -i, –ipip # IP 封装 IP,表示 TUN 模式
- -m, –masquerading # 伪装,表示 NAT 模式
- Weight Options # 权重选项
COMMAND
管理集群服务的 COMMAND
- -A, –add-service # 创建一个 VirtualService . 服务地址由 IP,PORT,protocol(协议)组成
- -E, –edit-service # 修改一个 VirtualService
- -D, –delete-service # 删除一个虚拟服务,以及相关的 RS
- -C, –clear # 清空这个虚拟服务器的表
- -R, –restore # 从标准输出还原 ipvs 规则
- -S, –save# 保存 ipvs 规则到标准输出
管理集群服务中的 RS 的 COMMAND
- -a, –add-server # 向指定的 VirtualService 中添加一个 RS
- -e, –edit-server # 修改指定 VirtualService 中的 RS
- -d, –delete-server # 从指定的 VirtualService 中移除一个 RS
通用的 COMMAND
- -Z, –zero # 清空一个或所有 Virtual Service 下的数据包
- -L, -l, –list # 如果没有指定参数,则列出虚拟服务器表。如果输入了 service-address,只列出该服务。
- –set TCP TCPFIN UDP # 更改用于 IPVS 连接的超时值。 此命令始终使用 3 个参数,分别表示 TCP 会话,接收到 FIN 数据包后的 TCP 会话和 UDP 数据包的超时值(以秒为单位)。 超时值 0 表示保留了相应条目的当前超时值。
默认值:900 120 300
。
OPTIONS
- -p, –persistent [TIME] # 指定持久连接的超时时间
与 -L, -l, –list 命令搭配使用的选项
- -n # 当配合 -l 查询的时候,显示 IP 地址而不显示主机名,即不把 IP 解析成主机名。与 -l 命令配合时,效果如下:
[root@dr-01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4194304)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.9.60:80 rr
-> 10.10.9.61:80 Route 1 0 0
-> 10.10.9.62:80 Route 1 0 0
TCP 10.10.9.60:30000 rr persistent 30
-> 10.10.9.69:30000 Route 1 0 0
-> 10.10.9.70:30000 Route 1 0 0
Forward # 当前 lvs 的模型,其中 Masq 为 nat 模型,route 为 dr 模型
Weight # 当前 rs 的权重
ActiveConn # 活动连接数,也就是 tcp 连接状态的 ESTABLISHED;
InActConn # 指除了 ESTABLISHED 以外的,所有的其它状态的 tcp 连接.
-c, –connection # 输出 ipvs 当 前的连接状态信息。效果如下:
[root@node-1 ~]# ipvsadm –list -nc IPVS connection entries pro expire state source virtual destination TCP 14:52 ESTABLISHED 10.244.3.238:60996 10.96.0.1:443 172.38.40.214:6443 UDP 03:39 UDP 10.244.3.244:39398 10.96.0.10:53 10.244.0.39:53 TCP 14:48 ESTABLISHED 10.244.3.238:58412 10.96.0.1:443 172.38.40.214:6443
–timeout # 输出 TCP 会话,接收到 FIN 数据包后的 TCP 会话和 UDP 数据包的超时值(以秒为单位)。效果如下:
[root@node-1 ~]# ipvsadm -ln –timeout Timeout (tcp tcpfin udp): 900 120 300
–daemon# Daemon information output. The list command with this option will display the daemon status and its multicast interface.
–stats # 显示统计数据,效果如下
[root@node-1 ~]# ipvsadm -ln –stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 172.38.40.216:30080 0 0 0 0 0 -> 10.244.5.86:80 0 0 0 0 0 TCP 10.96.0.1:443 66 4327 4056 500036 4558037 -> 172.38.40.212:6443 22 835 702 147508 743066 -> 172.38.40.213:6443 22 2485 2432 240938 2923352 -> 172.38.40.214:6443 22 1007 922 111590 891619
–rate # 速率信息输出。显示服务及其服务器的速率信息(例如,连接/秒,字节/秒和数据包/秒)。
–thresholds # 输出阈值信息。显示服务列表中每个服务器的上/下连接阈值信息。
–persistent-conn # 持久连接信息的输出。在服务列表中显示每个服务器的持久连接计数器信息。持久连接用于将实际连接从同一客户端/网络转发到同一服务器。
EXAMPLE
- 管理集群服务
- ipvsadm -A|E virtual-service [-s SCHEDULER] # 增加修改
- ipvsadm -A -t 192.168.0.63:80 -s rr # 添加一个虚拟服务,调度模式为轮询
- ipvsadm -D virtual-service # 删除
- ipvsadm -A|E virtual-service [-s SCHEDULER] # 增加修改
- 管理集群服务中的 RS
- ipvsadm -a|e virtual-service -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
- ipvsadm -d virtual-service -r server-address
- ipvsadm -a -t 192.168.0.60:80 -r 192.168.0.62 -g # 添加一个 IP 为 0.62 的 RS 到 0.60 的 LVS 中,LVS 类型为-g,dr 类型
- 通用
- ipvsadm -C # 清空
- ipvsadm -L|l [virtual-service] [options] # 查询
- ipvsadm -R
- ipvsadm -S [-n]
- ipvsadm -Ln # 查询,直接显示 IP 不显示主机名,信息如下所示
那既然这样,为什么从 lvs 里看的 ActiveConn 会比在真实机上通过 netstats 看到的 ESTABLISHED 高很多呢?
原来 lvs 自身也有一个默认超时时间.可以用 ipvsadm -L –timeout 查看,默认是 900 120 300,分别是 TCP TCPFIN UDP 的时间.也就是说一条 tcp 的连接经过 lvs 后,lvs 会把这台记录保存 15 分钟,而不管这条连接是不是已经失效(哪怕这次 http 请求已经完成切断开连接,但是在 lvs 中有保存记录)!所以如果你的服务器在 15 分钟以内有大量的并发请求连进来的时候,你就会看到这个数值直线上升.
其实很多时候,我们看 lvs 的这个连接数是想知道现在的每台机器的真实连接数吧?怎么样做到这一点呢?其实知道现在的 ActiveConn 是怎样产生的,做到这一点就简单了.举个例子:比如你的 lvs 是用来负载网站,用的模式是 dr,后台的 web server 用的 nginx 这时候一条请求过来,在程序没有问题的情况下,一条连接最多也就五秒就断开了.这时候你可以这样设置 ipvsadm –set 5 10 300.设置 tcp 连接只保持 5 秒中.如果现在 ActiveConn 很高你会发现这个数值会很快降下来,直到降到和你用 nginx 的 status 看当前连接数的时候差不多.你可以继续增加或者减小 5 这个数值,直到真实机的 status 连接数和 lvs 里的 ActiveConn,一般保证该数值与后端 RS 中代理服务的连接保持时间相当即可
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.