...
- установка и настройка keepalived (выполняется по схеме master-slave)
- настройка rsync
- настройка репликации MySQL (осуществляется путём встречной репликации по принципу master-master)
- настройка replicaSet MongoDB (репликация осуществляется объединением 3 узлов в Replica Set)
- настройка работы Eltex-PCRF в режиме кластера
- изменение конфигурации модулей системы для работы с виртуальным IP
В примерах конфигурации в данном разделе для простоты ip-адреса будут указываться как <ip_server1>, <ip_server2> и <virtual_ip>, где:
...
Для корректной работы требуется обеспечить L2 связность между двумя удаленными серверами.
Синхронизация токенов сервиса eltex-doors
Описание
После развертывания серверов SoftWLC, на них необходимо синхронизировать токены сервиса eltex-doors. Токены с сервера Primary копируются на потенциальный Secondary с заменой, затем перезапускаются зависящие от них сервисы и повторно генерируются записи в БД.
Порядок действий
Удалите содержимое папки "/etc/eltex-doors/keys/" на сервере Slave (файлы private.pem и public.pem).
Скопируйте содержимое папки "/etc/eltex-doors/keys/" с сервера Master на сервер Slave (файлы private.pem и public.pem).
Перезапустите на сервере Slave следующие сервисы:
Блок кода | ||
---|---|---|
| ||
sudo service eltex-disconnect-service restart
sudo service eltex-doors restart
sudo service eltex-johnny restart
sudo service eltex-portal restart
sudo service eltex-portal-constructor restart |
На обоих серверах удалите из целевой БД в MySQL записи о токенах сервиса eltex-doors командой:
Блок кода | ||
---|---|---|
| ||
mysql -ujavauser -pjavapassword -e "delete from eltex_doors.auth_token;" |
Перейдите к веб-интерфейсу личного кабинета на каждом сервере, адрес "http://<ip-адрес сервера>:8008/wifi-cab", внутри личного кабинета перейдите во вкладку "Сервисы и тарифы". Редактировать ничего не требуется, при переходе в указанный раздел ЛК - записи об удаленных на шаге "3" токенах сгенерируются в БД повторно.
Установка и настройка keepalived
...
Блок кода | ||||
---|---|---|---|---|
| ||||
admin@swlc01-server:/# echo "rspasswd" > /etc/rsync_client.secrets && chmod 600 /etc/rsync_client.secrets |
Предупреждение |
---|
Начиная с версии rsync 3.2.0 добавлена по умолчанию защита каталога /usr, /boot, /home (защиту home в дальнейшем убрали) Решением является переопределение защищающей опции rsync. |
Способ запуска/остановки
Для запуска сервиса используется команда:
...
Блок кода | ||||
---|---|---|---|---|
| ||||
binlog-do-db = eltex_alert
binlog-do-db = eltex_ems
binlog-do-db = wireless
binlog-do-db = radius
binlog-do-db = eltex_auth_service
binlog-do-db = ELTEX_PORTAL
binlog-do-db = eltex_doors
binlog-do-db = eltex_ngw
binlog-do-db = eltex_bruce
|
yказать базы, для которых не будут вестись логи:
...
Блок кода | ||||
---|---|---|---|---|
| ||||
GRANT ALL PRIVILEGES ON *.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
GRANT ALL PRIVILEGES ON eltex_auth_service.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `radius`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `wireless`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `Syslog`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_doors`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ngw`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `ELTEX_PORTAL`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ems`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_alert`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_auth_service`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_bruce`.* TO 'javauser'@'%';
FLUSH PRIVILEGES;
|
Включение репликации
...
Для установки нужной версии mongodb, выполните следующие действия:
Создайте файл Проверьте наличие репо Eltex в файле /etc/apt/sources.list.d/mongodb-org-4.0.list и пропишите в него репо mongoeltex.list :
Блок кода | ||
---|---|---|
| ||
deb [ arch=amd64 ] http://mirrorarchive.yandexeltex-co.ru/mirrors/repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse |
...
wireless softwlc-1.27-xenial main # это общий репозиторий, в котором выложены пакеты не зависящие от версии ОС.
deb [arch=amd64] http://archive.eltex-co.ru/wireless radius-1.27-jammy main # данный репозиторий нужно выбирать в зависимости от версии ОС. |
Выполните на сервере команды
Блок кода | ||
---|---|---|
| ||
sudowget apt-keyO adv --keyserver hkphttp://keyserverarchive.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 |
...
eltex-co.ru/wireless/repo.gpg.key | apt-key add -
sudo apt-get update |
Скачайте и установить libssl1.1:
Блок кода | ||
---|---|---|
| ||
sudo apt-get update
sudo apt install mongodb-org |
...
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb |
Скачайте mongo на сервер
Блок кода | ||
---|---|---|
| ||
mongosudo --versionapt илиinstall dpkg -l | grep mongomongodb-org |
Выполните следующие команды:
...
Примечание |
---|
После внесения изменений в конфигурационные файлы необходимо перезапустить соответствующий сервис: root@swlc01-server:/# service eltex-<service_name> restart |
Примечание |
---|
В случае использования однохостовой системы на каждом из серверов SoftWLC, в конфигурационных файлах сервисов, обращающихся к БД MySQL заменять |
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
# maximum number of outgoing messages in queue for each session sessionMessageQueueSize = 100 # cache config file path cacheConfigFile = /etc/eltex-apb/ehcache.xml # path to the file with permitted hosts hostsFile = /etc/eltex-apb/hosts.json pingJob { # ping job interval interval = 60s # timeout waiting for subscribe-request after connecting the access point to the server subscribeIdleTimeout = 60s # timeout during that the session will stay opened without receiving any message messageIdleTimeout = 90s # interval of ping to be sent to the websocket session pingIdleTimeout = 30s } # eltex-mercury connection properties mercury { host = localhost port = 6565 poolSize = 50 } nbi.client.login=admin nbi.client.password=password |
...
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
# Ports on which the server will listen
auth_port=1812
#acct_port=1813
inner_tunnel_port=18121
# MySQL database
db_host="localhost"
db_port=3306
db_login="radius"
db_password="radpass"
db_name="radius"
# MySQL 'wireless' database
wireless_db_host="localhost"
wireless_db_port=3306
wireless_db_login="javauser"
wireless_db_password="javapassword"
wireless_db_name="wireless"
# PCRF
# If you setting pcrf_enabled=0, then you also should enable accounting port listening in "default" server
pcrf_host="127.0.0.1"
pcrf_port=7080
pcrf_enabled=1
# EAP
ca_cert_name="local.pem"
tls_key_password="1234"
# Proxying
proxy_auth=0
proxy_domain_regex="^(.+\.)?enterprise\.root$"
proxy_host="127.0.0.1"
proxy_port=18121
proxy_secret="eltex"
# Ubiquity vendor detection
ubi_vendor_regex="Apple|Ubiquiti"
vendor_group_enabled=1
# Settings of runtime NAS discovery
dynamic_clients=false
dynamic_client_subnet=192.168.0.0/16
dynamic_client_lifetime=3600
dynamic_client_rate_limit=false
# Proxy SSID (for example to eltex-eap-tls) #139679
proxy_ssid_enabled=0
proxy_ssid_value="EAP_TLS"
proxy_ssid_host="127.0.0.1"
proxy_ssid_port=18122
proxy_ssid_secret="eltex"
# Status-Server settings
status_host="1127.0.0.1"
status_port=18123
status_client_host="127.0.0.1"
status_client_secret="eltex"
|
- Изменить
localhost
на<virtualip>
- Изменить
127.0.0.1
на<virtualip>
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="mongoaddress">mongodb://localhost:27017/wifi-customer-cab?replicaSet=<YourClusterName></entry> <entry key="nbiaddress">http://localhost:8080/axis2/services/RadiusNbiService?wsdl</entry> <entry key="nbi.serviceLogin.user">softwlc_service</entry> <entry key="nbi.serviceLogin.password">password</entry> <entry key="nbi.serviceLogin.requestTimeout.sec">120</entry> <!--Bonnie or NBI--> <entry key="data.service.type">NBI</entry> <entry key="bonnie.service.host">localhost</entry> <entry key="bonnie.service.port">9070</entry> <!--Bruce--> <entry key="bruce.service.host">localhost</entry> <entry key="bruce.service.port">8008</entry> <!-- Support link --> <entry key="support.page.enabled">false</entry> <entry key="support.page.url">http://eltex-co.ru</entry> <!-- DPI link --> <entry key="dpi.page.enabled">false</entry> <entry key="dpi.page.url">https://filter.wifi.example.org/</entry> <!-- SSO Settings --> <entry key="sso.enabled">false</entry> <entry key="sso.redirectUri">http://localhost:8080/wifi-cab/sso</entry> <entry key="sso.clientSecret"></entry> <entry key="sso.clientId"></entry> <!-- SSO Auth --> <entry key="sso.auth.server.protocol">http</entry> <entry key="sso.auth.server.address"></entry> <entry key="sso.auth.server.port">80</entry> <entry key="sso.auth.auth.path">/auth/realms/b2b/protocol/openid-connect/auth</entry> <entry key="sso.auth.logout.path">/auth/realms/b2b/protocol/openid-connect/logout</entry> <!-- SSO REST --> <entry key="sso.rest.server.protocol">http</entry> <entry key="sso.rest.server.address"></entry> <entry key="sso.rest.server.port">80</entry> <entry key="sso.rest.server.timeout.sec">10</entry> <entry key="sso.rest.protocol.version">2.0</entry> <entry key="sso.rest.username"></entry> <entry key="sso.rest.password"></entry> <entry key="sso.rest.getToken.path">/apiman-gateway/b2b_test/getToken</entry> <entry key="sso.rest.getUserInfo.path">/apiman-gateway/b2b_test/getUserInfo</entry> <entry key="sso.rest.addUser.path">/apiman-gateway/b2b_test/addUser</entry> <entry key="sso.rest.updateUser.path">/apiman-gateway/b2b_test/updateUser</entry> <entry key="sso.rest.delUser.path">/apiman-gateway/b2b_test/delUser</entry> <entry key="sso.rest.addUserParam.path">/apiman-gateway/b2b_test/addUserParam</entry> <entry key="sso.rest.delUserParam.path">/apiman-gateway/b2b_test/delUserParam</entry> <entry key="sso.rest.getUserByName.path">/apiman-gateway/b2b_test/getUserByName</entry> <entry key="sso.rest.resetPassword.path">/apiman-gateway/b2b_test/resetPassword</entry> <entry key="sso.rest.getUserByParam.path">/apiman-gateway/b2b_test/getUserByParam</entry> <entry key="sso.rest.getUserByEmail.path">/apiman-gateway/b2b_test/getUserByEmail</entry </properties> |
...