Что такое ipvsadm?
ipvsadm — это инструмент, используемый для настройки, обслуживания или просмотра таблицы виртуальных серверов в ядре Linux.LVS (виртуальный сервер Linux) может создавать эластичные сетевые службы на основе двух или более узлов в кластере и активных узлов в кластере. может перенаправлять запросы на обслуживание на набор хостов, которые фактически предоставляют услуги, предоставляя два протокола, включая TCP и UDP, три режима пересылки пакетов (NAT/туннелирование/прямая маршрутизация) и восемь алгоритмов балансировки нагрузки (раунд-робин). наименьшее соединение, взвешенное наименьшее соединение, наименьшее соединение на основе местоположения, наименьшее соединение на основе местоположения с репликацией, хеширование назначения и хеширование источника).
Как использовать
ipvsadm предоставляет два основных формата использования, квадратные скобки обозначают необязательный параметр, а два формата команд соответствуют виртуальному серверу и реальному серверу соответственно.
ipvsadm COMMOND [protocol] service-address [scheduling-method] [persistence options]
или
ipvsadm command [protocol] service-address server-address [packet-forwarding-method] [weight options]
Первый формат команды используется для настройки виртуальной службы (виртуальной службы) и алгоритма, используемого для распределения запросов службы на реальные серверы, а другие параметры — это тайм-аут сохранения и сетевая маска для постоянных служб.
Второй формат команды используется для настройки реального сервера, связанного с существующим виртуальным сервером.При указании реального сервера необходимо указать метод пересылки пакетов и вес реального сервера относительно других реальных серверов под виртуальным сервером. в противном случае будет использоваться значение по умолчанию.
- установить ipvsadm
[root@10-10-40-96 ~]# yum instal -y ipvsadm
Описание параметра команды
Соглашение заключается в том, что верхний регистр используется для виртуального сервера, а нижний — для реального сервера.
-A, --add-service 添加virtual server, virtual server必须唯一(IP+端口+协议用于区分一个唯一的虚拟服务)
-E, --edit-service 编辑虚拟服务
-D, --delete-service 删除一个虚拟服务, 包括与之关联的真实服务器
-C, --clear 清空虚拟服务表
-R, --restore 通过标准输入恢复虚拟服务表(IPVS table)
-S, --save 以可以通过-R参数恢复的格式导出虚拟服务表到标准输出
-a, --add-server 添加一个真实服务器到一个虚拟服务
-e, --edit-server 在一个虚拟服务当中编辑一个真实服务器
-d, --delete-server 从一个虚拟服务当中移除一个真实服务器
-L, -l, --list 列出虚拟服务表, 默认是列出所有虚拟服务表, 若需要列出某服务表, 后面指定服务地址即可
-Z, --zero 清零一个所有服务的数据包 / 字节 / 速率计数器
Пример
- Посмотреть IPVS
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.88.188:7480 wlc persistent 1800
-> 172.16.130.20:7480 Masq 1 0 0
[root@10-10-88-192 ~]#
- Сохранить IPVS
По умолчанию выводится на стандартный вывод, который можно перенаправить в текст для сохранения, что удобно для последующего импорта.
[root@10-10-88-192 ~]# ipvsadm -S -n
-A -t 10.10.88.188:7480 -s wlc -p 1800
-a -t 10.10.88.188:7480 -r 172.16.130.20:7480 -m -w 1
[root@10-10-88-192 ~]# ipvsadm -S -n > ipvs_info
[root@10-10-88-192 ~]#
- Очистить IPVS
[root@10-10-88-192 ~]# ipvsadm -C
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@10-10-88-192 ~]#
- восстановить (восстановить) IPVS
Примечание. По умолчанию восстановление выполняется со стандартного ввода.
[root@10-10-88-192 ~]# cat ipvs_info | ipvsadm -R
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.88.188:7480 wlc persistent 1800
-> 172.16.130.20:7480 Masq 1 0 0
[root@10-10-88-192 ~]#
- удалить реальный сервер
[root@10-10-88-192 ~]# ipvsadm -d -t 10.10.88.188:7480 -r 172.16.130.20:7480
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.88.188:7480 wlc persistent 1800
[root@10-10-88-192 ~]#
Примечание. После удаления реального сервера пункт назначения (конечная точка) будет перемещен в корзину (временную корзину), а затем удален через определенный период времени. Если в течение этого периода к реальному серверу снова можно будет получить доступ, он будет взят вернуть из корзины и продолжать использовать. Конкретные инструкции см. в комментариях к исходному коду IPVS.
https://elixir.bootlin.com/linux/v3.0/source/net/netfilter/ipvs/ip_vs_ctl.c
, после открытия режима отладки IPVS (debug_level=8)dmesg -Hew
Выход
[Sep26 11:08] IPVS: Enter: ip_vs_del_dest, net/netfilter/ipvs/ip_vs_ctl.c line 1079
[ +0.000007] IPVS: Moving dest 172.16.130.20:7480 into trash, dest->refcnt=1
[ +0.000002] IPVS: Leave: ip_vs_del_dest, net/netfilter/ipvs/ip_vs_ctl.c line 1101
[ +11.076403] IPVS: Removing destination 0/172.16.130.20:7480 from trash
- добавить реальный сервер
[root@10-10-88-192 ~]# ipvsadm -a -t 10.10.88.188:7480 -r 172.16.130.22:7480 -m
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.88.188:7480 wlc persistent 1800
-> 172.16.130.22:7480 Masq 1 0 0
[root@10-10-88-192 ~]#
- Добавить виртуальный сервер
[root@10-10-88-192 ~]# ipvsadm -A -t 10.10.88.189:7480 -s wlc -p 1800
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.88.188:7480 wlc persistent 1800
-> 172.16.130.22:7480 Masq 1 0 0
TCP 10.10.88.189:7480 wlc persistent 1800
[root@10-10-88-192 ~]#
- удалить виртуальный сервер
[root@10-10-88-192 ~]# ipvsadm -D -t 10.10.88.189:7480
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.88.188:7480 wlc persistent 1800
-> 172.16.130.22:7480 Masq 1 0 0
Если вы удалите виртуальный сервер напрямую, если есть реальный сервер, реальный сервер также будет удален.
[root@10-10-88-192 ~]# ipvsadm -D -t 10.10.88.188:7480
[root@10-10-88-192 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@10-10-88-192 ~]#