Версия SoftWLC определяется версией подавляющего количества пакетов eltex, установленных на ВМ.
Версию пакетов можно узнать при помощи следующих команд:
vagrant@ubuntu:~$ dpkg -l | grep eltex-
Если версия какого-либо установленного пакета не является актуальной (проверить можно тут Stable_versions) обновите его.
Если во время обновления что-то пойдет не так, а сервис нужно будет быстро восстановить, то запускаете клон рабочей ВМ.
Обратите внимание, что обновление контроллера рекомендуется проводить в нерабочее время, так как будет перерыв в работе сервисов.
Подготовка к обновлению
Перед обновлением сделайте дамп БД и желательно сделать snapshot системы для возможного отката в случае неудачного обновления.
Выполните backUP БД и конфигурационных файлов.
Установите пакет pv перед сохранением БД и запуском скрипта.
На вход скрипта требуется подать login/password от БД.
vagrant@ubuntu:~$ sudo apt install pv # установка пакета pv vagrant@ubuntu:~$ sudo chmod +x backup_mysql.sh # добавление прав на исполнение файла скрипта бэкапа mysql vagrant@ubuntu:~$ sudo ./backup_mysql.sh root root # запуск скрипта бэкапа БД mysql пользователя root, с паролем root vagrant@ubuntu:~$ sudo chmod +x mongo_update.sh. # добавление прав на исполнение файла скрипта бэкапа mongo vagrant@ubuntu:~$ sudo ./mongo_update.sh --backup # запуск скрипта бэкапа БД mongo
BackUP базы данных работоспособен только для вашей текущей версии SoftWLC. Условно говоря, backup от SoftWLC версии 1 не подойдет к SoftWLC версии 2.
Во время обновления в консоли Вам будут предложены варианты действий с конфигурационными файлами и базами данных.
Выполнить backup файлов текущих репозиториев
vagrant@ubuntu:~$ sudo cp /etc/apt/sources.list.d/eltex.list /etc/apt/sources.list.d/eltex.list.backup
Обновление SoftWLC
Перед обновлением необходимо остановить сервер rsync:
vagrant@ubuntu:~$ systemctl stop rsync.service
Запускать rsync необходимо после обновления всех нод.
При обновлении остановить репликацию MySQL:
vagrant@ubuntu:~$ mysql -uroot -proot
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
Произвести обновление на всех нодах и, убедившись в отсутствии ошибок, запускать репликацию.
Версия SoftWLC определяется версией подавляющего количества пакетов eltex, установленных на ВМ.
Версию пакетов можно узнать при помощи следующих команд (команда 'tee' сохраняет информацию об установленных пакетах в файл):
vagrant@ubuntu:~$ dpkg -l | grep eltex- | tee eltex-packets.txt
Если версия какого-либо установленного пакета не является актуальной (проверить можно тут Stable_versions) обновите его.
Если у вас стоит SoftWlC 1.18 и ниже, вам сначала необходимо обновиться до промежуточной версии 1.19.
Произвести Миграцию базы данных сервиса notification-gw (базу данных с СМС, пересланными e-mail и т.п.).
Затем с версии 1.19 можно обновляться на актуальную версию контроллера.
Для обновления пакетов до версии 1.19 необходимо использовать репозиторий версии 1.19:
vagrant@ubuntu:~$ echo "deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.19-xenial main" | sudo tee /etc/apt/sources.list.d/eltex.list
Подключение репозиториев Элтекс
Для Ubuntu 18.0.4 - bionic
Заменить содержимое файла /etc/apt/sources.list.d/eltex.list и прописать в него репозитории
deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.29-dependencies-bionic main deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.29-bionic main deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.29-common main
Для остальных ОС. Данный репозиторий нужно выбирать в зависимости от версии ОС (focal/jammy/astra-1.7)
deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.29-dependencies-focal main deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.29-focal main deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.29-common main
Поиск и установка обновлений пакетов
vagrant@ubuntu:~$ sudo apt-get update
Обновление tomcat и open-jdk
Сделать бэкап конфигурации tomcat8 /etc/tomcat8 и /etc/default/tomcat8, скопировав в домашнюю директорию
cp /etc/default/tomcat8 . sudo tar -czvf tomcat_backup.tar.gz /etc/tomcat8
Удалить tomcat8. Tomcat9 установится автоматически.
sudo apt purge tomcat8
Установить openjdk-17-jdk
sudo apt install openjdk-17-jdk
Прописываем использование OpenJDK 17 по умолчанию
sudo update-java-alternatives -s java-1.17.0-openjdk-amd64
Заменить содержимое файла /etc/default/tomcat9 и прописать в нем:
Добавляем ссылку для tomcat
sudo ln -s /usr/share/java/ecj.jar /var/lib/tomcat9/lib
Изменяем порт tomcat с 8080 на 8081
sudo sed -i 's/8080/8081/' /etc/tomcat9/server.xml
В скрипте /usr/libexec/tomcat9/tomcat-start.sh добавить строчку . /etc/default/tomcat9
Перезапустить tomcat9
sudo systemctl restart tomcat9.service
Обновление схемы в БД MySQL для службы 'eltex-ems'
sudo apt-get install eltex-ems-db Enter your MySQL administrator login (default is 'root'): root Enter your MySQL administrator password: mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. Backup databases? (Y/n) n
Возможна ошибка вида : Got error: 1102: Incorrect database name '#mysql50#example.database' when selecting the database
Выполните следующие действия :
#ls -la /var/lib/mysql | grep ^d | egrep '\.' #mv /var/lib/mysql/.directory /root/
Обновление модифицированной схемы в БД MySQL для службы RADIUS
sudo apt-get install eltex-radius-db Enter your MySQL administrator login (default is 'root'): root Enter your MySQL administrator password: mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. Backup databases? (Y/n) n
Обновление БД авторизации сервисов eltex-wifi-cab, eltex-radius-nbi, eltex-portal-constructor
sudo apt-get install eltex-auth-service-db Enter your MySQL administrator login (default is 'root'): root Enter your MySQL administrator password:
Во время обновления системных модулей, будет предложено изменить некоторые конфигурационный файлы.
Перед соглашением/отказом, рекомендуется ознакомиться с изменениями.
Configuration file '/etc/eltex-radius/local.conf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** local.conf (Y/I/N/O/D/Z) [default=N] ? D (n)
Обновление пакета eltex-radius-nbi для стыка SoftWLC с вышестоящими OSS/BSS
sudo apt-get install eltex-radius-nbi Do you want to generate server certificate? [y/N]: N
Обновление пакета eltex-ems
sudo apt-get install eltex-ems Replace /etc/default/tftpd-hpa? (type 'd' to view diff) [y/N/d]: N
Обновление пакета eltex-radius
sudo apt-get install eltex-radius
Обновление пакета eltex-ngw
sudo apt-get install eltex-ngw
Обновление пакета eltex-apb
sudo apt-get install eltex-apb
Обновление сервиса ААА (Authentication Authorization and Accounting) для Wi-Fi пользователей, подключающихся при помощи BRAS
sudo apt-get install eltex-pcrf
Обновление сервиса журналирования 'Hotspot' учетных записей
sudo apt-get install eltex-logging-service
Обновление сервиса для управления учетными записями Hotspot-пользователей
sudo apt-get install eltex-mercury
Обновление портала для авторизации клиентов WiFi в схеме 'Hotspot'
sudo apt-get install eltex-portal
Обновление конструктора порталов
sudo apt-get install eltex-portal-constructor
Обновление личного кабинета B2B, интерфейса управления
sudo apt-get install eltex-wifi-cab
Обновление пакета для интерпретации MAC-адресов в названия вендоров
sudo apt-get install eltex-oui-list
Обновление сервиса удаления сессии пользователя
sudo apt-get install eltex-disconnect-service
Обновление API для управляемого предоставления услуги Wi-Fi.
sudo apt-get install eltex-johnny
Обновление сервиса проверки подлинности пользователя через токены
sudo apt-get install eltex-doors Keys already exist. Do you want to generate new keys? (Y/N) [N]: N
Обновление менеджера задач
sudo apt-get install eltex-bruce
Обновление сервиса выполнения задач и создания отчетов по ним
sudo apt-get install eltex-jobs
Получение конфигурации nginx
wget http://archive.eltex-co.ru/wireless/nginx/conf/softwlc_<версия_нового_softwlc>_nginx.conf -O softwlc_<версия_нового_softwlc>_nginx.conf
Копирование конфигурации nginx в нужный каталог
sudo cp softwlc_<версия_нового_softwlc>_nginx.conf /etc/nginx/conf.d/softwlc.conf
Перезапуск сервисов Nginx и tomcat9
sudo systemctl restart nginx sudo systemctl restart tomcat9
Проверка настройки модулей SoftWLC
Далее необходимо проверить настройку модулей SoftWLC на работу с контроллером по virtual ip.
Если были внесены изменения в конфигурационные файлы необходимо перезапустить соответствующий сервис:
tester@ubuntu:~$ sudo service eltex-<service_name> restart
- Проверьте и при необходимости измените
localhost
на<virtual_ip>
в строке 24.
- Проверьте и при необходимости измените
mongodb://localhost
наmongodb://ip_mongo_primary,ip_mongo_secondary
во всех строках иуказать replicaSet
, который вы настроили в /etc/mongod.conf. Таким образом строка будет выглядеть примерно следующим образом
mongodb://192.168.10.3:27017,192.168.10.4:27017/pcrf?replicaSet=Cluster&waitQueueMultiple=500&connectTimeoutMS=10000&socketTimeoutMS=0&readPreference=secondaryPreferred mongodb://192.168.10.3:27017,192.168.10.4:27017/ott?replicaSet=Cluster&waitQueueMultiple=500&connectTimeoutMS=10000&socketTimeoutMS=0&readPreference=secondaryPreferred
- Проверьте и при необходимости измените
localhost
на<virtualip>
- Проверьте и при необходимости измените
127.0.0.1
на<virtualip>
- Проверьте и при необходимости измените
localhost
на<virtualip>
- Проверьте и при необходимости измените
localhost
на<virtualip>
Проверьте и при необходимости измените
mongodb://localhost
наmongodb://ip_mongo_primary,ip_mongo_secondary
во всех строках иуказать replicaSet
, который вы настроили в /etc/mongod.conf. Таким образом строка будет выглядить примерно следующим образомpcrf.mongodb.uri=mongodb://192.168.10.3:27017,192.168.10.4:27017/pcrf?replicaSet=Cluster wificab.mongodb.uri=mongodb://192.168.10.3:27017,192.168.10.4:27017/wifi-customer-cab?replicaSet=Cluster sorm2.mongodb.uri=mongodb://192.168.10.3:27017,192.168.10.4:27017/sorm2?replicaSet=Cluster ott.mongodb.uri=mongodb://192.168.10.3:27017,192.168.10.4:27017/ott?replicaSet=Cluster
- Проверьте и при необходимости измените
localhost
на<virtualip>
- Проверьте и при необходимости измените
127.0.0.1
на<virtualip>
- Проверьте и при необходимости измените
localhost
наvirtual_ip
в строке 44.
- Проверьте и при необходимости измените
localhost
на<virtualip>
- Проверьте и при необходимости измените
127.0.0.1
на<virtualip>
Проверьте и при необходимости измените
mongodb://localhost
наmongodb://ip_mongo_primary,ip_mongo_secondary
указать replicaSet
, который вы настроили в /etc/mongod.conf. Таким образом строка будет выглядить примерно следующим образом<entry key="mongoaddress">mongodb://192.168.10.3:27017,192.168.10.4:27017/wifi-customer-cab?replicaSet=Cluster</entry>
- Проверьте и при необходимости измените
localhost
на<virtualip>
Проверьте и при необходимости измените localhost
на <virtualip>
в строках 4, 17, 26, 35, 48, 57, 66, 75, 84, 98.
Все вышеуказанные инструкции необходимо произвести на 2-х контроллерах.
Проверка репликации MySQL
Для проверки :
Заходим в консоль mysql
Проверяем, что репликация работает: ( проверять надо на 2-х нодах)
mysql> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: <ip_server1> Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.002455 Read_Master_Log_Pos: 89717415 Relay_Log_File: mysqld-relay-bin.000004 Relay_Log_Pos: 89717561 Relay_Master_Log_File: mysql-bin.002455 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:
Если репликация не работает - необходимо ее восстановить.
Проверка репликации Mongo
Для проверки :
Заходим в консоль mongo
Посмотреть конфигурацию Replica Set можно командой:
replica:PRIMARY> rs.status() { "set" : "replica", "date" : ISODate("2023-01-10T09:30:20.890Z"), "myState" : 1, "term" : NumberLong(24), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1673343020, 1), "t" : NumberLong(24) }, "readConcernMajorityOpTime" : { "ts" : Timestamp(1673343020, 1), "t" : NumberLong(24) }, "appliedOpTime" : { "ts" : Timestamp(1673343020, 1), "t" : NumberLong(24) }, "durableOpTime" : { "ts" : Timestamp(1673343020, 1), "t" : NumberLong(24) } }, "lastStableCheckpointTimestamp" : Timestamp(1673342958, 1), "electionCandidateMetrics" : { "lastElectionReason" : "electionTimeout", "lastElectionDate" : ISODate("2023-01-10T05:31:08.612Z"), "electionTerm" : NumberLong(24), "lastCommittedOpTimeAtElection" : { "ts" : Timestamp(1673328656, 1), "t" : NumberLong(22) }, "lastSeenOpTimeAtElection" : { "ts" : Timestamp(1673328656, 1), "t" : NumberLong(22) }, "numVotesNeeded" : 2, "priorityAtElection" : 2, "electionTimeoutMillis" : NumberLong(10000), "numCatchUpOps" : NumberLong(0), "newTermStartDate" : ISODate("2023-01-10T05:31:08.617Z"), "wMajorityWriteAvailabilityDate" : ISODate("2023-01-10T05:31:09.488Z") }, "electionParticipantMetrics" : { "votedForCandidate" : true, "electionTerm" : NumberLong(22), "lastVoteDate" : ISODate("2023-01-10T04:15:15.939Z"), "electionCandidateMemberId" : 1, "voteReason" : "", "lastAppliedOpTimeAtElection" : { "ts" : Timestamp(1673324064, 1), "t" : NumberLong(17) }, "maxAppliedOpTimeInSet" : { "ts" : Timestamp(1673324064, 1), "t" : NumberLong(17) }, "priorityAtElection" : 2 }, "members" : [ { "_id" : 0, "name" : "100.110.1.7:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 20400, "optime" : { "ts" : Timestamp(1673343020, 1), "t" : NumberLong(24) }, "optimeDate" : ISODate("2023-01-10T09:30:20Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1673328668, 1), "electionDate" : ISODate("2023-01-10T05:31:08Z"), "configVersion" : 75844, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "100.110.0.246:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 14361, "optime" : { "ts" : Timestamp(1673343018, 1), "t" : NumberLong(24) }, "optimeDurable" : { "ts" : Timestamp(1673343018, 1), "t" : NumberLong(24) }, "optimeDate" : ISODate("2023-01-10T09:30:18Z"), "optimeDurableDate" : ISODate("2023-01-10T09:30:18Z"), "lastHeartbeat" : ISODate("2023-01-10T09:30:20.114Z"), "lastHeartbeatRecv" : ISODate("2023-01-10T09:30:19.491Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "100.110.1.7:27017", "syncSourceHost" : "100.110.1.7:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 75844 }, { "_id" : 2, "name" : "100.110.0.206:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 12138, "lastHeartbeat" : ISODate("2023-01-10T09:30:20.704Z"), "lastHeartbeatRecv" : ISODate("2023-01-10T09:30:19.957Z"), "pingMs" : NumberLong(1), "lastHeartbeatMessage" : "", "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "configVersion" : 75844 } ], "ok" : 1, "operationTime" : Timestamp(1673343020, 1), "$clusterTime" : { "clusterTime" : Timestamp(1673343020, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
Для корректной работы необходимо иметь минимум 3 работающих сервера.
При отказе в работе, восстановление будет подразумевать удаление старой ноды и добавление новой.
Добавление/удаление/изменение узлов в Replica Set
Настройку узлов в Replica Set можно выполнять только на PRIMARY
Добавить в Replica Set узел Secondary:
replica_set_name:PRIMARY> rs.add("<ip_server>:27017") { "ok" : 1 }
Если MongoDB отвечает на эту команду ошибкой, возможно, нет связи со вторым узлом (или там прописан bindIp: 127.0.0.1), или там не настроен блок replication. Правильный ответ должен быть таким.
На втором узле приглашение консоли управления MongoDB должно смениться на:
root@swlc01-server:/# mongo replica_set_name:SECONDARY>
Добавить в Replica Set узел Arbiter:
replica_set_name:PRIMARY> rs.add("<ip_server>:27017",true) { "ok" : 1 }
Удалить узел из Replica Set (выполнять на PRIMARY):
replica_set_name:PRIMARY> rs.remove("<ip_server>:27017") { "ok" : 1 }
Для корректировки адреса сервера выполнить следующее:
replica_set_name:PRIMARY> cfg = rs.conf() replica_set_name:PRIMARY> cfg.members[<индекс>].host = "<ip_server>:27017" replica_set_name:PRIMARY> rs.reconfig(cfg)
Проверка работы Eltex-PCRF в режиме кластера
Между серверами PCRF должны быть открыты порты 5701 tcp, 5801 tcp
На серверах в файлах конфигурации /etc/eltex-pcrf/hazelcast-cluster-network.xml нужно проверить адреса сетевых интерфейсов (в строках 5 и 22 в примере - адрес самого сервера, строки 14-15 - список всех членов кластера)
пример, часть конфигурации:
<network> <!-- Write here public address of the node --> <!-- здесь нужно указать собственный адрес сервера --> <public-address>ip_server1</public-address> <port auto-increment="false" port-count="100">5701</port> <outbound-ports> <ports>0</ports> </outbound-ports> <join> <multicast enabled="false"/> <tcp-ip enabled="true"> <!-- Перечислить IP-адреса всех членов кластера (включая этот) --> <member>ip_server1</member> <member>ip_server2</member> </tcp-ip> <discovery-strategies> </discovery-strategies> </join> <interfaces enabled="true"> <!-- здесь нужно указать собственный адрес сервера --> <interface>ip_server1</interface> </interfaces>
В конфигурации /etc/eltex-pcrf/eltex-pcrf.json
нужно разрешить запуск кластера:
"cluster.enable" : true,
Перезапустить Eltex-PCRF командой
root@swlc01-server:/# service eltex-pcrf restart
Проверка состояния кластера
|
Восстановление системы в случае неудачного обновления
Если используются виртуальные машины, на которых расположены сервисы SoftWLC и удалось выполнить снапшот системы, то восстановите ВМ из этого снапшота.
Если же ВМ не используются, то выполните ручное восстановление пакетов установленных на сервере, после чего восстановите backup БД Mongo и MySQL.
Восстановление пакетов в случае неудачного обновления
Выполнить downgrade пакетов на предыдущую версию.
- tester@ubuntu:~$ sudo mv /etc/apt/sources.list.d/eltex.list.backup /etc/apt/sources.list.d/eltex.list
- tester@ubuntu:~$ sudo apt update
- Переустановить пакеты БД (eltex-auth-service-db, eltex-ems-db, eltex-radius-db и т.д.)
apt install eltex-ems-db
apt install eltex-auth-service-db
apt install eltex-radius-db
- Затем выполнить откат на предыдущую версию пакетов остальных (всех) модулей
apt install eltex-ems
apt install eltex-auth-service
apt install eltex-radius
Восстановление БД в случае неудачного обновления
Восстанавливаем последний backup БД Mysql и Mongo БД.
Конфигурационный файл mongod.conf положите в домашний каталог откуда будете запускать скрипт mongo_update.sh
sudo ./mongo_update.sh --restore-config sudo ./mongo_update.sh --restore sudo chmod +x restore_mysql.sh sudo ./restore_mysql.sh root root