![]()
Для работы решения понадобятся пять виртуальных машин: 2 хоста SoftWLC развернутых автоматическим скриптом установщиком и 3 хоста для баз данных. На хостах должно быть минимум по 2 сетевых инетрфейса работающих в двух независимых. Первая сеть - сеть управления, включающая VRRP-адрес для синхронизации нод SoftWLC (в примере 10.10.0.0/24), вторая сеть - сеть взаимодействия с БД (В примере 100.111.20.0/24).
Сетевые адреса в примерах данной инструкции и в реальной эксплуатации будут отличаться. При работе с файлами конфигураций - используйте адреса в рамках вашей сетевой адресации.
Необходимо подготовить 2 хоста независимых хоста SoftWLC, развернутых скриптом установщиком.
Инструкция по развертыванию SoftWLC
Каждый контроллер содержит набор уникальных ключей сервиса eltex-doors, генерируемы х при первой установке контроллера, на них завязана работа некоторых сервисов, так как наши контроллеры не будут использоваться одновременно, а будут друг друга взаимозаменять - необходимо чтобы ключи сервиса eltex-doors на них совпадали. Для этого необходимо сдлеать следующие действия по порядку:
1) Условно обозначить развернутые контроллеры как Master и Slave
2) Удалить ключи на сервере Slave, а затем заменить их ключами скопированнными с сервера Master.
3) Присвоить файлам ключей необходимые привилегии и владельцев.
4) Перезапустить зависимые от ключей сервисы.
5) Удалить записи о ключах из БД контроллера Slave и перезапустить зависимые от ключей сервисы.
6) Открыть личный кабинет на обоих серверах и перейти во вкладку "Сервисы и тарифы" (в момент перехода - в БД создадутся новые записи о ключах).
1) Удалите содержимое папки "/etc/eltex-doors/keys/" на сервере Slave (файлы private.pem и public.pem).
2) Скопируйте содержимое папки "/etc/eltex-doors/keys/" с сервера Master на сервер Slave (файлы private.pem и public.pem), например при помощи scp.
3) Выполните следующие команды для установки корректных владельцев файлов и назначения корректных прав:
sudo chown root /etc/eltex-doors/keys/private.pem sudo chown eltex /etc/eltex-doors/keys/public.pem |
4) Перезапустите на сервере 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 |
5) На обоих серверах удалите из целевой БД в MySQL записи о токенах сервиса eltex-doors командой:
mysql -ujavauser -pjavapassword -e "delete from eltex_doors.auth_token;" |
Перейдите к веб-интерфейсу личного кабинета на каждом сервере, адрес "http://<ip-адрес сервера>:8080/wifi-cab", внутри личного кабинета перейдите во вкладку "Сервисы и тарифы". Редактировать ничего не требуется, при переходе в указанный раздел ЛК - записи об удаленных на шаге "3" токенах сгенерируются в БД повторно.
Пакет keepalived - это open source программное обеспечение, предназначенное для обеспечения функций высокой надежности (high availabilitty) и балансировки нагрузки (load-balancing). За первую функцию отвечает реализация протокола VRRP, а вторая основывается на модуле ядра Linux Vitrual Server (IPVS). Keepalived не разрабатывается сотрудниками Eltex и не включает доработок, за исключением конфигурации. Keepalived используется для организации резервирования контроллеров SoftWLC, при этом используется только функционал VRRP.
Для установки пакета, необходимо загрузить его на сервер и выполнить следующую команду (установка должна производиться от имени суперпользователя root на обоих серверах):
sudo apt update sudo apt install keepalived |
После установки необходимо добавить демона Keepalived в автозагрузку и запустить его:
sudo systemctl enable keepalived sudo systemctl start keepalived |
Основной файл конфигурации:
На обоих серверах в файле /etc/keepalived/keepalived.conf меняем следующие параметры:
<interface> - наименование сетевого интерфейса (свой для каждого сервера) аналогично записи (eth1);
<virtual_ip> - виртуальный ip-адрес (с указанием префикса) аналогично записи (100.111.195.202 /24);
<ip_адрес другого сервера> - ip-адрес другого сервера аналогично записи (100.111.195.200);
! Configuration File for keepalived
global_defs {
script_user root
enable_script_security
}
vrrp_script check_network {
script "/etc/keepalived/check_ping.sh"
interval 5
weight 50
fall 3
rise 3
init_fail
user root
}
vrrp_instance VI_SWLC {
state BACKUP
interface <interface>
virtual_router_id 1
track_script {
check_network
}
track_interface {
<interface> weight 50
}
priority 150
advert_int 1
nopreempt
# Uncomment and comment "nopreempt" if preemption needed
#preempt_delay 180
authentication {
auth_type PASS
auth_pass eltex
}
virtual_ipaddress {
<virtual_ip> dev <interface> label <interface>:1
}
notify_master "/etc/keepalived/keep_notify.sh master"
notify_backup "/etc/keepalived/keep_notify.sh backup"
notify_fault "/etc/keepalived/keep_notify.sh fault"
unicast_peer {
<ip_адрес_другого_сервера>
}
} |
Скрипт пингует шлюз по умолчанию и возвращает код результата. Таким образом, при успешном выполнении скрипта, гарантируется, что SoftWLC достижим для внешних клиентов.
В текущей реализации на обоих серверах, в качестве тестового скрипта, предлагается использовать следующий:
#!/bin/bash
# host to ping
# there - default gw
HOST=<default_gw_ip>
# -q quiet
# -c nb of pings to perform
ping -q -c5 $HOST > /dev/null
# $? var keeping result of execution
# previous command
if [ $? -eq 0 ]
then
echo `date +"%T %F"` "OK gw reachable"
EXIT_CODE=0
else
echo `date +"%T %F"` "ERROR gw unreacheble!"
EXIT_CODE=1
fi
exit $EXIT_CODE |
где <default_gw_ip> - шлюз по умолчанию для этого сервера аналогично записи (100.10.194.1);.
При смене состояния сервера, выполняется скрипт keep_notify.sh, где <mysql_user> и <mysql_password> - логин и пароль от БД MySQL (по умолчанию root/root).
#!/bin/bash
MYSQL_USER="<mysql_user>"
MYSQL_PASSWORD="<mysql_password>"
if ! lockfile-create --use-pid -r 5 /tmp/keep.mode.lock; then
echo "Unable to lock"
echo "Unable to lock" > /tmp/keep.mode.lock.fail
exit 0
fi
case "$1" in
master)
# ems_reload_all
echo "MASTER" > /tmp/keep.mode
service eltex-ems restart
service eltex-ngw restart
# рестарт слейва MySQL чтобы при восстановлении связи - сразу получить изменения,
# а не ждать периодического heartbeat от второго сервера
# mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "stop slave"
# mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "start slave"
;;
backup)
echo "BACKUP" > /tmp/keep.mode
service eltex-ems stop
service eltex-ngw stop
# mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "stop slave"
# mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "start slave"
;;
fault)
echo "FAULT" > /tmp/keep.mode
;;
*)
echo "Usage: $0 {master|backup|fault}"
exit 1
esac
lockfile-remove /tmp/keep.mode.lock;
exit 0 |
Для того, чтобы скрипты работали корректно, необходимо назначить права на их исполнение:
sudo chmod +x /etc/keepalived/check_ping.sh sudo chmod +x /etc/keepalived/keep_notify.sh |
По умолчанию keepalived записывает лог в файл /var/log/syslog . Для удобства отладки, мониторинга и контроля работы keepalived, можно настроить ведение собственного, отдельного лог-файла.
Ниже приведен пример настройки rsyslog:
sudo nano -w /etc/rsyslog.d/10-keepalived.conf |
Добавьте в файл 10-keepalived.conf следующее:
if $programname contains 'Keepalived' then /var/log/keepalived.log if $programname contains 'Keepalived' then ~ |
Затем, нужно перезапустить rsyslog командой:
sudo service rsyslog restart |
Теперь сообщения от демона keepalived попадут только в лог-файл /var/log/keepalived.log и не попадут в /var/log/syslog .
Rsync в схеме резервирования отвечает за синхронизацию служебных файлов, сервисов Eltex-EMS и Eltex-APB, а также файлов прошивок, шаблонов конфигурации, выгрузок конфигураций точек. Rsync представляет собой клиент серверное ПО. В данной схеме master-сервер выступает в роли клиента и синхронизирует каталоги slave-сервера с локальными.
Для активации сервера rsync, необходимо на каждом сервере в файле /etc/default/rsync установить значение:
RSYNC_ENABLE=true
Создать файл ,. Листинг файла приведен ниже.
hosts allow = <ip_другого_сервера> <virtual ip>
| Запись hosts allow = <ip_другого_сервера> <virtual ip> в конфигурации встречается в 3 местах, не забудьте исправить все значения! |
[ems-conf] path = /usr/lib/eltex-ems/conf/ use chroot = no max connections = 2 lock file = /var/lock/rsyncd read only = no list = no uid = root auth users = backup secrets file = /etc/rsyncd.secrets strict modes = yes # IP-адрес сервера, который будет иметь доступ к ресурсу, т.е. адрес второго сервера в паре hosts allow = <ip_адрес_другого_сервера> <virtual_ip> ignore errors = no ignore nonreadable = yes transfer logging = no timeout = 60 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz [ems-tftp] path = /tftpboot use chroot = no max connections = 2 lock file = /var/lock/rsyncd.tftp read only = no list = no uid = root auth users = backup secrets file = /etc/rsyncd.secrets strict modes = yes hosts allow = <ip_адрес_другого_сервера> <virtual_ip> ignore errors = no ignore nonreadable = yes transfer logging = no timeout = 60 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz [ems-wp] path = /var/ems-data/WP use chroot = no max connections = 2 lock file = /var/lock/rsyncd.ems-wp read only = no list = no uid = root auth users = backup secrets file = /etc/rsyncd.secrets strict modes = yes hosts allow = <ip_адрес_другого_сервера> <virtual_ip> ignore errors = no ignore nonreadable = yes transfer logging = no timeout = 60 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz [radius-nbi-certs] path = /var/lib/eltex-radius-nbi use chroot = no max connections = 2 lock file = /var/lock/rsyncd.radius read only = no list = no uid = root auth users = backup secrets file = /etc/rsyncd.secrets strict modes = yes hosts allow = <ip_адрес_другого_сервера> <virtual_ip> ignore errors = no ignore nonreadable = yes transfer logging = no timeout = 60 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz [radius-certs] path = /etc/eltex-radius/certs use chroot = no max connections = 2 lock file = /var/lock/rsyncd.radius read only = no list = no uid = root auth users = backup secrets file = /etc/rsyncd.secrets strict modes = yes hosts allow = <ip_адрес_другого_сервера> <virtual_ip> ignore errors = no ignore nonreadable = yes transfer logging = no timeout = 60 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
Для аутентификации, необходимо настроить пользователя rsync, для этого, на каждом сервере создайте файлы /etc/rsyncd.secrets, в которых необходимо указать пароль.
backup:rspasswd |
Назначить права доступа к файлам, выполнив на обоих серверах:
sudo chmod 600 /etc/rsyncd.secrets |
Настройка запуска синхронизации
Создайте файлы /etc/rsync_client.secrets, в которых укажите пароль:
echo "rspasswd" | sudo tee /etc/rsync_client.secrets && sudo chmod 600 /etc/rsync_client.secrets |
Начиная с версии rsync 3.2.0 добавлена по умолчанию защита каталога /usr, /boot, /home (защиту home в дальнейшем убрали) Решением является переопределение защищающей опции rsync. |
Для запуска сервиса используется команда:
sudo service rsync start |
Для остановки сервиса используется команда:
sudo service rsync stop |
Для проверки — запущен ли сервис в данный момент, используется команда:
sudo service rsync status |
Операцию синхронизации файлов осуществляет задача cron, в которой выполняется скрипт /usr/lib/eltex-ems/scripts/rsync_ems_backup.sh. Скрипт запускает rsync клиент и синхронизирует локальные директории с директориями на втором (backup) сервере. Синхронизация запускается только в случае, если сервер в состоянии master.
В 6 строке заменить HOST на ip-адрес другого сервера (Пример: HOST=100.111.195.201)
#!/bin/bash
LOCKFILE="/run/lock/rsync_ems_backup"
# IP address backup server
HOST=<ip_адрес_другого_сервера>
# Check if we're root
if [ `whoami` != "root" ]
then
echo "This script should be run by root."
exit 1
fi
# Check and create lock file
if ! lockfile-create --use-pid -r 0 $LOCKFILE &> /dev/null ; then
echo "Backup is already running"
exit 0
fi
# Check - if we're master - try to perform backup to slave
SRVMODE=`cat /tmp/keep.mode`
if [ "$SRVMODE" == "MASTER" ]
then
rsync -urlogtp --delete-after --password-file=/etc/rsync_client.secrets /usr/lib/eltex-ems/conf/ backup@$HOST::ems-conf > /tmp/rsync_ems_conf.log 2>&1
echo $? >> /tmp/rsync_ems_conf_result.log
rsync -urlogtp --delete-after --password-file=/etc/rsync_client.secrets /tftpboot/ backup@$HOST::ems-tftp > /tmp/rsync_ems_tftpboot.log 2>&1
echo $? >> /tmp/rsync_ems_tftpboot_result.log
rsync -urlogtp --delete-after --password-file=/etc/rsync_client.secrets /var/ems-data/WP/ backup@$HOST::ems-wp > /tmp/rsync_ems_wp.log 2>&1
echo $? >> /tmp/rsync_ems_wp_result.log
else
echo "Not master. No action will be performed."
fi
lockfile-remove $LOCKFILE |
Сервис eltex-radius-nbi генерирует для каждой из нод свой собственный CA и серверный сертификат, после чего копирует их в eltex-radius:
На основании wireless-ca.crt буду генерироваться клиентские сертификаты (создаются через ЛК) в директории /var/lib/eltex-radius-nbi/certificates/
При создании сертификата пользователя через ЛК он будет сгенерирован на только ноде, на которой сейчас вы находитесь и на основании его собственного wireless-ca.crt.
Поэтому при переходе мастерства вторая нода не будет ничего знать о клиентских сертификатах.
Обязательно убедитесь, что в файле /etc/eltex-radius-nbi/radius_nbi_config.txt в переменной tomcat.host установлен ваш виртуальный ip-адрес |
Чтобы это исправить нужно:
Добавить ip-адрес второго хоста в переменную окружения
echo "export SLAVE_HOST="YOUR_IP"" | sudo tee /etc/environment && source /etc/environment |
|
|
эти команды синхронизируют данные с вашей второстепенной нодой
|
Статус можно проверить в файле /tmp/keep.mode |
Cоздать задачу в cron на обоих серверах, для запуска синхронизации раз в минуту:
sudo crontab -l | { cat; echo "*/1 * * * * /usr/lib/eltex-ems/scripts/rsync_ems_backup.sh"; } | sudo crontab
sudo crontab -l | { cat; echo "*/1 * * * * /usr/lib/eltex-radius-nbi/rsync_radius_cert_synchronization.sh"; } | sudo crontab |
Проверяем список задач:
sudo crontab -l */1 * * * * /usr/lib/eltex-ems/scripts/rsync_ems_backup.sh */1 * * * * /usr/lib/eltex-radius-nbi/rsync_radius_cert_synchronization.sh |
Если задача не добавилась или случайно добавилась несколько раз - редактируем список вручную:
sudo crontab -e Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny 3. /usr/bin/code 4. /bin/ed Choose 1-4 [1]: 1 # выбираем в каком редакторе открыть |
Проверить работу rsync можно в EMS. Во вкладке "Информация"-Состояние системы резервирования-Rsync service.
На обоих серверах должна быть запись такого типа:
OK. Успешная синхронизация файлов из директории: /usr/lib/eltex-ems/conf/* OK. Успешная синхронизация файлов из директории: /tftpboot/* OK. Успешная синхронизация файлов из директории: /var/ems-data/WP/* |
Подготовьте 3 дополнительных виртуальных машины для работы баз данных в калстере.
Минимальные требования к VM при запуске galera cluster:
|
Так как мы используем нв SoftWLC 1.31 MariaDB версии 10.6.17+maria~ubu2204 на всех трех внешних нодах БД нужно использовать эту же версию. В данной инструкции мы установим все необходимое из deb-пакетов:
1) Скачиваем необходимый архив deb-инсталляторов, загружаем архив mariadb-10.6.17-ubuntu-jammy-amd64-debs.tar в удобную для загрузки директорию.
2) Разархивируем в целевую директорию и перейдем в нее
sudo tar -xvf mariadb-10.6.17-ubuntu-jammy-amd64-debs.tar cd ./mariadb-10.6.17-ubuntu-jammy-amd64-debs |
3) Установка командами:
# Установка необходимых зависимостей
sudo apt-get update sudo apt-get install libdbi-perl libdbd-mysql-perl psmisc libaio1 socat |
# Установка дебок из директории марии с deb-пакетами
sudo dpkg --install ./mariadb-common*.deb \ ./mysql-common*.deb \ ./mariadb-client*.deb \ ./libmariadb3_*.deb \ ./libmysqlclient18*.deb sudo dpkg --install ./mariadb-server*.deb \ ./mariadb-backup*.deb \ ./galera-4*.deb |
# Проверка установки
sudo dpkg -l | grep -i mariadb # Результат ii libdbd-mysql-perl:amd64 4.050-5ubuntu0.22.04.1 amd64 Perl5 database interface to the MariaDB/MySQL database ii libmariadb3:amd64 1:10.6.17+maria~ubu2204 amd64 MariaDB database client library ii mariadb-backup 1:10.6.17+maria~ubu2204 amd64 Backup tool for MariaDB server ii mariadb-client 1:10.6.17+maria~ubu2204 all MariaDB database client binaries (metapackage depending on the latest version) ii mariadb-client-10.6 1:10.6.17+maria~ubu2204 amd64 MariaDB database client binaries ii mariadb-client-core-10.6 1:10.6.17+maria~ubu2204 amd64 MariaDB database core client binaries ii mariadb-common 1:10.6.17+maria~ubu2204 all MariaDB database common files (e.g. /etc/mysql/mariadb.conf.d/) ii mariadb-server 1:10.6.17+maria~ubu2204 all MariaDB database server binaries (metapackage depending on the latest version) ii mariadb-server-10.6 1:10.6.17+maria~ubu2204 amd64 MariaDB database server binaries ii mariadb-server-core-10.6 1:10.6.17+maria~ubu2204 amd64 MariaDB database core server files ii mysql-common 1:10.6.17+maria~ubu2204 all MariaDB client common configuration files package (e.g. /etc/mysql/my.cnf) |
sudo dpkg -l | grep -i galera # Результат ii galera-4 26.4.16-ubu2204 amd64 Replication framework for transactional applications |
На каждой ноде БД выполняем следующие действия:
1) Заходим в mysql и добавляем пользователя для выполнения репликации:
CREATE USER 'mysql'@'localhost' IDENTIFIED VIA unix_socket; GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'mysql'@'localhost'; flush privileges; |
2) В файле /etc/mysql/mariadb.conf.d/50-server.cnf комментируем "bind-address", исправляем значение max_connections на 500, и добавляем строку "progress_report_time = 0"
#bind-address = 127.0.0.1 max_connections = 500 progress_report_time = 0 |
# # These groups are read by MariaDB server. # Use it for options that only the server (but not clients) should see # # See the examples of server my.cnf files in /usr/share/mysql # this is read by the standalone daemon and embedded servers [server] # this is only for the mysqld standalone daemon [mysqld] # # * Basic Settings # user = mysql pid-file = /run/mysqld/mysqld.pid socket = /run/mysqld/mysqld.sock #port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql #skip-external-locking # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 # # * Fine Tuning # #key_buffer_size = 16M #max_allowed_packet = 16M #thread_stack = 192K #thread_cache_size = 8 # This replaces the startup script and checks MyISAM tables if needed # the first time they are touched #myisam_recover_options = BACKUP max_connections = 500 #table_cache = 64 #thread_concurrency = 10 progress_report_time = 0 # # * Query Cache Configuration # #query_cache_limit = 1M query_cache_size = 16M # # * Logging and Replication # # Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. # As of 5.1 you can enable the log at runtime! #general_log_file = /var/log/mysql/mysql.log #general_log = 1 # # Error log - should be very few entries. # log_error = /var/log/mysql/error.log # # Enable the slow query log to see queries with especially long duration #slow_query_log_file = /var/log/mysql/mariadb-slow.log #long_query_time = 10 #log_slow_rate_limit = 1000 #log_slow_verbosity = query_plan #log-queries-not-using-indexes # # The following can be used as easy to replay backup logs or for replication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. #server-id = 1 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 #max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = exclude_database_name # # * Security Features # # Read the manual, too, if you want chroot! #chroot = /var/lib/mysql/ # # For generating SSL certificates you can use for example the GUI tool "tinyca". # #ssl-ca = /etc/mysql/cacert.pem #ssl-cert = /etc/mysql/server-cert.pem #ssl-key = /etc/mysql/server-key.pem # # Accept only connections using the latest and most secure TLS protocol version. # ..when MariaDB is compiled with OpenSSL: #ssl-cipher = TLSv1.2 # ..when MariaDB is compiled with YaSSL (default in Debian): #ssl = on # # * Character sets # # MySQL/MariaDB default is Latin1, but in Debian we rather default to the full # utf8 4-byte character set. See also client.cnf # character-set-server = utf8mb4 collation-server = utf8mb4_general_ci # # * InnoDB # # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. # Read the manual for more InnoDB related options. There are many! # # * Unix socket authentication plugin is built-in since 10.0.22-6 # # Needed so the root database user can authenticate without a password but # only when running as the unix root user. # # Also available for other users if required. # See https://mariadb.com/kb/en/unix_socket-authentication-plugin/ # this is only for embedded server [embedded] # This group is only read by MariaDB servers, not by MySQL. # If you use the same .cnf file for MySQL and MariaDB, # you can put MariaDB-only options here [mariadb] # This group is only read by MariaDB-10.3 servers. # If you use the same .cnf file for MariaDB of different versions, # use this group for options that older servers don't understand |
3) Создаем файл /etc/mysql/conf.d/galera.cnf настраиваем в нем следующие параметры:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://100.111.206.35,100.111.206.36,100.111.206.37" # Galera Synchronization Configuration #wsrep_sst_method=rsync wsrep_sst_method=mariabackup #wsrep_sst_auth=sst:password wsrep_sst_auth=mysql: # Galera Node Configuration wsrep_node_address="100.110.3.70" wsrep_node_name="node1" # Enable Conflict Logging wsrep_log_conflicts=ON wsrep_provider_options="cert.log_conflicts=YES;pc.weight=40;evs.auto_evict=5" |
Где:
wsrep_cluster_address="gcomm://100,111,206,35,100,111,206,36,100,111,206,37" - перечень адресов всех нод БД wsrep_cluster_name="test_cluster" - название кластера (должно совпадать на всех нодах БД) wsrep_provider_options="cert.log_conflicts=YES;pc.weight=40;evs.auto_evict=5" - вес в системе нод (pc.weight=40) - должен быть уникальным для каждой ноды (от 1 до 250) |
Запуск происходит вручную с "первой ноды" (Администратор самостоятельно определяет первую ноду из перечня).
1) Перед запуском первой ноды прописываем в окружении переменную:
sudo systemctl set-environment MYSQLD_OPTS="--wsrep-new-cluster" |
2) Выполняем рестарт сервера:
sudo systemctl restart mariadb |
3) Подключаемся на хосте к mysql:
sudo mysql |
4) Проверяем состояние кластера (пока нода одна) командами:
show status like 'wsrep_cluster_status'; +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+ show status like 'wsrep_evs_state'; +-----------------+-------------+ | wsrep_evs_state | OPERATIONAL | +-----------------+-------------+ show status like 'wsrep_local_state_comment'; +---------------------------+--------+ | wsrep_local_state_comment | Synced | +---------------------------+--------+ show status like 'wsrep_provider_name'; +---------------------+--------+ | wsrep_provider_name | Galera | +---------------------+--------+ show status like 'wsrep_cluster_size'; +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+ |
Обратите внимание, что пока в кластере только одна нода:
show status like 'wsrep_cluster_size'; +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+ |
5) После успешного запуска удаляем глобальную переменную командой:
sudo systemctl unset-environment MYSQLD_OPTS |
Предполагается, что на данном шаге все вышеуказанные конфигурационные фалы созданы и откорректированы, а первая нода запущена |
1) На каждой ноде кроме первой, перезапускаем MySQL командой:
sudo systemctl restart mariadb |
2) Затем проверяем статус:
sudo systemctl status mariadb |
Если сервис не запустился, значит где-то допущена ошибка. |
3) Проверяем статус кластера на каждой ноде командами:
show status like 'wsrep_cluster_status'; +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+ show status like 'wsrep_evs_state'; +-----------------+-------------+ | wsrep_evs_state | OPERATIONAL | +-----------------+-------------+ show status like 'wsrep_local_state_comment'; +---------------------------+--------+ | wsrep_local_state_comment | Synced | +---------------------------+--------+ show status like 'wsrep_provider_name'; +---------------------+--------+ | wsrep_provider_name | Galera | +---------------------+--------+ show status like 'wsrep_cluster_size'; +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+ |
В схеме с использованием 3х нод, после запуска всех нод 'wsrep_cluster_size' должен быть равен 3
show status like 'wsrep_cluster_size'; +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+ |
Добавляем ключ и адреса репозиториев, затем обновляем apt
sudo wget -q -O - http://lab3-repo.eltex.loc:2088/repo.gpg.key | gpg --yes --dearmor -o /etc/apt/keyrings/eltex.gpg sudo echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://lab3-repo.eltex.loc:2088 softwlc-1.31-common main" >> /etc/apt/sources.list.d/eltex.list sudo echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://lab3-repo.eltex.loc:2088 softwlc-1.31-jammy main" >> /etc/apt/sources.list.d/eltex.list sudo echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://lab3-repo.eltex.loc:2088 softwlc-1.31-dependencies-jammy main" >> /etc/apt/sources.list.d/eltex.list sudo apt update |
Создание пользователя root, необходимого для установки пакетов "*-db":
create user 'root'@'127.0.0.1' identified by 'root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES; |
Выполните перенос полноuj дампа бд SoftWLC с первой ноды SoftWLC на первую ноду Galera (Условно ту, с которой выполнен запуск Galera) при помощи mysqldump. Для этого, необходимо на первом сервере заблокировать таблицы, снять дамп, разблокировать таблицы и скопировать получившийся файл на второй сервер:
sudo mysql -uroot -proot -e "FLUSH TABLES WITH READ LOCK;" sudo mysqldump -uroot -proot --databases ELTEX_PORTAL eltex_alert eltex_auth_service eltex_bruce eltex_doors eltex_ems eltex_jobs eltex_ngw eltex_ont radius wireless eltex_pcrf eltex_wids eltex_wifi_customer_cab > mysqldump_master.sql sudo mysql -uroot -proot -e "UNLOCK TABLES;" sudo scp mysqldump_master.sql <username>@<ip_ноды_Galera>:/home/<username>/ |
Затем, развернуть dump на ноде Galera, на которую выполнен перенос, командой:
sudo mysql -uroot -proot < /home/<username>/mysqldump_master.sql |
В БД mysql добавляем пользователя:
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor'; GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%'; |
После переноса БД, за счет синхронизации, она распространится на все ноды.
Сервис eltex-radius-db требуется включить в cron очистку устаревших записей - так что этот пакет необходимо установить на каждой ноде баз данных.
Выполните установку для каждой из трех нод командой:
sudo apt install eltex-radius-db # Подтвердите следующее в процессе установки Do you want to add ThreeYearsRadacct monitor to cron? [Y/n] Y |
После установки пакетов БД появиться пользователь javauser, дадим ему права на работу с БД портала, ngw, doors, Syslog:
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'@'%'; GRANT ALL PRIVILEGES ON `eltex_pcrf`.* TO 'javauser'@'%'; GRANT ALL PRIVILEGES ON `eltex_wids`.* TO 'javauser'@'%'; GRANT ALL PRIVILEGES ON `eltex_wifi_customer_cab`.* TO 'javauser'@'%'; GRANT ALL PRIVILEGES ON `eltex_jobs`.* TO 'javauser'@'%'; GRANT ALL PRIVILEGES ON `eltex_sorm2`.* TO 'javauser'@'%'; GRANT ALL PRIVILEGES ON `eltex_ott`.* TO 'javauser'@'%'; GRANT ALL PRIVILEGES ON `eltex_jerry`.* TO 'javauser'@'%'; FLUSH PRIVILEGES; |
Для создания БД ELTEX_PORTAL, eltex_doors, eltex_ngw необходимо настроить подключение БД в сервисах eltex-portal/eltex-portal-constructor, eltex-doors, eltex-ngw и выполнить их рестарт. После рестарта они создадут соответствующие им БД.
Принимать все запросы от сервисов контроллера SoftWLC будет сервис под названием ProxySQL, его необходимо установить на обе ноды Контроллеров (не на ноды БД)
Скачиваем текущую актуальную версию ProxySQL на каждый хост SOftWLC:
sudo wget https://github.com/sysown/proxysql/releases/download/v2.6.3/proxysql_2.6.3-ubuntu22_amd64.deb sudo dpkg -i ./proxysql_2.6.3-ubuntu22_amd64.deb |
Редактируем файл настроек /etc/proxysql.cnf
Исправляем вывод файла логов на более обычную директорию:
errorlog="/var/log/proxysql/proxysql.log" |
Добавляем секцию с информацией о серверах MariaDB:
{
address = "ip-адрес_ноды_БД1"
port = 3306
hostgroup = 0
maxconnections = 500
},
{
address = "ip-адрес_ноды_БД2"
port = 3306
hostgroup = 0
maxconnetions = 500
},
{
address = "ip-адрес_ноды_БД3"
port = 3306
hostgroup = 0
maxconnetions = 500
} |
Добавляем информацию о пользователях БД:
{
username = "root"
password = "root"
default_hostgroup = 0
active = 1
max_connections = 500
fast_forward = 1
},
{
username = "javauser"
password = "javapassword"
default_hostgroup = 0
active = 1
max_connections = 500
fast_forward = 1
},
{
username = "radius"
password = "radpass"
default_hostgroup = 0
active = 1
max_connections = 500
fast_forward = 1
} |
Пример настройки:
#file proxysql.cfg
########################################################################################
# This config file is parsed using libconfig , and its grammar is described in:
# http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-File-Grammar
# Grammar is also copied at the end of this file
########################################################################################
########################################################################################
# IMPORTANT INFORMATION REGARDING THIS CONFIGURATION FILE:
########################################################################################
# On startup, ProxySQL reads its config file (if present) to determine its datadir.
# What happens next depends on if the database file (disk) is present in the defined
# datadir (i.e. "/var/lib/proxysql/proxysql.db").
#
# If the database file is found, ProxySQL initializes its in-memory configuration from
# the persisted on-disk database. So, disk configuration gets loaded into memory and
# then propagated towards the runtime configuration.
#
# If the database file is not found and a config file exists, the config file is parsed
# and its content is loaded into the in-memory database, to then be both saved on-disk
# database and loaded at runtime.
#
# IMPORTANT: If a database file is found, the config file is NOT parsed. In this case
# ProxySQL initializes its in-memory configuration from the persisted on-disk
# database ONLY. In other words, the configuration found in the proxysql.cnf
# file is only used to initial the on-disk database read on the first startup.
#
# In order to FORCE a re-initialise of the on-disk database from the configuration file
# the ProxySQL service should be started with "systemctl start proxysql-initial".
#
########################################################################################
datadir="/var/lib/proxysql"
errorlog="/var/log/proxysql/proxysql.log"
admin_variables=
{
admin_credentials="admin:admin"
# mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
mysql_ifaces="0.0.0.0:6032"
# refresh_interval=2000
# debug=true
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
# interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
interfaces="0.0.0.0:6033"
default_schema="information_schema"
stacksize=1048576
server_version="5.5.30"
connect_timeout_server=3000
# make sure to configure monitor username and password
# https://github.com/sysown/proxysql/wiki/Global-variables#mysql-monitor_username-mysql-monitor_password
monitor_username="monitor"
monitor_password="monitor"
monitor_history=600000
monitor_connect_interval=60000
monitor_ping_interval=10000
monitor_read_only_interval=1500
monitor_read_only_timeout=500
ping_interval_server_msec=120000
ping_timeout_server=500
commands_stats=true
sessions_sort=true
connect_retries_on_failure=10
}
# defines all the MySQL servers
mysql_servers =
(
{
address = "10.10.0.21"
port = 3306
hostgroup = 0
maxconnections = 500
},
{
address = "10.10.0.22"
port = 3306
hostgroup = 0
maxconnetions = 500
},
{
address = "10.10.0.23"
port = 3306
hostgroup = 0
maxconnetions = 500
}
# {
# address = "127.0.0.1" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
# port = 3306 # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
# hostgroup = 0 # no default, required
# status = "ONLINE" # default: ONLINE
# weight = 1 # default: 1
# compression = 0 # default: 0
# max_replication_lag = 10 # default 0 . If greater than 0 and replication lag passes such threshold, the server is shunned
# },
# {
# address = "/var/lib/mysql/mysql.sock"
# port = 0
# hostgroup = 0
# },
# {
# address="127.0.0.1"
# port=21891
# hostgroup=0
# max_connections=200
# },
# { address="127.0.0.2" , port=3306 , hostgroup=0, max_connections=5 },
# { address="127.0.0.1" , port=21892 , hostgroup=1 },
# { address="127.0.0.1" , port=21893 , hostgroup=1 }
# { address="127.0.0.2" , port=3306 , hostgroup=1 },
# { address="127.0.0.3" , port=3306 , hostgroup=1 },
# { address="127.0.0.4" , port=3306 , hostgroup=1 },
# { address="/var/lib/mysql/mysql.sock" , port=0 , hostgroup=1 }
)
# defines all the MySQL users
mysql_users:
(
{
username = "root"
password = "root"
default_hostgroup = 0
active = 1
max_connections = 500
fast_forward = 1
},
{
username = "javauser"
password = "javapassword"
default_hostgroup = 0
active = 1
max_connections = 500
fast_forward = 1
},
{
username = "radius"
password = "radpass"
default_hostgroup = 0
active = 1
max_connections = 500
fast_forward = 1
}
# {
# username = "username" # no default , required
# password = "password" # default: ''
# default_hostgroup = 0 # default: 0
# active = 1 # default: 1
# },
# {
# username = "root"
# password = ""
# default_hostgroup = 0
# max_connections=1000
# default_schema="test"
# active = 1
# },
# { username = "user1" , password = "password" , default_hostgroup = 0 , active = 0 }
)
#defines MySQL Query Rules
mysql_query_rules:
(
# {
# rule_id=1
# active=1
# match_pattern="^SELECT .* FOR UPDATE$"
# destination_hostgroup=0
# apply=1
# },
# {
# rule_id=2
# active=1
# match_pattern="^SELECT"
# destination_hostgroup=1
# apply=1
# }
)
scheduler=
(
# {
# id=1
# active=0
# interval_ms=10000
# filename="/var/lib/proxysql/proxysql_galera_checker.sh"
# arg1="0"
# arg2="0"
# arg3="0"
# arg4="1"
# arg5="/var/lib/proxysql/proxysql_galera_checker.log"
# }
)
mysql_replication_hostgroups=
(
# {
# writer_hostgroup=30
# reader_hostgroup=40
# comment="test repl 1"
# },
# {
# writer_hostgroup=50
# reader_hostgroup=60
# comment="test repl 2"
# }
)
# http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-File-Grammar
#
# Below is the BNF grammar for configuration files. Comments and include directives are not part of the grammar, so they are not included here.
#
# configuration = setting-list | empty
#
# setting-list = setting | setting-list setting
#
# setting = name (":" | "=") value (";" | "," | empty)
#
# value = scalar-value | array | list | group
#
# value-list = value | value-list "," value
#
# scalar-value = boolean | integer | integer64 | hex | hex64 | float
# | string
#
# scalar-value-list = scalar-value | scalar-value-list "," scalar-value
#
# array = "[" (scalar-value-list | empty) "]"
#
# list = "(" (value-list | empty) ")"
#
# group = "{" (setting-list | empty) "}"
#
# empty = |
Рестартуем сервис:
systemctl restart proxysql |
Останавливаем MariaDB на SoftWLC командой:
systemctl stop mariadb.service |
Переходим в админку ProxySQL чтобы изменить порт сервиса на стандартный 3306
mysql -uadmin -padmin -P 6032 -h 127.0.0.1 --prompt='Admin>' |
Меняем порт сервиса на стандартный 3306 и сохраняем настройку
update global_variables set variable_value = '0.0.0.0:3306' where variable_name = 'mysql-interfaces'; save mysql variables to disk; |
Разрешаем запись только в одну ноду кластера (с наибольшим приоритетом)
DELETE FROM mysql_servers; INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,max_connections, max_replication_lag) VALUES (0,'ip-дрес_ноды_БД1',3306,1000,500,10); INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,max_connections, max_replication_lag) VALUES (0,'ip-дрес_ноды_БД2',3306,800,500,10); INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,max_connections, max_replication_lag) VALUES (0,'ip-дрес_ноды_БД3',3306,600,500,10); DELETE FROM mysql_galera_hostgroups; INSERT INTO mysql_galera_hostgroups (writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind, comment) VALUES (0, 1, 2, 3, 1, 1, 1, 100, NULL); LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; select * from runtime_mysql_servers; |
writer_hostgroup 0 backup_writer_hostgroup 1 reader_hostgroup 2 offline_hostgroup 3 active 1 max_writers 1 writer_is_also_reader 1 max_transactions_behind 100 comment NULL |
Рестартуем сервис повторно:
systemctl restart proxysql |
Включение панели мониторинга
Включаем web-панель для proxysql (логин/пароль stats / stats , панель будет доступна по адресу сервера, через https на порту 6080):
SET admin-web_enabled='true'; LOAD ADMIN VARIABLES TO RUNTIME; SAVE ADMIN VARIABLES TO DISK; SELECT * FROM global_variables WHERE variable_name LIKE '%admin-web%'; |
Сервисы Eltex в рамках комплекса SoftWLC производят различные транзакции опирирую записями в БД. Работа транзакций выполняется по ссылкам в файлах конфигурации сервисов. Для корректной работы - необходимо изменить некоторые конфигурационные файлы. Измените в перечисленных ниже файлах конфигураций ссылки - конструкцию "jdbc:mysql://localhost/" замените на "jdbc:mysql://127.0.0.1:3306", в конце каждой измененной ссылки добавьте сегмент "&useSSL=false" если он отсутствует.
Пример
Как ссылка выглядит в конфигурации по умолчанию:
"jdbc:mysql://localhost/radius?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true" |
Как должно быть:
"jdbc:mysql://127.0.0.1:3306/radius?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false" |
После внесения изменений в конфигурационные файлы необходимо перезапустить соответствующий сервис: service eltex-<service_name> restart |
1) В файле /etc/eltex-pcrf/pcrf.json замените в ссылках конструкцию "jdbc:mysql://localhost/" на "jdbc:mysql://127.0.0.1:3306", в конце каждой измененной ссылке должен быть сегмент "&useSSL=false"
{
"auth.address" : "0.0.0.0",
"auth.port" : 31812,
"auth.mac.open.timeout.s" : 3600,
"auth.mac.welcome.service" : "WELCOME",
"acct.address" : "0.0.0.0",
"acct.ports" : [1813, 31813],
"lease.saver.address" : "0.0.0.0",
"lease.saver.port" : 4381,
"aaa.instances" : 5,
"aaa.host" : "127.0.0.1",
"aaa.secret" : "testing123",
"aaa.auth.port" : 1812,
"aaa.acct.port" : 1813,
"aaa.rest.port" : 7080,
"aaa.timeout" : 10,
"aaa.attempts" : 1,
"web.monitoring.port" : 7070,
"cluster.enable" : false,
"cluster.eventBusPort" : 5801,
"radius" : {
"url": "jdbc:mysql://127.0.0.1:3306/radius?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false",
"user": "javauser",
"password": "javapassword",
"max_pool_size": 16
},
"mongo.pcrf" : {
"connection_string": "mongodb://localhost:27017/pcrf?waitQueueMultiple=500&connectTimeoutMS=10000&socketTimeoutMS=0",
"db_name": "pcrf"
},
"session.storage" : {
"session.check.period.s" : 300,
"unauth.store.time.s" : 600,
"interval.number.expired" : 3,
"min.interval.s" : 45,
"default.interval.s" : 600
},
"bras.coa" : {
"coa.timeout" : 10,
"coa.attempts" : 1,
"coa.secret" : "testing123",
"remote.coa.port" : 3799,
"log.clean.period.s" : 604800,
"log.store.period" : {
"period" : 14,
"unit" : "D"
},
"worker.pool.size": 20
},
"sql.ems" : {
"url": "jdbc:mysql://127.0.0.1:3306/eltex_ems?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false",
"user": "javauser",
"password": "javapassword",
"max_pool_size": 16
},
"sql.wireless" : {
"url": "jdbc:mysql://127.0.0.1:3306/wireless?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false",
"user": "javauser",
"password": "javapassword",
"max_pool_size": 16
},
"sql.auth.service" : {
"url": "jdbc:mysql://127.0.0.1:3306/eltex_auth_service?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&useSSL=false",
"user": "javauser",
"password": "javapassword",
"max_pool_size": 4
},
"sql.pcrf" : {
"url": "jdbc:mysql://127.0.0.1:3306/eltex_pcrf?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&socketTimeout=5000&useSSL=false",
"user": "javauser",
"password": "javapassword",
"max_pool_size": 60
},
"sql.ott" : {
"url": "jdbc:mysql://127.0.0.1:3306/eltex_ott?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&socketTimeout=5000&useSSL=false",
"user": "javauser",
"password": "javapassword",
"max_pool_size": 32
},
"language" : "en",
"radius.nbi" : {
"wdsl.url" : "http://localhost:8080/axis2/services/RadiusNbiService?wsdl",
"username" : "softwlc_service",
"password" : "softwlc",
"connection.timeout.ms" : 30000,
"request.timeout.ms" : 120000
},
"tariffs.update.interval" : {
"interval" : 1,
"unit" : "hours",
"apb_enabled": false,
"apb_host": "localhost",
"apb_port": 8090
},
"bras.cron.update.interval": {
"interval" : 1,
"unit": "hours"
},
"filters.cache.dir" : "/var/lib/eltex-pcrf/filters/",
"clickhouse": {
"url": "jdbc:clickhouse://localhost:8123/radius",
"user_name": "javauser",
"user_password": "javapassword",
"actualization_period_ms": 15000
},
"accounting.options": {
"use_clickhouse": false,
"use_mysql": true,
"batch_interval_ms": 300000,
"max_queue_load": 100
},
"generic.ap.registrar": {
"max_aps_in_queue": 30,
"ap_register_interval_ms": 600000,
"added_ap_cache_ttl_ms": 600000,
"host": "localhost",
"port": 8080,
"worker_pool_size": 8
},
"kafka": {
"mcd.enabled": false,
"circuit.breaker": {
"timeout.ms": 30000,
"reset.ms": 60000,
"max.failures": 3
},
"producer": {
"bootstrap.servers": "localhost:9092",
"linger.ms": "1000",
"topic": "mcd",
"max.block.ms": "30000",
"request.timeout.ms": "14000",
"delivery.timeout.ms": "30000",
"acks": "1",
"retries": "1"
}
},
"worker.pool.size": 40
}
|
2) В файле /etc/eltex-portal-constructor/application.conf
login {
# Количество попыток входа в панель администратора до наступления блокировки
maxAttemptsLogin = 3
maxAttemptsIP = 5
# Количество минут блокировки после достижения максимального числа попыток входа в панель администратора
blockTime = 5m
}
access {
// Временно задаём plaintext-secret прямо здесь (HMAC256), потом будем использовать путь в FS до PEM-файла (RSA256)
secret = "secret"
}
database {
host = 127.0.0.1:3306
port = 3306
name = ELTEX_PORTAL
user = javauser
password = javapassword
pool {
# Time to wait for a connection
connectionTimeout = 10s
# Time to wait for connection validation
validationTimeout = 3s
min = 1
max = 10
}
cache {
# Limit of cached simple entries count (for each query type)
maxEntries = 1000
# Limit of total cached portal resources size
maxResourceBytes = 32m
# Maximum time to retain items in the cache
expireTime = 30s
}
}
sso {
enabled = false
# Must be in double quotes
version = "1.0"
rest {
scheme = http
host = 10.10.0.13
port = 80
sso_api_path = /apiman-gateway/b2b_test
}
auth {
scheme = http
host = 10.10.0.13
port = 80
authentication_path = /auth/realms/b2b/protocol/openid-connect/auth
logout_path = /auth/realms/b2b/protocol/openid-connect/logout
}
params {
client_id = id
# URL of epadmin, URL must be in double quotes (!!!)
redirect_uri = "http://10.10.0.13:8080/epadmin/sso"
client_secret = secret
}
}
jetty {
http.port = 9001
https {
port = 9444
keystorePass = 12345
keystoreFile = /etc/eltex-portal-constructor/localhost.pfx
keystoreType = PKCS12
keyAlias = 1
ciphers = [
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
]
}
multipart {
maxFileSize = 100MB
maxRequestSize = 100MB
}
}
validation {
public_key = /etc/eltex-doors/keys/public.pem
}
logging {
host = 10.10.0.13
port = 9099
} |
2) В файле /etc/eltex-portal/application.conf
portal {
defaultRedirectUrl = "http://eltex-co.ru"
scheduler {
tariffCheckerPeriod = 1d
paymentsCleanerPeriod = "0 0 * * * ?"
}
}
jetty {
https {
port = 9443
keystorePass = 12345
keystoreFile = /etc/eltex-portal/localhost.pfx
keystoreType = PKCS12
keyAlias = 1
ciphers = [
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
]
}
}
database {
host = localhost
port = 3306
name = ELTEX_PORTAL
user = javauser
password = javapassword
pool {
# Time to wait for a connection
connectionTimeout = 10s
# Time to wait for connection validation
validationTimeout = 3s
min = 1
max = 10
}
cache {
# Limit of cached simple entries count (for each query type)
maxEntries = 1000
# Limit of total cached portal resources size
maxResourceBytes = 32m
# Maximum time to retain items in the cache
expireTime = 2m
}
}
// JWT validation. You need a key from Eltex Doors.
// Or you could generate it yourself.
validation {
public_key = "etc/eltex-doors/keys/public.pem" |
3) В файле /etc/eltex-radius-nbi/radius_nbi_config.txt
# DB radius(alias=radius) radius.jdbc.driver=org.gjt.mm.mysql.Driver radius.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/radius?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false radius.jdbc.username=javauser radius.jdbc.password=javapassword radius.jdbc.maxPoolSize=48 radius.jdbc.inUse=yes # DB radius replica(alias=radiusReplicaPool) #TODO: Change it to replica url radius.jdbc.replica.driver=org.gjt.mm.mysql.Driver radius.jdbc.replica.dbUrl=jdbc:mysql://127.0.0.1:3306/radius?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false radius.jdbc.replica.username=javauser radius.jdbc.replica.password=javapassword radius.jdbc.replica.maxPoolSize=48 radius.jdbc.replica.inUse=yes # DB ems(alias=ems) ems.jdbc.driver=org.gjt.mm.mysql.Driver ems.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_ems?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&noAccessToProcedureBodies=true&useSSL=false ems.jdbc.username=javauser ems.jdbc.password=javapassword ems.jdbc.maxPoolSize=48 ems.jdbc.inUse=yes # DB wireless (alias=wireless) wireless.jdbc.driver=org.gjt.mm.mysql.Driver wireless.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/wireless?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000 wireless.jdbc.username=javauser wireless.jdbc.password=javapassword wireless.jdbc.maxPoolSize=48 wireless.jdbc.inUse=yes # DB logs (alias=logs) logs.jdbc.driver=org.gjt.mm.mysql.Driver logs.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_alert?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false logs.jdbc.username=javauser logs.jdbc.password=javapassword logs.jdbc.maxPoolSize=48 logs.jdbc.inUse=yes # DB logs (alias=eltex_auth_service) eltex_auth_service.jdbc.driver=org.gjt.mm.mysql.Driver eltex_auth_service.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_auth_service?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false eltex_auth_service.jdbc.username=javauser eltex_auth_service.jdbc.password=javapassword eltex_auth_service.jdbc.maxPoolSize=48 eltex_auth_service.jdbc.inUse=yes # адрес ems-northbound ems.nbi.host=10.10.0.13 ems.nbi.port=8080 ems.nbi.path=northbound ems.nbi.protocol=http # tomcat url tomcat.host=10.10.0.13 tomcat.port=8080 # pcrf stuff pcrf.enabled=true pcrf.url=http://10.10.0.13:7070 pcrf.username=admin pcrf.password=password pcrf.readtimeout=11 pcrf.writetimeout=11 # pcrf mysql pcrf.jdbc.driver=org.gjt.mm.mysql.Driver pcrf.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_pcrf?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false pcrf.jdbc.username=javauser pcrf.jdbc.password=javapassword pcrf.jdbc.maxPoolSize=48 pcrf.jdbc.inUse=yes # wifi-customer-cab mysql wifi_cab.jdbc.driver=org.gjt.mm.mysql.Driver wifi_cab.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_wifi_customer_cab?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false wifi_cab.jdbc.username=javauser wifi_cab.jdbc.password=javapassword wifi_cab.jdbc.maxPoolSize=48 wifi_cab.jdbc.inUse=yes # Eltex.SORM2.replicator MariaDB 'sorm2' connect sorm2.jdbc.driver=org.gjt.mm.mysql.Driver sorm2.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_sorm2?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false sorm2.jdbc.username=javauser sorm2.jdbc.password=javapassword sorm2.jdbc.maxPoolSize=48 sorm2.jdbc.inUse=yes # wifi-customer-cab request settings wificab.timeout=90000 # Eltex.SORM2.replicator host to use API sorm2.enabled=false sorm2.url=http://10.10.0.13:7071 sorm2.username=admin sorm2.password=password #It enables records export to SORM3 while editing wifi users sorm3.enabled=false # ott mysql ott.jdbc.driver=org.gjt.mm.mysql.Driver ott.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_ott?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false ott.jdbc.username=javauser ott.jdbc.password=javapassword ott.jdbc.maxPoolSize=48 ott.jdbc.inUse=yes # metrics metric.port=9010 # SSO settings sso.enabled=false #the "clientSecret" settings only matter when "provider=rtk" sso.clientSecret= #the "clientId" settings only matter when "provider=rtk" sso.clientId= # SSO REST sso.rest.server.protocol=http sso.rest.server.address= sso.rest.server.port=80 sso.rest.server.timeout.sec=10 # possible value for sso.rest.protocol.provider are "rtk", "keycloak" sso.rest.protocol.provider=rtk #the "version" settings only matter when "provider=rtk" sso.rest.protocol.version=2.0 #the "username" settings only matter when "provider=rtk" sso.rest.username= #the "password" settings only matter when "provider=rtk" sso.rest.password= # SSO SETTINGS sso.rest.getToken.path=/apiman-gateway/b2b_test/getToken sso.rest.getUserInfo.path=/apiman-gateway/b2b_test/getUserInfo #the least below sso settings only matter when "provider=rtk" sso.rest.addUser.path=/apiman-gateway/b2b_test/addUser sso.rest.updateUser.path=/apiman-gateway/b2b_test/updateUser sso.rest.delUser.path=/apiman-gateway/b2b_test/delUser sso.rest.addUserParam.path=/apiman-gateway/b2b_test/addUserParam sso.rest.delUserParam.path=/apiman-gateway/b2b_test/delUserParam sso.rest.getUserByName.path=/apiman-gateway/b2b_test/getUserByName sso.rest.getUserByEmail.path=/apiman-gateway/b2b_test/getUserByEmail sso.rest.resetPassword.path=/apiman-gateway/b2b_test/resetPassword sso.rest.getUserByParam.path=/apiman-gateway/b2b_test/getUserByParam # BRUCE bruce.host=10.10.0.13 bruce.port=8008 ########################################################################### ##########################DB ELTEX_PORTAL settings######################### ########################################################################### portal.db.driver=com.mysql.jdbc.Driver portal.db.url=jdbc:mysql://127.0.0.1:3306/ELTEX_PORTAL?max_allowed_packet=32362048&useUnicode=true&characterEncoding=utf8&useSSL=false portal.db.username=javauser portal.db.password=javapassword # NGW ngw.url=http://10.10.0.13:8040 # DOORS doors.url = http://10.10.0.13:9097/ doors.timeout = 60 doors.username = user doors.password = password # ELVIS elvis.url=http://10.10.0.13:9001/epadmin/ |
4) В файле /etc/eltex-ngw/application.conf
# Ports on which the server will listen auth_port=1812 #acct_port=1813 inner_tunnel_port=18121 # MySQL database db_host="127.0.0.1" db_port=3306 db_login="radius" db_password="radpass" db_name="radius" # MySQL 'wireless' database wireless_db_host="127.0.0.1" 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="10.10.0.13" 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="10.10.0.13" 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="10.10.0.13" proxy_ssid_port=18122 proxy_ssid_secret="eltex" |
5) В файле /etc/eltex-wifi-cab/system.xml
во всех строках.<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="nbiaddress">http://10.10.0.13:8080/axis2/services/RadiusNbiService?wsdl</entry>
<entry key="nbi.serviceLogin.user">softwlc_service</entry>
<entry key="nbi.serviceLogin.password">softwlc</entry>
<entry key="nbi.serviceLogin.requestTimeout.sec">120</entry>
<!--Bonnie or NBI-->
<entry key="data.service.type">NBI</entry>
<entry key="bonnie.service.host">10.10.0.13</entry>
<entry key="bonnie.service.port">9070</entry>
<!--Bruce-->
<entry key="bruce.service.host">10.10.0.13</entry>
<entry key="bruce.service.port">8008</entry>
<!--Jobs-->
<entry key="jobs.service.host">10.10.0.13</entry>
<entry key="jobs.service.port">9696</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.rt.ru/</entry>
<!-- SSO Settings -->
<entry key="sso.enabled">false</entry>
<entry key="sso.redirectUri">http://10.10.0.13:8080/wifi-cab/sso</entry>
<entry key="sso.clientSecret"></entry>
<entry key="sso.clientId"></entry>
<entry key="sso.localauth.enabled">true</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.provider">rtk</entry> <!-- rtk/keycloak -->
<entry key="sso.rest.protocol.version">2.0</entry> <!--setting only matters when provider=rtk-->
<entry key="sso.rest.username"></entry> <!--setting only matters when provider=rtk-->
<entry key="sso.rest.password"></entry> <!--setting only matters when provider=rtk-->
<entry key="sso.rest.getToken.path">/apiman-gateway/b2b_test/getToken</entry>
<entry key="sso.rest.getUserInfo.path">/apiman-gateway/b2b_test/getUserInfo</entry>
<!--the settings only matter when provider=rtk-->
<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>
|
6) В файле /usr/lib/eltex-ems/conf/config.txt
# DB Event poolName1=event event.jdbc.driver=org.gjt.mm.mysql.Driver event.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_alert?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false event.jdbc.username=javauser event.jdbc.password=javapassword event.jdbc.maxPoolSize=32 event.jdbc.inUse=yes # remote db host access with su privileges # event.ssh.login= # event.ssh.password= # event.ssh.port= # DB Tree poolName2=tree tree.jdbc.driver=org.gjt.mm.mysql.Driver tree.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_ems?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&noAccessToProcedureBodies=true&useSSL=false tree.jdbc.username=javauser tree.jdbc.password=javapassword tree.jdbc.maxPoolSize=20 tree.jdbc.inUse=yes # DB Ont poolName3=ont ont.jdbc.driver=org.gjt.mm.mysql.Driver ont.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/eltex_ont?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false ont.jdbc.username=javauser ont.jdbc.password=javapassword ont.jdbc.maxPoolSize=40 ont.jdbc.inUse=yes # DB Syslog poolName4=syslog syslog.jdbc.driver=org.gjt.mm.mysql.Driver syslog.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/Syslog?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false syslog.jdbc.username=javauser syslog.jdbc.password=javapassword syslog.jdbc.maxPoolSize=4 syslog.jdbc.inUse=yes # remote db host access with su privileges # syslog.ssh.login= # syslog.ssh.password= # syslog.ssh.port= # DB acsmain (alias=cpe) poolName5=cpe cpe.jdbc.driver=org.gjt.mm.mysql.Driver cpe.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/acsmain?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false cpe.jdbc.username=javauser cpe.jdbc.password=javapassword cpe.jdbc.maxPoolSize=2 cpe.jdbc.inUse=yes # DB acscmds(alias=cmds) poolName6=cmds cmds.jdbc.driver=org.gjt.mm.mysql.Driver cmds.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/acscmds?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false cmds.jdbc.username=javauser cmds.jdbc.password=javapassword cmds.jdbc.maxPoolSize=2 cmds.jdbc.inUse=yes # DB acsinf(alias=inf) poolName7=inf inf.jdbc.driver=org.gjt.mm.mysql.Driver inf.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/acsinf?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false inf.jdbc.username=javauser inf.jdbc.password=javapassword inf.jdbc.maxPoolSize=2 inf.jdbc.inUse=yes # DB acscache(alias=cache) poolName8=cache cache.jdbc.driver=org.gjt.mm.mysql.Driver cache.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/acscache?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false cache.jdbc.username=javauser cache.jdbc.password=javapassword cache.jdbc.maxPoolSize=2 cache.jdbc.inUse=yes # DB radius(alias=radius) poolName9=radius radius.jdbc.driver=org.gjt.mm.mysql.Driver radius.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/radius?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false radius.jdbc.username=javauser radius.jdbc.password=javapassword radius.jdbc.maxPoolSize=40 radius.jdbc.inUse=yes # remote db host access with su privileges # radius.ssh.login= # radius.ssh.password= # radius.ssh.port= # ------------------------------------------- SSID --------------------------------------------- # DB wireless (alias=wireless) poolName10=wireless wireless.jdbc.driver=org.gjt.mm.mysql.Driver wireless.jdbc.dbUrl=jdbc:mysql://127.0.0.1:3306/wireless?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&useSSL=false wireless.jdbc.username=javauser wireless.jdbc.password=javapassword wireless.jdbc.maxPoolSize=30 wireless.jdbc.inUse=yes # memcached server address #memcached_server_ip_port=127.0.0.1:11211 |
7) В файле /etc/eltex-bruce/application.properties
в строке 2server.port=8008
server.address.jobs=http://10.10.0.13:9696
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/eltex_bruce
spring.datasource.username=javauser
spring.datasource.password=javapassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.flyway.url=${spring.datasource.url}
spring.flyway.user=${spring.datasource.username}
spring.flyway.password=${spring.datasource.password}
#Quartz
spring.quartz.job-store-type=jdbc
spring.quartz.properties.quartz.jdbc.initialize-schema=never
spring.quartz.properties.org.quartz.scheduler.instanceName=jobs-quartz
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.quartz.properties.org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.useProperties=false
spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=20000
spring.quartz.properties.org.quartz.jobStore.misfireThreshold=12000000000
spring.quartz.properties.org.quartz.jobStore.isClustered=false
spring.quartz.properties.org.quartz.jobStore.dataSource=quartzDataSource
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.provider=hikaricp
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.driver=${spring.datasource.driver-class-name}
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.URL=${spring.datasource.url}
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.user=${spring.datasource.username}
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.password=${spring.datasource.password}
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount=10
spring.quartz.properties.org.quartz.threadPool.threadPriority=5
management.health.defaults.enabled=true
management.endpoints.web.exposure.include=health, beans, prometheus, env, threaddump, heapdump, metrics, httptrace
management.endpoint.health.enabled=true
|
8) В файле /etc/eltex-disconnect-service/application.conf
в строке 2pcrf {
host = 10.10.0.13
// connection port (7070 is default)
port = 7070
// for timeouts (you can use ns, us, ms, s, m and h letters)
// consult with HOCON duration format for more information
// how long we wait for connection
connectionTimeout = 10s
// how long we wait for response end
// minimum value should be greater then pcrf coa timeout
socketReadTimeout = 15s
// pool configuration
pool {
// minimum idle objects in pool
min = 1
// maximum pool size
max = 20
// timeout to retrieve an object from pool
waitTimeout = 5s
}
}
// JWT validation. You need a key from Eltex Doors.
// Or you could generate it yourself.
validation {
public_key = /etc/eltex-doors/keys/public.pem
}
|
9) В файле /etc/eltex-johnny/application.conf
pcrf {
// connection host
host = 10.10.0.13
// connection port (7070 is default)
port = 7070
// timeout (you can use ns, us, ms, s, m and h letters)
// consult with HOCON duration format for more information
timeout = 10s
// pool configuration
pool {
// minimum idle objects in pool
min = 1
// maximum pool size
max = 20
// timeout to retrieve an object from pool
waitTimeout = 5s
}
}
mercury {
// connection host
host = 10.10.0.13
// connection port (6565 is default)
port = 6565
// pool configuration
pool {
// minimum idle objects in pool
min = 1
// maximum pool size
max = 20
// timeout to retrieve an object from pool
waitTimeout = 5s
}
}
nbi {
// connection host
host = 10.10.0.13
// connection port (8080 is default)
port = 8080
// timeout (you can use ns, us, ms, s, m and h letters)
// consult with HOCON duration format for more information
timeout = 80s
// NBI login
login = admin
// NBI password
password = password
// pool configuration
pool {
// minimum idle objects in pool
min = 1
// maximum pool size
max = 20
// timeout to retrieve an object from pool
waitTimeout = 5s
}
}
portal {
scheme = http
host = 10.10.0.13
port = 9000
}
doors {
host = 10.10.0.13
port = 9097
path = /api
username = user
password = password
}
http {
connectionTimeout = 20s
connectionTotal = 100
}
// JWT validation. You need a key from Eltex Doors.
// Or you could generate it yourself.
validation {
public_key = /etc/eltex-doors/keys/public.pem
}
|
10) В файле /etc/eltex-logging-service/application.conf
server {
port = 9099
}
eventlog {
enabled = true
}
sorm {
enabled = false
dir = /var/log/eltex-logging-service/sorm3/
}
database {
jdbcUrl = "jdbc:mysql://127.0.0.1:3306/eltex_wifi_customer_cab"
username = "javauser"
password = "javapassword"
}
|
11) В файле /etc/eltex-mercury/application.conf
database {
host = 10.10.0.13
port = 3306
name = radius
user = javauser
password = javapassword
readOnly = false
pool {
maxPoolSize = 20
minimumIdle = 1
connectionTimeout = 5000
}
}
jdbc {
properties {
useSSL = false
}
}
sorm3Enabled = false
logging {
host = 10.10.0.13
port = 9099
}
|
12) В файле /etc/eltex-pcrf/hazelcast-local.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2008-2016, Hazelcast, Inc. All Rights Reserved.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
-->
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.6.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group>
<name>dev</name>
</group>
<management-center enabled="false">http://10.10.0.13:8080/mancenter</management-center>
<network>
<port auto-increment="false" port-count="100">5701</port>
<outbound-ports>
<ports>0</ports>
</outbound-ports>
<join>
<multicast enabled="false"/>
<tcp-ip enabled="false"/>
<discovery-strategies>
</discovery-strategies>
</join>
<interfaces enabled="false"/>
<ssl enabled="false"/>
<socket-interceptor enabled="false"/>
<symmetric-encryption enabled="false">
<algorithm>PBEWithMD5AndDES</algorithm>
<!-- salt value to use when generating the secret key -->
<salt>thesalt</salt>
<!-- pass phrase to use when generating the secret key -->
<password>thepass</password>
<!-- iteration count to use when generating the secret key -->
<iteration-count>19</iteration-count>
</symmetric-encryption>
</network>
<partition-group enabled="false"/>
<map name="__vertx.subs">
<backup-count>1</backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">0</max-size>
<eviction-percentage>25</eviction-percentage>
<merge-policy>com.hazelcast.map.merge.LatestUpdateMapMergePolicy</merge-policy>
</map>
<semaphore name="__vertx.*">
<initial-permits>1</initial-permits>
</semaphore>
<!--map name="serviceOnlineMap">
<in-memory-format>OBJECT</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">0</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>100</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map-->
<map name="sessions">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.user.UserSessionStore</class-name>
<write-delay-seconds>1</write-delay-seconds>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="sourceIpNodeIdMap">
<map-store enabled="false"></map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>60</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="subnets">
<map-store enabled="true">
<class-name>org.eltex.softwlc.hazelcast.mysql.SubnetLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlSsid">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.wireless.SsidLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlSsidLink">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.wireless.SsidLinkLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlGeoObj">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.geo.GeoObjectLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlCell">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.cell.CellLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlNas">
<map-store enabled="true">
<class-name>org.eltex.softwlc.hazelcast.mysql.NasLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlTariff">
<map-store enabled="true">
<class-name>org.eltex.softwlc.hazelcast.mysql.TariffLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="shapers">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.shaper.ShaperLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="vrf">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.vrf.VrfLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<serialization>
<portable-version>0</portable-version>
</serialization>
<services enable-defaults="true"/>
<lite-member enabled="false"/>
<properties>
<property name="hazelcast.logging.type">log4j2</property>
<property name="hazelcast.shutdownhook.enabled">false</property>
<property name="hazelcast.jmx">true</property>
</properties>
</hazelcast>
|
13) В файле /etc/eltex-pcrf/hazelcast-cluster.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2008-2016, Hazelcast, Inc. All Rights Reserved.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
-->
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.6.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<management-center enabled="false">http://10.10.0.13:8080/mancenter</management-center>
<!-- load network configuration from another file -->
<import resource="file:///etc/eltex-pcrf/hazelcast-cluster-network.xml"/>
<partition-group enabled="false"/>
<map name="__vertx.subs">
<backup-count>1</backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">0</max-size>
<eviction-percentage>25</eviction-percentage>
<merge-policy>com.hazelcast.map.merge.LatestUpdateMapMergePolicy</merge-policy>
</map>
<semaphore name="__vertx.*">
<initial-permits>1</initial-permits>
</semaphore>
<!--map name="serviceOnlineMap">
<in-memory-format>OBJECT</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">0</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>100</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map-->
<map name="sessions">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.user.UserSessionStore</class-name>
<write-delay-seconds>1</write-delay-seconds>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="sourceIpNodeIdMap">
<map-store enabled="false"></map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>60</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="subnets">
<map-store enabled="true">
<class-name>org.eltex.softwlc.hazelcast.mysql.SubnetLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlSsid">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.wireless.SsidLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlSsidLink">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.wireless.SsidLinkLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlGeoObj">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.geo.GeoObjectLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlCell">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.cell.CellLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlNas">
<map-store enabled="true">
<class-name>org.eltex.softwlc.hazelcast.mysql.NasLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="mysqlTariff">
<map-store enabled="true">
<class-name>org.eltex.softwlc.hazelcast.mysql.TariffLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="shapers">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.shaper.ShaperLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<map name="vrf">
<map-store enabled="true">
<class-name>org.eltex.softwlc.pcrf.hazelcast.vrf.VrfLoader</class-name>
<properties>
<property name="configPath">/etc/eltex-pcrf/eltex-pcrf.json</property>
</properties>
</map-store>
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="FREE_HEAP_PERCENTAGE">10</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>5000</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<serialization>
<portable-version>0</portable-version>
</serialization>
<services enable-defaults="true"/>
<lite-member enabled="false"/>
<properties>
<property name="hazelcast.logging.type">log4j2</property>
<property name="hazelcast.shutdownhook.enabled">false</property>
<property name="hazelcast.jmx">true</property>
</properties>
</hazelcast>
|
Скопируйте лицензии в директорию /usr/lib/eltex-ems/conf/licence/ на обоих серверах. Если используются иные лицензионные файлы, также необходимо скопировать их на второй сервер (список всех лицензионных файлов доступен в следующей статье) |
Для доступа в Личный кабинет необходимо добавить соответствующие записи в таблицу NAS.
Данная таблица находится в БД eltex_auth_service и содержит адреса клиентов, имеющих право отправлять запросы на проведение авторизации пользователей. Если клиент не включен в эту таблицу, то запросы авторизации будут игнорироваться.
Для этого в личном кабинете в разделе Настройки → Серверные адреса добавить :
<virtual_ip> - Виртуальный IP-адрес


| Ключ RADIUS -eltex |
Смена настроек в GUI
Также нужно настроить модули SoftWLC при помощи графического интерфейса.
В разделе Настройки → Интеграция в параметрах PCRF URL, URL NGW-клиента и URL конструктора порталов изменить localhost на виртуальный ip-адрес:

Изменить localhost на виртуальный ip-адрес в разделах настроек:
Системные настройки → Конструктор порталов

Системные настройки → Доступ к NBI

Системные настройки → Доступ к NGW

Системные настройки → Доступ к PCRF

Системные настройки → Доступ к Mercury

В графическом интерфейсе сервера EMS изменить localhost (либо 127.0.0.1) на виртуальный ip-адрес в следующих разделах:
Администрирование → Настройка сервера → Системные модули → pcrf

Администрирование → Настройка сервера → Системные модули → radius
Также, необходимо отключить перезапуск RADIUS
Администрирование → Настройка сервера → Системные модули → softwlc.nbi

Администрирование → Настройка сервера → Системные модули → system

Администрирование → Настройка сервера → Системные модули → tftpserver

Администрирование → Настройка сервера → Системные модули →wifelessCommon
Данный ключ должен совпадать с файлом /etc/eltex-wifi-cab/local_secret на каждом хосте, где установлен eltex-wifi-cab .
