Резервирование RADIUS-сервера

Каждый RADIUS-сервер описывается FSM (конечным автоматом).

RADIUS-сервер может быть в одном из шести состояний:

Initial — состояние при старте fastPCRF;

Alive — RADIUS-сервер доступен, можно посылать на него запросы;

Dead — RADIUS-сервер недоступен, запросы не посылать;

Alive-ping-sent — послали ping на RADIUS-сервер в состоянии Alive, ждем ответа;

Dead-ping-sent — послали ping на RADIUS-сервер в состоянии Dead, ждем ответа;

Disabled — административно запрещенный сервер.

Основные состояния — Alive и Dead, остальные состояния переходные. RADIUS-сервер считается доступным, если он находится в состояниях Alive или Alive-ping-sent. В остальных состояниях RADIUS-сервер считается недоступным и отправка запросов на него невозможна.

Ping — это запрос Status-Server или, если RADIUS-сервер не поддерживает Status-Server (опция radius_status_server), Access-Request с User-Name и Password равным опциям radius_ping_user_name и radius_ping_user_password соответственно.

Раз в 10 секунд запускается задача watchdog, которая проверяет, надо ли посылать пинг, получен ли ответ на пинг, и в соответствии с этим переводит сервер в то или иное состояние или оставляет состояние неизменным.

При старте fastPCRF все RADIUS-сервера находятся в состоянии Initial. FastPCRF посылает к ним ping и переходит в состояние Dead-ping-sent ожидания ответа на пинг.

В состоянии Alive сервер пингуется только если от него не поступало никаких ответов в течение последних radius_keepalive секунд. То есть если сервер отвечает на запросы и происходит непрерывный обмен запрос-ответ, — пинги к нему не шлются. При отправке пинга сервер переходит в состояние Alive-ping-sent (ожидание ответа на пинг).

В состоянии Dead сервер пингуется раз в radius_dead_timeout секунд: посылается пинг и сервер переходит в состояние Dead-ping-sent. То есть если radius_dead_timeout=3600 (1 час), то RADIUS-сервер может перейти в состояние Alive не раньше чем через час после перехода в состояние Dead.

В состояниях DeadDisabled или Alive watchdog оповещает fastPCRF, что такой-то сервер стал недоступен или доступен соответственно.
Важно! Резервирование RADIUS-серверов реализовано по схеме Master-Slaves: только один RADIUS-сервер считается рабочим (master), остальные — резервные (в каком бы состоянии они не находились). RADIUS-сервера задаются списком (каждый RADIUS-сервер — в отдельной опции radius_server), самым предпочтительным считается сервер, заданный в первой (по порядку в fastpcrf.conf) опции radius_server, затем менее предпочтительный, затем еще менее и т.д. Если сервер с номером N > 1 является master’ом, — это значит, что все сервера перед ним (1..N-1) недоступны (Dead). Если какой-либо серверов 1..N-1 становится живым (Alive) — он немедленно становится master’ом и все запросы идут на него. Ответы от прежнего master’а принимаются.

Если становится недоступным текущий master, — ищется самый первый сервер в состоянии Alive и он становится master’ом.

RADIUS-серверам авторизации не шлется никаких сообщений, когда они получают или теряют статус мастера. А accounting серверам — шлется: если accounting-сервер теряет статус мастера, ему посылается Accounting-Off; если accounting-сервер обретает статус мастера, ему посылается Accounting-On. В Accounting-On/Off посылаются следующие атрибуты:

NAS-атрибуты: NAS-IP-Address, NAS-IPv6-Address, NAS-Identifier. Посылается либо только один из этих атрибутов (приоритет именно такой, как эти атрибуты здесь перечислены — самый приоритетный NAS-IP-Address), либо, если опция radius_add_all_nas_ids=1, все известные;

Acct-Status-Type = Accounting-On или Accounting-Off;

Acct-Session-Id = 0 — это значение acct-session-id не может встретиться ни у какой acct-сессии.