5. Обзор команд CLI

balancer detailed (on|off)

Включить/выключить более детальный вывод информации в balancer show persistence mappings

balancer show service all

Отобразить информацию по всем сервисам. Будут выведены следующие значения:

Значения

Описание

intervals.gc 1000

Период в миллисекундах, с которым выполняется поток Garbage Collector.

intervals.rate 2000

Период в миллисекундах, с которым считается скорость изменения статистик пoтоком Rate.

intervals.persist 5000

Период в миллисекундах, с которым выполняется поток Persistence.

intervals.wait_dst 2000

Период в миллисекундах, с которым поток Wait Destination выполняет проверку сетевой связности с RS (route, ARP).

sizes.service_map_size 1048576

Размер таблицы сервисов.

sizes.persistence_map_size 1048576

Размер таблицы Persistence.

sizes.max_workers_num 8192

Максимальное количество RS.

sizes.free_workers_num 8190

Количество свободных RS.

sizes.max_services_num 192

Максимальное количество сервисов.

current.services 2

Текущее количество сервисов.

current.workers 0

Не определено.

settings.force_close_all_proto 0

  • 0 - оставляем соединение в случае недоступности RS

  • 1 - незамедлительно сбрасываем соединение в случае недоступности RS

Тут речь идет о протоколе TCP. В случае UDP не имеет смысла держать соединение открытым, оно принудительно закрывается в независимости от значения этого параметра. Если связность восстановится, его можно пересоздать. Проверка проводится при обработке EVENT, который происходит при истечении timeout соединения.

stat.force_close 0

Количество принудительно закрытых соединений из-за потери сетевой связности RS.

stat.persist_sync_no_space 0

Нет свободной ячейки в таблице Persistence, новая запись не создалась через сообщение синхронизации.

stat.persist_sync_new 0

Количество записей persistence, созданных через сообщения синхронизации.

stat.persist_sync_update 0

Количество обновлений persistence, полученных через сообщения синхронизации.

stat.persist_sync_error_wrong_worker 0

В обновлении записи persistence, полученном через сообщение синхронизации, идентификатор RS не совпадает с тем, что записан в локальной таблице.

stat.persist_no_free_conn 0

Не получилось создать новое соединение через сообщение синхронизации, потому что закончились свободные соединения в пуле.

stat.persist_wrong_sid 0

В конфигурации балансировщика не удалось найти сервис, который упоминается в сообщении синхронизации. Обработка сообщения будет остановлена.

stat.persist_unknow_worker 0

В конфигурации балансировщика не удалось найти RS, который упоминается в сообщении синхронизации. Обработка сообщения будет остановлена.

stat.persist_disabled_worker 0

RS, который упоминается в сообщении синхронизации, находится в состоянии отличном от ENABLE. Обработка сообщения будет остановлена.

stat.persist_dead_by_timer 0

Количество записей, удаленных из таблицы Persistence по истечении timeout.

stat.sync_inactive 0

Всегда 0.

stat.sync_match 0

Cоединение, которое упоминается в сообщении синхронизации, найдено в таблице соединений. Информация о времени последнего использования и состоянии TCP (для TCP-соединений) будет обновлена.

stat.sync_unmatch 0

Cоединение, которое упоминается в сообщении синхронизации, найдено в таблице соединений, но с другим RS. Информация о RS будет обновлена.

stat.add_worker 2

Количество вызовов API, в которых добавляется RS.

stat.edit_worker 0

Количество вызовов API, в которых редактируется RS.

stat.remove_worker 0

Количество вызовов API, в которых удаляется RS.

stat.add_service 2

Количество вызовов API, в которых добавляется сервис.

stat.edit_service 0

Количество вызовов API, в которых редактируется сервис.

stat.remove_service 0

Количество вызовов API, в которых удаляется сервис.

stat.sch_add_worker 2

Количество добавлений RS в планировщик.

stat.sch_remove_worker 0

Количество удалений RS из планировщика.

stat.sch_init 2

Количество реинициализаций структур планировщика. Реинициализация происходит при изменении состояния RS на ENABLE или из ENABLE в любое другоe.

stat.sch_init_empty 2

Количество инициализаций планировщика. В этот момент в сервисе отсутсвуют RS в состоянии ENABLE.

stat.sch_deinit 0

Количество деинициализаций планировщика при изменении/удалении сервиса.

stat.worker_state_enabled 2

Количество переходов RS в состояние ENABLE.

stat.worker_state_disabled 0

Количество переходов RS в состояние DISABLE.

stat.worker_state_dead 0

Количество переходов RS в состояние DEAD.

stat.worker_state_wait_dst 2

Количество раз, которое RS был добавлен в очередь проверки сетевой связности (routing и ARP).

stat.worker_to_free 0

Количество удалений RS. Количество переходов из состояния DEAD в состояние FREE.

stat.worker_reset_persist 0

Количество вызовов подсистемы принудительного удаления записей persistence, которая срабатывает при переходе RS из состояния ENABLE в любое другое. Записи persistence при этом могут отсутствовать, удалять в этом случае нечего.

stat.persist_clear_mismatch 0

Количество раз, когда подсистема принудительного удаления записей persistence действительно удалила какие-то записи из таблицы Persistence, потому что они существовали. Срабатывает при переходе RS из из состояния ENABLE в любое другое.

stat.update_dst 528

Количество проверок сетевой связности (routing, ARP) с RS. Выполняется служебным потоком Wait Destination.

stat.sync_change 643

Количество синхронизаций после изменения настроек между Control Plane и Data Plane. Построена эта синхронизация на Lock-free механизме Read-Copy-Update (RCU).

service id 191

Идентификационный номер сервиса (SID).

Кроме вышеуказанной информации будет выведена следующая:

ap num vip                  port     proto
0      5.61.23.13           80       tcp
workers               4
scheduler             wrr
persist mask          0
persist timeout       0ms
conn rate limit       0
worker_8188: 10.124.128.213 TUN weight 100 ON
routing info:
           src_ip                                             port     dst_mac              mtu
0          172.10.1.200                                       eth2     00:00:0c:07:ac:36    1500
total_conn            10
active_conn           0
persist_conn          0
in_packets            43850
in_bytes              3560037
out_packets           10
out_bytes             686
total_conn_ps         1
active_conn_ps        1
persist_conn_ps       0
in_packets_ps         1
in_bytes_ps           7
out_packets_ps        1
out_bytes_ps          7
service id            190
ap num vip                  port     proto
0      172.10.1.201         80       udp
workers               1
scheduler             wrr
persist mask          0
persist timeout       0ms
conn rate limit       0
worker_8190: 172.10.1.100 DR weight 1 ON
routing info:
           src_ip                                             port     dst_mac              mtu
0          172.10.1.200                                       eth2     ee:60:d2:29:34:a6    1500
total_conn            0
active_conn           0
persist_conn          0
in_packets            0
in_bytes              0
out_packets           0
out_bytes             0
total_conn_ps         0
active_conn_ps        0
persist_conn_ps       0
in_packets_ps         0
in_bytes_ps           0
out_packets_ps        0
out_bytes_ps          0
src_ip         dst_ip         iface    dst_mac UA flags
172.10.1.200   172.10.1.100   eth2     EE:60:D2:29:34:A6 UA
balancer show persistence mappings

Вывести таблицу Persistence.

expired  vip                  client      worker
6:0      TCP 172.10.1.201:80  172.10.1.1  172.10.1.100
balancer show service id A

Вывести информацию по сервису (фильтр по SID).

balancer show service ip A.B.C.D port A

Вывести информацию по сервису (фильтр по IP:Port).

balancer show worker service A ip A.B.C.D

Вывести информацию по RS (фильтр по SID и IP-адресу RS).

balancer show worker id A

Вывести информацию по RS (фильтр по ID RS).

service A add (tcp|udp) A.B.C.D <1-65535> scheduler (wrr|wlc|sh) persist mask size A timeout A

Аналог ipvsadm –A.

service del (tcp|udp) A.B.C.D <1-65535>

Аналог ipvsadm -D.

service A edit scheduler (wrr|wlc|sh) persist mask size A timeout A

Аналог ipvsadm –E.

service A add worker ip A.B.C.D (dr|tunnel)
service A add worker ip A.B.C.D (dr|tunnel) weight A

Аналог ipvsadm -a.

service A del worker ip A.B.C.D

Аналог ipvsadm -d.

[no] enable close all proto

Незамедлительно закрыть соединения всех протоколов в случае потери сетевой связности с RS. Если эта опция не активирована, то в случае недоступности RS принудительно закроются только UDP-соединения. TCP-соединения будут ждать естественного завершения. Посмотреть текущее значение параметра можно тут.

balancer service A edit conn_rate_limit A

Задать Connection Rate для сервиса по SID (максимальная скорость создания новых соединений).

balancer service edit_conn_rate_limit ip A.B.C.D port A conn_rate_limit A

Задать Connection Rate для сервиса по IP:Port.

show connections info

Запросить информацию о состоянии балансировщика, статистики по соединениям, отброшенным пакетам, утилизации CPU и многое другое. Вывод команды будет следующим:

data plane info
cpus utilization: worker 0.00   poll 0.00   combo 0.00
DP core 0 lcore 3
   CPU utilization for last 1002 msec
   part            core %     system %   tsc
   worker.idle     100.00     100.00     2405195316
   worker.busy     0.00       0.00       4926
   poll.idle       0.00       0.00       0
   poll.rx         0.00       0.00       0
   poll.tx         0.00       0.00       0
   busy            0.00       0.00       4926
   idle            100.00     100.00     2405195316
worker                0
rx_queues get                 put
0         3041                3041
tx_queues get                 put
0         0                   0
data-plane statistics:
dp__aux_send                            3041
dp__released                            0
dp__event_add                           0
dp__ip_less3                            2974
dp__ip_by8                              7
dp__ip_by4                              1
dp__ip_by1                              1
dp__ip_tail                             2
dp__non_aliased_icmp                    0
dp__non_balanced_packet                 0
dp__icmp_non_supported_l4               0
dp__translated_icmp                     0

Ниже можно увидеть описание некоторых Data Plane счетчиков:

Значения

Описание

dp__aux_send 2

Количество пакетов, отправленных на обработку в AUX-поток.

dp__released 0

Количество пакетов, отброшенных в процессе обработки. Отброшенные пакеты возвращаются в MBUF-пул.

dp_event_add 1

Количество добавленных EVENT.

dp__ip_less3 5

Количество чтений из очередей сетевых интерфейсов, которые вернули меньше 4 пакетов. Прочитать из очереди система пытается 32 пакета за раз.

dp__ip_by8 0

Для оптимизации работы цикл обработки пакетов развернут: сначала идет цикл, где за одну итерацию обрабатывается по 8 пакетов. Счетик считает количество таких итераций. Цикл запускается только в том случае, если чтение из очереди сетевого интерфейса вернуло больше 8 пакетов за раз.

dp__ip_by4 0

Если после выполения цикла, который описан выше, количество необработанных пакетов осталось больше или равно 4, запускается процесс обработки сразу четырех пакетов. Счетчик показывает количество выполнений данного условия.

dp__ip_by1 0

Количество пакетов, обработанных по одному после описанных выше оптимизаций.

dp__ip_tail 0

Счетчик показывает количество ненулевых (был вычитан хотя бы один пакет) чтений из очередей сетевых интерфейсов.

dp__non_aliased_icmp 0

Не определено.

dp__non_balanced_packet 0

Количество пакетов, для которых по Destination IP:Port не удалось найти соответствующий сервис в конфигурации балансировщика. Пакет отправится в OC Linux через AUX-поток.

dp__icmp_non_supported_l4 0

Неподдерживаемый протокол в ICMP-ошибке (поддерживается только TCP). Пакет отправится в OC Linux через AUX-поток.

dp__translated_icmp 0

Количество обработанных ICMP-ошибок.

dp__non_translated_icmp 0

Не поддерживаемый тип ICMP-пакетов. Поддерживается только Destination Unreachable. Пакет отправится в OC Linux через AUX-поток.

dp__non_ipv4_size 0

Количество пакетов с размером меньше минимального для IPv4. Пакет отправится в OC Linux через AUX-поток.

dp__l2_multicast 0

Количество пакетов на мультикастный Ethernet-адрес. Пакет отправится в OC Linux через AUX-поток.

dp__non_ipv4 0

Всегда 0.

dp__fragmented 0

Количество фрагментированных пакетов, отправленных на сборку в AUX-поток.

dp__not_supported_l4 0

Не поддерживаемый L4 протокол (поддерживаются TCP, UDP, ICMP).

dp__fragmentation_dont_frag 0

Всегда 0.

dp__fragmentation_no_mem 0

Не получилось выделить пакеты из MBUF-пула, чтобы выполнить IP-фрагментацию.

dp__fragmentation_bogus_size 0

Некорректный размер фрагментированного пакета.

dp__non_aliased_l4 0

Всегда 0.

dp__through_local 0

Количество отправленных пакетов на localhost. На локальном хосте можно добавить IP-адрес и завести его как RS в настройках vLB. Часть пакетов отбалансируется на localhost.

dp__conn_reset 0

Количество соединений, отброшенных Drop entry механизмом.

dp__conn_no_mem 0

Не получилось выделить новое соединение из пула соединений. Пул соединений создается при старте системы.

dp__fragmentation_no_frags 0

Не удалось выполнить IP-фрагментацию, пакет будет отброшен. В текущей реализации фрагментации есть ограничение на количество фрагментов, полученных в ходе данного процесса. Сейчас пакет не может быть разбит больше, чем на 64 фрагмента.

dp__non_aliased 0

Невозможно создать TCP-соединение по данному пакету. Отсутствует флаг SYN, и/или в пакете присутствуют флаги RST и/или FIN.

dp__out_to_big_icmp 0

Отправлена ICMP-ошибка Packet Too Big. Ошибка формируется в случае невозможности провести IP-фрагментацию, потому что в пакете установлен Don’t fragment Flag.

dp__out_to_big_icmp_v6 0

Отправлена ICMPv6-ошибка Packet Too Big. vLB не фрагментирует IPv6-пакеты.

dp__non_balanced_packet_v6 0

Количество IPv6-пакетов, которые не были отбалансированы, потому что в конфигурации балансировщика не найден соответствующий сервис. Пакет отправится в OC Linux через AUX-поток.

dp__non_aliased_v6 0

Невозможно создать TCP-соединение по пришедшему IPv6 пакету. Отсутствует флаг SYN, и/или в пакете присутствуют флаги RST и/или FIN.

dp__through_local_v6 0

Количество отправленных IPv6-пакетов на localhost. На локальном хосте можно добавить IPv6-адрес и завести его как RS в настройках vLB. Часть пакетов отбалансируется на localhost.

dp__not_supported_l4_v6 0

Неподдерживаемый L4 протокол, поддерживаются TCP, UDP, ICMP для IPv6-пакетов.

dp__end_of_packet_v6 0

Неполный пакет. Внутри ICMPv6-ошибки получили обрезанный L4 заголовок. Пакет отправится в OC Linux через AUX-поток.

dp__icmp_in_icmp_v6 0

ICMPv6-ошибка на ICMPv6-пакет. Поддерживается ошибки только для TCP и UDP. Пакет отправится в OC Linux через AUX-поток.

dp__icmp_info_message_v6 0

Получено ICMPv6-сообщение, тип которого не соответствует ICMP-ошибке. Пакет отправится в OC Linux через AUX-поток.

dp__icmp_not_supported_l4_v6 0

Неподдерживаемый L4 протокол в ICMPv6-ошибке. Поддерживаются только TCP и UDP. Для ICMP есть отдельный счетчик.

release__ttl 0

TTL в IP-заголовке оказался равным 0. Пакет будет отброшен.

release__sched_failed 0

Не удалось отбалансировать пакет по следующим причинам:

  1. Нет активного RS в настройках сервиса.

  2. Не получилось добавить запись в таблицу Persistence, потому что не нашлось свободной ячейки в бакете.

Пакет будет отброшен.

release__xmit_failed 0

Всегда 0.

release__no_service 0

Всегда 0.

release__reuse_no_service 0

При попытке переиспользовать соединения в настройках балансировщика не удалось найти соответствующий сервис. Пакет будет отброшен.

release__ip_fragmented 0

Всегда 0.

release__wrong_tcp_flags 0

Всегда 0.

release__malformed_ipv4 0

Некорректный IPv4-пакет. Длина заголовка IPv4, которая определена в пакете, меньше минимального размера. Пакет будет отброшен.

release__icmp_ip_malformed 0

Некорректный ICMP-пакет. Внутри ICMP-ошибки содержится IP-пакет. Длина заголовка IPv4, которая там определена, меньше минимального размера.

release__rate_limit_exceeded 0

Превышен лимит скорости создания соединений. Пакет будет отброшен.

release__reuse_no_service_v6 0

То же, что и release__reuse_no_service, только для IPv6-пакетов.

release__malformed_ip_packet_v6 0

Некорректный IPv6-пакет. Длина payload, которая указана в заголовках L4 и длина, которая указана в заголовках IPv6 не коррелирют между собой. Пакет будет отброшен.

release__malformed_ip_icmp_packet_v6 0

Внутри ICMPv6-ошибки содержится обрезанный IPv6-пакет. Пакет будет отброшен.

sessions__removed 0

Количество соединений, удаленных по истечению timeout.

sessions__created 1

Количество созданных соединений.

sessions__requested 1

Количество запросов на создание соединения.

sessions__reused 0

Количество переиспользованных соединений. Переиспользуются соединения с идентичным набором параметров (IP-адреса, порты клиента/сервера и протокол). Механизм переиспользования срабатывает, когда мы получаем TCP SYN пакет с параметрами уже существующего соединения. Переиспользуется именно запись в таблице соединений, RS в этом случае выбирается заново.

sessions__reused_v6 0

То же самое, что и sessions__reused, но для IPv6-пакетов.

balancer__persist_match 0

Соединение отбалансировано по уже созданной записи в таблице Persistence.

balancer__sch_action 1

Количество вызовов планировщика для поиска RS.

balancer__sch_action_commit 1

Количество изменений во внутренних структурах планировщика. Происходят они после каждого выбранного планировщиком RS. В них хранится служебная информация, которая используется при выборе планировщиком следующего RS.

balancer__persist_no_space 0

Не удалось создать новую запись persistence. Не нашлось свободной ячейки в бакете соответствующей таблицы.

balancer__persist_match_locked 0

RS выбран по уже созданной записи в таблице Persistence.

balancer__no_worker 0

Информация о RS удалена из соединения по следующим причинам:

  1. Соединение в процессе удаления из таблицы.

  2. Соединение в процессе сброса Drop entry механизмом.

  3. Соединение в процессе реинициализации механизмом переиспользования.

Пакет отправится в OC Linux через AUX-поток.

balancer__dead_worker 0

Всегда 0.

balancer__no_sch 0

Планировщик сервиса не инициализирован. Отсутствуют RS в состоянии ENABLE.