web学习

2. LVS命令使用

2021-03-13  本文已影响0人  随便写写咯

3.3 LVS相关软件

3.3.1 程序包:ipvsadm

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.3.2 ipvsadm 命令

ipvsadm核心功能:

集群服务管理:增、删、改
集群服务的RS管理:增、删、改
查看

ipvsadm工具的使用:

ipvsadm安装

[16:35:51 root@lvs ~]#yum -y install ipvsadm
[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm" # 启动ipvs时, 会加载 /etc/sysconfig/ipvsadm中保存的规则
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm" # 关闭ipvs时, 会保存内存中的ipvs规则到 /etc/sysconfig/ipvsadm文件
ExecStop=/sbin/ipvsadm -C # 并且执行/sbin/ipvsadm -C, 清空所有lvs规则
RemainAfterExit=yes

命令帮助

Commands:
Either long or short options are allowed.
  --add-service     -A        add virtual service with options  # virtual service就是一个lvs集群
  --edit-service    -E        edit virtual service with options
  --delete-service  -D        delete virtual service
  --clear           -C        clear the whole table
  --restore         -R        restore rules from stdin
  --save            -S        save rules to stdout
  --add-server      -a        add real server with options # 给集群添加RS
  --edit-server     -e        edit real server with options
  --delete-server   -d        delete real server
  --list            -L|-l     list the table
  --zero            -Z        zero counters in a service or all services

virtual-service:
  --tcp-service|-t  service-address   service-address is host[:port] # 让lvs处理tcp协议请求, 如http
  --udp-service|-u  service-address   service-address is host[:port] # 让lvs处理udp协议请求
  --sctp-service    service-address   service-address is host[:port]
  --fwmark-service|-f fwmark          fwmark is an integer greater than zero # f 防火墙标签
 scheduler:
 --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq|fo|ovf|mh,
                                     the default scheduler is wlc.

管理集群服务:增、改、删

增、修改:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

删除:

ipvsadm -D -t|u|f service-address 
service-address:

 -t|u|f:

 -t: TCP协议的端口,VIP:TCP_PORT

 -u: UDP协议的端口,VIP:UDP_PORT

 -f:firewall MARK,标记,一个数字

[-s scheduler]:指定集群的调度算法,默认为wlc

管理集群上的RS:增、改、删

增、改:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]          

删:

ipvsadm -d -t|u|f service-address -r server-address
server-address:

 rip[:port] 如省略port,不作端口映射

选项:

lvs类型:

 -g: gateway, dr类型,默认

 -i: ipip, tun类型

 -m: masquerade, nat类型

-w weight:权重

创建一个LVS集群

[16:54:22 root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 

查看集群

[16:54:27 root@lvs ~]#ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:http wlc


[16:54:30 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wlc

向集群添加Real Server

#默认DR模型
#-g:DR模型
#-i: tunnel模型
#-m: NAT模型
[16:55:19 root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.101 -w 2
[16:58:40 root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.102 -w 3
[16:58:44 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wlc
  -> 10.0.0.101:80                Route(表示DR模型)   2      0          0         
  -> 10.0.0.102:80                Route(表示DR模型)   3      0          0  

删除RS

[16:58:47 root@lvs ~]#ipvsadm -d -t 10.0.0.100:80 -r 10.0.0.101
[16:59:57 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wlc
  -> 10.0.0.102:80                Route   3      0          0  

删除集群

[17:00:02 root@lvs ~]#ipvsadm -D -t 10.0.0.100:80
[17:00:17 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

修改集群

[17:00:21 root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s wrr
[17:00:58 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr


[17:01:24 root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.101 -w 3
[17:01:58 root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.102 -w 5
[17:02:01 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0         
  -> 10.0.0.102:80                Route   5      0          0  

保存规则

#默认会打印到标准输出
#-n, 将服务解析成数字, 不加-n会作自动解析, 比较耗时
[17:02:04 root@lvs ~]#ipvsadm -S -n 
-A -t 10.0.0.100:80 -s wrr
-a -t 10.0.0.100:80 -r 10.0.0.101:80 -g -w 3
-a -t 10.0.0.100:80 -r 10.0.0.102:80 -g -w 5

#ipvsadm-save命令是一个Shell脚本, 会调用ipvsadm -S命令, 也是将规则默认打印到标准输出

[14:08:52 root@vip-1 ~]#ipvsadm-save
[17:03:29 root@lvs ~]#ipvsadm-save
-A -t 10.0.0.100:http -s wrr
-a -t 10.0.0.100:http -r 10.0.0.101:http -g -w 3
-a -t 10.0.0.100:http -r 10.0.0.102:http -g -w 5

[17:03:33 root@lvs ~]#ipvsadm-save -n
-A -t 10.0.0.100:80 -s wrr
-a -t 10.0.0.100:80 -r 10.0.0.101:80 -g -w 3
-a -t 10.0.0.100:80 -r 10.0.0.102:80 -g -w 5

#将规则保存到文件里

[17:03:42 root@lvs ~]#ipvsadm-save > /data/ipvsadm.rule
[17:05:09 root@lvs ~]#cat  /data/ipvsadm.rule
-A -t 10.0.0.100:http -s wrr
-a -t 10.0.0.100:http -r 10.0.0.101:http -g -w 3
-a -t 10.0.0.100:http -r 10.0.0.102:http -g -w 5

清空集群中的规则

[17:05:12 root@lvs ~]#ipvsadm -C
[17:05:39 root@lvs ~]#ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

加载保存的ipvsadm规则

#ipvsadm-restore也是一个Shell脚本, 会调用ipvsadm -R,默认从标准输入读取规则, 可以接文件

[17:05:41 root@lvs ~]#ipvsadm-restore < /data/ipvsadm.rule 
[17:06:02 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0         
  -> 10.0.0.102:80                Route   5      0          0  

#测试ipvsadm -R

[17:06:05 root@lvs ~]#ipvsadm -C 
[17:07:20 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[17:07:23 root@lvs ~]#ipvsadm -R < /data/ipvsadm.rule 
[17:07:29 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0         
  -> 10.0.0.102:80                Route   5      0          0 

将规则保存到能开启服务自动加载的文件里 /etc/sysconfig/ipvsadm

[14:17:02 root@vip-1 ~]#ls /etc/sysconfig/ip*
/etc/sysconfig/ip6tables-config  /etc/sysconfig/iptables-config  /etc/sysconfig/ipvsadm-config

/etc/sysconfig/ipvsadm默认是不存在的, 因此无法直接启动服务, 因为ipvsadm的service文件, 启动时会读取该文件内容

[17:09:08 root@lvs ~]#systemctl start ipvsadm
Job for ipvsadm.service failed because the control process exited with error code.
See "systemctl status ipvsadm.service" and "journalctl -xe" for details.

因此, 需要手动创建该文件, 并且, 即使该文件内容为空, 也无所谓, 只不过是启动服务后是没有任何规则的

[17:09:08 root@lvs ~]#touch /etc/sysconfig/ipvsadm
[17:11:15 root@lvs ~]#systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[17:11:24 root@lvs ~]#systemctl start ipvsadm
[17:11:31 root@lvs ~]#systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: active (exited) since Sat 2021-03-13 17:11:31 CST; 7s ago
  Process: 1558 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=0/SUCCESS)
 Main PID: 1558 (code=exited, status=0/SUCCESS)

Mar 13 17:11:31 lvs systemd[1]: Starting Initialise the Linux Virtual Server...
Mar 13 17:11:31 lvs systemd[1]: Started Initialise the Linux Virtual Server.


[14:21:06 root@vip-1 ~]#ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

将先前保存到/data/ipvsadm.rule文件中的规则导入内存中

[17:12:00 root@lvs ~]#ipvsadm -R < /data/ipvsadm.rule 
[17:12:16 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0         
  -> 10.0.0.102:80                Route   5      0          0   

停止ipvsadm服务, 测试加载的规则会被自动保存到/etc/sysconfig/ipvsadm.service文件中

[17:12:20 root@lvs ~]#cat /etc/sysconfig/ipvsadm
[17:13:08 root@lvs ~]#systemctl stop ipvsadm
[17:13:12 root@lvs ~]#cat /etc/sysconfig/ipvsadm
-A -t 10.0.0.100:80 -s wrr
-a -t 10.0.0.100:80 -r 10.0.0.101:80 -g -w 3
-a -t 10.0.0.100:80 -r 10.0.0.102:80 -g -w 5

停止服务后, 内存中的规则也会被清空

[17:13:13 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

注意:

再次启动ipvsadm, 验证ipvsadm会从/etc/sysconfig/ipvsadm文件中读取规则

[17:13:24 root@lvs ~]#systemctl start ipvsadm
[17:15:44 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0         
  -> 10.0.0.102:80                Route   5      0          0  

验证服务开机自动启动会加载规则

[17:15:49 root@lvs ~]#systemctl enable --now ipvsadm
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
[17:16:01 root@lvs ~]#reboot

a[17:17:23 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0         
  -> 10.0.0.102:80                Route   5      0          0  

补充:

加载到内存的ipvsadm的规则会存在/proc/net/ip_vs文件里, 以16进制数字显示

[17:18:07 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
TCP  0A000064:0050 wrr  
  -> 0A000066:0050      Route   5      0          0         
  -> 0A000065:0050      Route   3      0          0 

清空定义的所有内容

ipvsadm -C

清空计数器

ipvsadm -Z [-t|u|f service-address]
[17:18:10 root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wrr
  -> 10.0.0.101:80                Route   3      0          0       # 活动链接和非活动链接数会以计数器显示, 可以用 ipvsadm -Z 清空   
  -> 10.0.0.102:80                Route   5      0          0 

查看

ipvsadm -L|l [options]

 –numeric, -n:以数字形式输出地址和端口号

 –exact:扩展信息,精确值

 –connection,-c:当前IPVS连接输出

 –stats:统计信息

 –rate :输出速率信息
[17:19:52 root@lvs ~]#ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
上一篇 下一篇

猜你喜欢

热点阅读