Это старая версия документа!
Настройка радиус
Настройка радиуса будет касаться данных строк:
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