Установка агента описана в отдельной статье: Установка агента HARD. |
|
Отправку всех актуальных профилей и привязок оборудования из основной БД в очереди для агента HARD можно выполнить одним из способов, описанных в разделе Запрос текущего состояния.
При запуске собирает конфигурацию из всех файлов *.yml
, которые размещены в конфигурационной директории /etc/hydra/hard/
(/etc/hydra-testing/hard-testing/
для тестового экземпляра) и всех её поддиректориях. Как правило, используется следующая структура конфигурационных файлов:
hard.yml
— общие настройки агента;batch.yml
— настройки работы агента в режиме загрузки аккаунтинга;plugins
:base.yml
— фильтры и конфигурация для плагина base
;proxy.yml
— конфигурация для плагина proxy
.Значения по умолчанию всех параметров хранятся в директории установки агента. Для основного экземпляра это /opt/hydra/hard/conf/
, а для тестового — /opt/hydra/hard-testing/conf/
. Итоговая конфигурация формируется при запуске агента как результат наложения пользовательской (из конфигурационной директории) конфигурации на дистрибутивную (значения по умолчанию), причём для совпадающих ключей пользовательские значения имеют больший приоритет.
В пользовательской части конфигурации рекомендуется указывать только те параметры, которые отличаются от составленной разработчиками агента конфигурации по умолчанию. |
Итоговую конфигурацию агент записывает в лог непосредственно во время запуска:
... 10.02.2017 12:00:59. 90 136807/Master MainThread INFO All workers have been stopped 10.02.2017 12:00:59. 90 136807/Master MainThread INFO Stopped 11.02.2017 13:13:01.171 23117/MainThread INFO ================================================== 11.02.2017 13:13:01.177 23117/MainThread INFO HARD (4.2.9.1). Configuration loaded: "sessions_loader": "bulk_size_limit": 50000, "plugins": "default": "sessions": "cache_cleaner": "expire_period": "accounting": 1440, "user_equip": 1440, "netservs": 1440 "batch": "pid_path": "/var/run/hydra/hard/batch.pid", "mongo_pool": "main" "enabled_plugins": [ "base/radius-ipoe", "proxy/dhcp", "base/dhcp-ont-mng", "base/dhcp-voip", "base/dhcp-iptv", "base/dhcp-internet", "base/dhcp-unknown" ], "log": "common": ... "plugins": ... "proxy": "main": "dhcp": "routes": "base/dhcp-ont-mng": "$request.RAD_REQUEST.try(\"DHCP-Relay-Circuit-Id\", \"0x00\").unhex().like?(\"^xpon 1010 GPON-H .+$\")", "base/dhcp-iptv": "$request.RAD_REQUEST.try(\"DHCP-Relay-Circuit-Id\", \"0x00\").unhex().like?(\"^xpon 1022 GPON-H .+$\")", "base/dhcp-voip": "$request.RAD_REQUEST.try(\"DHCP-Relay-Circuit-Id\", \"0x00\").unhex().like?(\"^xpon 1011 GPON-H .+$\")", "base/dhcp-internet": "$request.RAD_REQUEST.try(\"DHCP-Relay-Circuit-Id\", \"0x00\").unhex().like?(\"^xpon 11[0-9]2 GPON-H .+$\")" "default": "base/dhcp-unknown", "call_stack": [] 11.02.2017 13:13:59.185 23123/Master MainThread INFO Running 11.02.2017 13:13:59.186 23123/Master MainThread DEBUG Handling signals 11.02.2017 13:13:59.188 23123/Master MainThread DEBUG Adding Worker#1, lifetime: 0.001 seconds to process pool ... |
Основные параметры агента HARD обычно размещаются в файле /etc/hydra/hard/hard.yml
(/etc/hydra-testing/hard-testing/hard.yml
для тестового экземпляра).
Ключ enabled_plugins
.
В данном ключе в виде списка перечисляются все экземпляры плагинов, которые должны использоваться агентом. Каждый экземпляр указывается в формате <plugin_name>/<plugin_instance_name>
, где <plugin_name>
— наименование плагина, а <plugin_instance_name>
— наименование конкретного его экземпляра.
enabled_plugins: - 'proxy/dhcp' - 'base/dhcp-o82' - 'base/dhcp-ip-private' - 'base/dhcp-ip-public' |
В целом, в конфигурации могут быть описаны и другие экземпляры плагинов. Работать будут только те, которые указаны в данном списке.
Секции log
→ common
(общий лог агента) и log
→ batch
(лог загрузчика аккаунтинга).
Ключ | Описание |
---|---|
level | Уровень логирования:
|
path | Полный путь к лог-файлу |
rotate → size | Максимальный допустимый размер лог-файла в килобайтах. По достижении файлом указанного размера агент выполняет ротацию лога. |
rotate → count | Количество хранимых лог-файлов. |
... log: common: level: 'debug' path: '/var/log/hydra/hard/hard.log' rotate: size: 20480 count: 250 batch: level: 'info' path: '/var/log/hydra/hard/batch.log' rotate: size: 10240 count: 50 ... |
Ключ pid_path
.
В данном ключе указывается полный путь к файлу, в который агент при запуске запишет PID главного процесса.
pid_path: '/var/run/hydra-testing/hard-testing/hard.pid' |
Секция filters
.
Данные фильтры используются серверными процессами агента. Наиболее важным из таких фильтров и единственным, требующим настройки является фильтр agent.basic_auth
, определяющий данные для базовой HTTP-аутентификации клиента. В роли клиента, как правило, выступает модуль модуль rlm_perl
FreeRADIUS — в нём для работы с агентом должны быть указаны логин и пароль из конфигурации этого агента.
Ключ | Описание |
---|---|
| Логин базовой аутентификации |
filters → agent.basic_auth → main → password | Пароль базовой аутентификации |
... filters: agent.basic_auth: main: login: 'FreeRADIUS' password: 'q0IkVhQf10ZKUgKYAyoE' ... |
Секция server
.
Для взаимодействия с FreeRADIUS используется клиент-серверная архитектура: агент является сервером, а модуль rlm_perl
FreeRADIUS — клиентом. В данной секции задаются параметры, определяющие работу серверной части агента.
Ключ | Описание |
---|---|
address | IP-адрес сетевого интерфейса, на котором главный процесс агента должен принимать запросы |
port | Номер TCP-порта, на котором главный процесс агента должен принимать запросы |
workers | Количество дочерних Worker-процессов агента, которые осуществляют непосредственную обработку полученных от FreeRADIUS запросов. |
abort_attempts | Количество попыток отправки дочернему процессу сигнала SIGTERM до того как завершение процесса будет выполнено принудительно посредством отправки SIGKILL . |
abort_delay | Задержка в секундах между попытками отправки сигнала SIGTERM дочерним процессам. |
call_stack | Список, определяющий порядок вызова системных фильтров. Как правило, не требует измений и состоит из фильтра базовой аутентификации agent.basic_auth/main , профилировщика agent.profiler/main и обработчика ошибок agent.exception_handler/main . |
server: address: '127.0.0.1' port: 11080 workers: 3 |
Секция connection_pools
→ mongo
→ <spec_name>
.
В данной секции может быть описано несколько спецификаций с различными наименованиями <spec_name>
для подключения агента к БД кэша. Например, одна из них может содержать параметры подключения к кластеру MongoDB Replica Set для обработки RADIUS-запросов, а другая — только к одному локальному экземпляру MongoDB для загрузки аккаунтинга в основную БД и обновления профилей и привязок оборудования в кэше.
Для работы агента HARD версии 4 рекомендуется использовать MongoDB версии 3. Установка может быть выполнена с использованием deb-пакета |
Ключ | Описание |
---|---|
host | IP-адрес или DNS-имя сервера, для подключения к отдельному экземпляру mongod . |
port | Номер TCP-порта, для подключения к отдельному экземпляру mongod . |
name | Наименование базы данных. |
user | Имя пользователя базы данных. У пользователя должны быть полные права на управления объектами БД. |
password | Пароль пользователя базы данных. |
replica_set → name | Наименование кластера (MongoDB Replica Set) |
replica_set → uris | Список адресов всех участников кластера (MongoDB Replica Set) в формате <host>:<port> , где <host> — IP-адрес или DNS-имя, а <port> — номер TCP-порта. |
indexes | Настройки управления индексами базы данных. Агент при подключении к БД автоматически проверяет наличие всех необходимых для его эффективной работы коллекций и индексов: добавляет недостающие и удаляет лишние. |
Настройка агента для работы в кластерном режиме описана в отдельной статье: Кластерный режим работы. |
systemLog: destination: 'file' path: '/var/log/hydra/mongodb3/mongod3.log' logAppend: true logRotate: 'reopen' processManagement: fork: false net: bindIp: '127.0.0.1' port: 27027 http: enabled: false security: authorization: 'enabled' storage: dbPath: '/var/lib/hydra/mongodb3' directoryPerDB: true journal: enabled: true engine: 'wiredTiger' wiredTiger: engineConfig: cacheSizeGB: 1 |
user@server:~$ mongo3 admin # К «чистой» СУБД подключаемся без аутентификации (используется MongoDB Localhost Exception) MongoDB shell version: 3.0.4 connecting to: 127.0.0.1:27027/admin > // Находясь в БД admin, создаём учётную запись администратора > db.createUser( { user: 'admin', pwd: 'r08gS19tZfrs51ntZEC4', roles: [ { role: 'root', db: 'admin' } ] } ); Successfully added user: { "user" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] } > // Авторизуемся под учётной записью администратора > db.auth('admin', 'r08gS19tZfrs51ntZEC4'); 1 > // Переключаемся на БД hard_cache, которая будет указана в ключе connection_pools → mongo → <spec_name> → name конфигурации агента > use hard_cache; switched to db hard_cache > // Создаём в этой БД учётную запись пользователя hard, под которым будет работать агент > db.createUser( { user: 'hard', // Имя пользователя - ключ connection_pools → mongo → <spec_name> → user конфигурации агента pwd: '56kiEh1N61GC3ga17SgD', // Пароль пользователя - ключ connection_pools → mongo → <spec_name> → password конфигурации агента roles: [ { role: 'readWrite', db: 'hard_cache' } ] } ); Successfully added user: { "user" : "hard", "roles" : [ { "role" : "readWrite", "db" : "hard_cache" } ] } |
connection_pools: mongo: # Основная спецификация для обработки RADIUS-запросов main: name: 'hard_cache' user: 'hard' password: '56kiEh1N61GC3ga17SgD' replica_set: name: 'hard_rs' uris: - '192.168.125.11:27027' - '192.168.125.12:27027' - '192.168.125.13:27027' # Локальный экземпляр для загрузки аккаунтинга и обновления кэша local_instance: name: 'hard_cache' user: 'hard' password: '56kiEh1N61GC3ga17SgD' host: 'localhost' port: 27027 |
Секция connection_pools
→ database
→ main
.
В данной секции определяются параметры подключения агента к основной базе данных — провижинингу Гидры.
Ключ | Описание | ||||||
---|---|---|---|---|---|---|---|
name | Наименование (net service name) базы данных. Параметры подключения к ней описываются в файле tnsnames.ora . | ||||||
user | Имя пользователя базы данных (обычно AIS_RADIUS ). | ||||||
password | Пароль пользователя базы данных. | ||||||
hydra → user | Логин пользователя Гидры для доступа к приложению RADIUS-сервер. Такой пользователь, помимо доступа к приложению, должен обладать служебным правом:
| ||||||
hydra → password | Пароль пользователя Гидры для доступа к приложению RADIUS-сервер. |
connection_pools: database: main: name: 'hydra' user: 'AIS_RADIUS' password: 'T7412Ph5Flzj1ApXY2SG' hydra: user: 'hard' password: 'aQ4kW3GP1O4LDG5WFUCI' |
Секция syncer
.
Ключ | Описание |
---|---|
mongo_pool | Наименование спецификации подключения к БД кэша. |
stomp → host | IP-адрес или DNS-имя сервера, для подключения к брокеру ActiveMQ по протоколу STOMP. |
stomp → port | Номер TCP-порта, для подключения к ActiveMQ. |
stomp → login | Логин для подключения к ActiveMQ. |
stomp → password | Пароль для подключения к ActiveMQ. |
queues → profiles | Наименование ActiveMQ-очереди с сообщениями об изменении профилей оборудования. |
queues → binds | Наименование ActiveMQ-очереди с сообщениями об изменении привязок абонентского оборудования к операторскому. |
syncer: stomp: host: '192.168.123.15' port: 61613 login: 'hydra' password: 'cq48L96pV41C5l4WtiW9' queues: profiles: 'hydra_profiles' binds: 'hydra_equipment_binds' |
Секция hooks
.
Архитектурой агента предусмотрено выполнение каких-либо дополнительных действий (хуков) при обработке запросов.
Настройка хуков описана в отдельной статье: Хуки. |
Параметры работы агента в таком режиме рекомендуется указывать в отдельном файле: обычно это файл /etc/hydra/hard/batch.yml
для основного экземпляра агента и /etc/hydra-testing/hard-testing/batch.yml
— для тестового.
Ключ | Описание |
---|---|
batch → mongo_pool | Наименование спецификации подключения к БД кэша. |
batch → pid_path | Полный путь к файлу, в который агент запишет PID процесса загрузки аккаунтинга. |
sessions_loader → bulk_size_limit | Загрузка данных выполняется порционно. Данный параметр ограничивает количество сессий в одной порции. |
Работа загрузчика аккаунтинга описана в подразделе Плагины → Плагин base → Загрузка сведений о сессиях в БД Гидры. |