billing:radius_settings

Настройка радиус


Настройка радиуса будет касаться данных строк:

 max_request_time = 9
 cleanup_delay = 10
 max_requests = 2097152
 
 ...
 
 thread pool {
   start_servers = 1
   max_servers = 128
   min_spare_servers = 8
   max_spare_servers = 32
   max_requests_per_server = 0
   max_queue_size = 1048576
   auto_limit_acct = no
}


Рассмотрим эти параметры:
max_request_time
Максимально время за которое ядро биллинга должно обработать запрос и вернуть результат

cleanup_delay
После получения результата, радиус будет хранить этот "результат" у себя в памяти на случай если результат не дойдет до BRAS сервера и BRAS заново отправит запрос.

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

start_servers
Минимальное кол-во возможных потоков для обработки запросов авторизации

max_servers
Максимальное кол-во потоков для обработки запросов авторизации

min_spare_servers
Минимальное кол-во потоков которое может находится в состоянии "ожидания"

max_spare_servers
Максимальное кол-во потоков которое может находится в состоянии "ожидания"

max_requests_per_server
Максимальное кол-во запросов которое может обработать один поток, после чего он будет перезапущен ( 0 - без ограничения )

max_queue_size
Размер очереди для запросов авторизации (1048576 это максимальное значение, при таком значении радиус потербляет на ~1Gb больше памяти)

auto_limit_acct
Ограничение accounting запросов



Теперь посмотрим на изображение ниже


У радиуса есть “очередь” куда он помещает все запросы. Размер этой очереди определяет параметр max_queue_size.
Если очередь будет переполнена, то любые новые запросы будут отклонены в silent режиме (то есть без каких либо уведомлений в логи).

Как и написано в документации радиуса, переполнение очереди возможно при медленной обработке запросов и при резком скачке запросов авторизации.
Обработкой запросов в очереди занимаются “рабочие потоки”, задача которых:

  • взять запрос из очереди
  • отправить его на ядро биллинга (через модуль perl)
  • дождаться ответа.


После чего цикл повторяется. Соответственно чем больше потоков тем лучше.

Как подобрать параметры


Для начала посмотрим на это изображение, на нем показано как работают параметры start_servers, max_servers, min_spare_servers, max_spare_servers


При минимальной нагрузке будет создано 8 потоков (min_spare_servers), по мере нагрузки они могут увеличиться максимум до 32 потоков (max_servers).
Если нагрузка начнет уменьшаться то количество потоков будет уменьшено до 24 (max_spare_servers).
Если нагрузка не достигла 24 потоков (max_spare_servers), то уменьшать кол-во потоков радиус не будет.

Теперь разберем как же определить какие цифры выставлять. Исходя из формулы:

кол-во потоков = pps / 20


1 поток способен обработать до 20-25 запросов в секунду (тесты ниже).
ядро билинга автоматически создает дочерний процесс под каждый поток радиуса, по этому на каждом радиус сервере нужно высчитывать его pps (packets/s) запросов.

  • Средний (для параметра max_spare_servers) pps можно определить с помощью tcpdump и capinfos:
  • Пиковым (для параметра max_servers) pps будет: кол-во абонентов за BRAS / max_request_time


capinfos доступен из пакета wireshark по этому для установки выполним
Для Centos

dnf install tcpdump wireshark


Для Debian

apt-get install tcpdump wireshark

Определение pps


После установки нужно запустить ``tcpdump`` на принимающем radius запросы интерфейсе с записью в файл

tcpdump -i eth1 dst port 1812 or 1813 -w /tmp/radius_pps.pcap


Для записи будет достаточно 5-10 минут (что бы успел пройти accounting интервал)
После чего можно посмотреть информацию о записи, выполнив:

capinfos /tmp/radius_pps.pcap


В результате будет показана информация:

      File name:           /tmp/radius_pps.pcap
      File type:           Wireshark/tcpdump/... - pcap
      File encapsulation:  Ethernet
      File timestamp precision:  microseconds (6)
      Packet size limit:   file hdr: 262144 bytes
      Number of packets:   985
      File size:           118 kB
      Data size:           102 kB
      Capture duration:    8.437724 seconds
      First packet time:   2021-06-18 18:07:35.578060
      Last packet time:    2021-06-18 18:07:44.015784
      Data byte rate:      12 kBps
      Data bit rate:       97 kbps
      Average packet size: 103.89 bytes
      Average packet rate: 116 packets/s
      SHA256:              ef76dc37e0b4bb74f07ee66305fb9c170a064514ad84342ad134271264af319c
      RIPEMD160:           a1b65b2b63c883ea1a0d862a665044ee8b1666c9
      SHA1:                3782a747440f95a55580b41b40b6f8d78ec5be86
      Strict time order:   True
      Number of interfaces in file: 1
      Interface #0 info:
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 262144
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Number of stat entries = 0
                     Number of packets = 985

Где видно средний pps: Average packet rate: 116 packets/s

  • billing/radius_settings.txt
  • Последнее изменение: 14 мес. назад
  • Александр Дудяк