Linux 使用ipvsadm管理LVS
作者:互联网
-
lvs是内核里面的功能,在内核中叫做ipvs
-
用户空间使用ipvsadm这个工具包提供的工具来管理内核中的ipvs功能
ipvsadm 命令
ipvsadm核心功能:
-
集群服务管理:增、删、改
-
集群服务的RS管理:增、删、改
-
查看
使用 ipvsadm 管理集群服务:增、改、删
增、修改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
说明:
-A:表示新增
-E:表示修改
service-address:集群的地址(VIP:port)
-t|u|f: # 指定这个vip端口使用的协议类型
-t: TCP协议的端口,VIP:TCP_PORT 如: -t 10.0.0.100:80
-u: UDP协议的端口,VIP:UDP_PORT 如:-u 10.0.0.100:80
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc
例如:表示创建了一个负载均衡集群,lvs的ip为10.0.0.100
ipvsadm -A -t 10.0.0.100:80 -s wrr
例如:修改lvs的调度算法为rr
[root@lvs ~]# ipvsadm -E -t 192.168.10.100:80 -s rr
[root@lvs ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs:http rr
-> 10.0.0.7:http Masq 1 0 0
-> 10.0.0.17:http Masq 1 0 0
删除:
ipvsadm -D -t|u|f service-address
说明:
-D:表示删除
使用 ipvsadm 管理集群上的RS:增、改、删
增、改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
说明:
server-address: #在添加rs的时候,指定前面创建的集群地址
rip[:port] #如省略port,不作端口映射
-r: 后端服务器rs的RIP地址
选项:
lvs类型: #表示指定lvs使用的功能模式
-g: gateway, dr类型,默认使用dr这种工作模式
-i: ipip, tun类型
-m: masquerade(伪装), nat类型
-w weight:权重 指定这个rs的权重
范例:新增rs到集群中
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.8:8080 -m -w 3
范例:修改rs的权重,默认为1
[root@lvs ~]# ipvsadm -e -t 192.168.10.100:80 -r 10.0.0.17 -m -w 3
[root@lvs ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs:http rr
-> 10.0.0.7:http Masq 1 0 0
-> 10.0.0.17:http Masq 3 0 0
删:
ipvsadm -d -t|u|f service-address -r server-address
清空定义的所有内容:
ipvsadm -C
信息查看:
ipvsadm -L|l [options]
-L:查看创建的集群信息
例如:查看集群的信息
[root@lvs ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs:http wrr
-> 10.0.0.7:http Masq 1 0 0
-> 10.0.0.17:http Masq 1 0 0
--numeric, -n:以数字形式输出地址和端口号
--exact:扩展信息,精确值
--connection,-c:当前IPVS连接输出,查看连接信息
--stats:统计信息
--rate :输出速率信息
ipvs规则:
/proc/net/ip_vs
例如:
#存放在内存中的 十六进制格式显示
[root@lvs ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn #InActConn表示的是非活动的链接
TCP C0A80A64:0050 wrr
-> 0A000011:0050 Masq 1 0 0
-> 0A000007:0050 Masq 1 0 0
ipvs连接:
/proc/net/ip_vs_conn
例如:
[root@lvs ~]# cat /proc/net/ip_vs_conn #存放的是pvs的连接信息 十六进制显示
Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PEName PEData
TCP C0A80A06 A5B8 C0A80A64 0050 0A000011 0050 TIME_WAIT 115
TCP C0A80A06 A5B0 C0A80A64 0050 0A000011 0050 TIME_WAIT 113
TCP C0A80A06 A5C2 C0A80A64 0050 0A000007 0050 TIME_WAIT 117
TCP C0A80A06 A5C4 C0A80A64 0050 0A000011 0050 TIME_WAIT 117
TCP C0A80A06 A5BA C0A80A64 0050 0A000007 0050 TIME_WAIT 115
TCP C0A80A06 A5AC C0A80A64 0050 0A000011 0050 TIME_WAIT 112
TCP C0A80A06 A5AE C0A80A64 0050 0A000007 0050 TIME_WAIT 113
TCP C0A80A06 A5C0 C0A80A64 0050 0A000011 0050 TIME_WAIT 116
TCP C0A80A06 A5B6 C0A80A64 0050 0A000007 0050 TIME_WAIT 115
TCP C0A80A06 A5AA C0A80A64 0050 0A000007 0050 TIME_WAIT 106
TCP C0A80A06 A5C6 C0A80A64 0050 0A000007 0050 TIME_WAIT 118
TCP C0A80A06 A5B4 C0A80A64 0050 0A000011 0050 TIME_WAIT 114
TCP C0A80A06 A5BE C0A80A64 0050 0A000007 0050 TIME_WAIT 116
TCP C0A80A06 A5B2 C0A80A64 0050 0A000007 0050 TIME_WAIT 114
TCP C0A80A06 A5BC C0A80A64 0050 0A000011 0050 TIME_WAIT 116
lvs规则的保存:
规则默认是保存在内存中的。需要写入一个对应的文件,开启的时候重新加载他生效。
建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
lvs的Uint服务:
[root@lvs ~]# cat /usr/lib/systemd/system/ipvsadm.service
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm" #会自动保存规则至/etc/sysconfig/ipvsadm
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm" #会自动加载/etc/sysconfig/ipvsadm中规则
ExecStop=/sbin/ipvsadm -C #会自动清空内存中的规则
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target