Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 4 Текущий »

Перед обновлением необходимо обязательно сделать резервную копию виртуальной машины на случай необходимости восстановления.

Начиная с версии 1.28 SWLC точки доступа realtek (wep-200l,wep/wop-2l/30l, wep-1l, wop-30ls/30l-ex) необходимо обновить на версию 2.3.0 и выше, точки доступа esdk (wep-3ax) на версию 1.11 и выше

Версия 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                                       

mongo_update.sh

backup_mysql.sh

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


При обновлении остановить репликацию 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


Подключение репозиториев Элтекс

vagrant@ubuntu:~$ sudo echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://archive.eltex-co.ru/wireless softwlc-1.28-xenial main" >> /etc/apt/sources.list.d/eltex.lis
vagrant@ubuntu:~$ sudo echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://archive.eltex-co.ru/wireless radius-1.28-jammy main" >> /etc/apt/sources.list.d/eltex.list

Поиск и установка обновлений пакетов

vagrant@ubuntu:~$ sudo apt-get update

Обновление схемы в БД 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

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

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

apt-get install eltex-radius-nbi
Do you want to generate server certificate? [y/N]: N

Обновление пакета eltex-ems

apt-get install eltex-ems

Обновление пакета eltex-radius

apt-get install eltex-radius

Обновление пакета eltex-ngw

apt-get install eltex-ngw

Обновление пакета eltex-apb

apt-get install eltex-apb

Обновление сервиса ААА (Authentication Authorization and Accounting) для Wi-Fi пользователей, подключающихся при помощи BRAS

apt-get install eltex-pcrf

Обновление сервиса журналирования 'Hotspot' учетных записей

apt-get install eltex-logging-service

Обновление сервиса для управления учетными записями Hotspot-пользователей

apt-get install eltex-mercury

Обновление портала для авторизации клиентов WiFi в схеме 'Hotspot'

apt-get install eltex-portal

Обновление конструктора порталов

apt-get install eltex-portal-constructor

Обновление личного кабинета B2B, интерфейса управления

apt-get install eltex-wifi-cab 

Обновление пакета для интерпретации MAC-адресов в названия вендоров

apt-get install eltex-oui-list

Обновление сервиса удаления сессии пользователя

apt-get install eltex-disconnect-service

Обновление API для управляемого предоставления услуги Wi-Fi.

apt-get install eltex-johnny

Обновление сервиса проверки подлинности пользователя через токены

apt-get install eltex-bruce

Обновление менеджера задач

apt-get install eltex-bruce

Обновление сервиса выполнения задач и создания отчетов по ним

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 в нужный каталог

cp softwlc_<версия_нового_softwlc>_nginx.conf /etc/nginx/conf.d/softwlc.conf

Перезапуск сервисов Nginx и tomcat8

sudo systemctl restart nginx
sudo systemctl restart tomcat8

Проверка настройки модулей SoftWLC

Далее необходимо проверить настройку модулей SoftWLC на работу с контроллером по  virtual ip. 

Если были внесены изменения в конфигурационные файлы необходимо перезапустить соответствующий сервис:

tester@ubuntu:~$ sudo service eltex-<service_name> restart


Файл /etc/eltex-apb/application.conf
# maximum number of outgoing messages in queue for each session
sessionMessageQueueSize = 100

# cache config file path
cacheConfigFile = /etc/eltex-apb/ehcache.xml

# path to the file with permitted hosts
hostsFile = /etc/eltex-apb/hosts.json

pingJob {
  # ping job interval
  interval = 60s

  # timeout waiting for subscribe-request after connecting the access point to the server
  subscribeIdleTimeout = 60s
  # timeout during that the session will stay opened without receiving any message
  messageIdleTimeout = 90s
  # interval of ping to be sent to the websocket session
  pingIdleTimeout = 30s
}

# eltex-mercury connection properties
mercury {
  host = localhost
  port = 6565
  poolSize = 50
}
nbi.client.login=admin
nbi.client.password=password
  • Проверьте и при необходимости измените localhost на <virtual_ip> в строке 24.
Файл /etc/eltex-pcrf/eltex-pcrf.json
{
  "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://localhost/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?replicaSet=<YourClasterName>&waitQueueMultiple=500&connectTimeoutMS=10000&socketTimeoutMS=0&readPreference=secondaryPreferred",
    "db_name": "pcrf"
  },

  "mongo.ott" : {
    "connection_string": "mongodb://localhost:27017/ott?replicaSet=<YourClasterName>&waitQueueMultiple=500&connectTimeoutMS=10000&socketTimeoutMS=0&readPreference=secondaryPreferred",
    "db_name": "ott"
  },

  "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,
    "remote.coa.port" : 3799,
    "executor.size" : 100,
    "log.clean.period.s" : 600,
    "log.store.period" : {
      "period" : 14,
      "unit" : "D"
    }
  },

  "sql.ems" : {
    "url": "jdbc:mysql://localhost/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://localhost/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://localhost/eltex_auth_service?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&useSSL=false",
    "user": "javauser",
    "password": "javapassword",
    "max_pool_size": 4
  },

  "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"
  },

  "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"
  },

  "accounting.options": {
    "use_clickhouse": false,
    "use_mysql": true,
    "batch_interval_ms": 300000,
    "max_queue_load": 100
  }
}
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> во всех строках, кроме 14-ой строки.
  • Проверьте и при необходимости измените 127.0.0.1 на <virtualip> во всех строках, кроме 14-ой строки.


Файл /etc/eltex-portal-constructor/application.conf
login {
    # Количество попыток входа в панель администратора до наступления блокировки
    maxAttemptsLogin = 3
    maxAttemptsIP = 5
    # Количество минут блокировки после достижения максимального числа попыток входа в панель администратора
    blockTime = 5m
}

access {
    // Временно задаём plaintext-secret прямо здесь (HMAC256), потом будем использовать путь в FS до PEM-файла (RSA256)
    secret = "secret"
}

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 = 30s
    }
}

sso {
    enabled = false
    # Must be in double quotes
    version = "1.0"

    rest {
        scheme = http
        host = localhost
        port = 80
        sso_api_path = /apiman-gateway/b2b_test
    }
    auth {
        scheme = http
        host = localhost
        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://localhost: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 = localhost
  port = 9099
}
  • Проверьте и при необходимости измените localhost на <virtualip> в строках 15, 48, 54, 64, 95.


Файл /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"
  • Проверьте и при необходимости измените localhost на <virtualip> в строке 27.


Файл /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://localhost/radius?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/radius?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/eltex_ems?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&noAccessToProcedureBodies=true
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://localhost/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://localhost/eltex_alert?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/eltex_auth_service?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
eltex_auth_service.jdbc.username=javauser
eltex_auth_service.jdbc.password=javapassword
eltex_auth_service.jdbc.maxPoolSize=48
eltex_auth_service.jdbc.inUse=no

# адрес ems-northbound
ems.nbi.host=127.0.0.1
ems.nbi.port=8080
ems.nbi.path=northbound
ems.nbi.protocol=http

# eltex_auth_service
auth.port=22
auth.host=127.0.0.1
auth.username=username
auth.password=password

# freeradius-domain-1
freeradius-domain-1.port=22
freeradius-domain-1.host=192.168.0.1
freeradius-domain-1.username=username
freeradius-domain-1.password=password

# freeradius-domain-2
freeradius-domain-2.port=22
freeradius-domain-2.host=192.168.0.2
freeradius-domain-2.username=username
freeradius-domain-2.password=password

# tomcat url
tomcat.host=127.0.0.1
tomcat.port=8080

# pcrf stuff
pcrf.enabled=true
pcrf.url=http://localhost:7070
pcrf.username=admin
pcrf.password=password

# pcrf mongodb connector
pcrf.mongodb.enabled=true
pcrf.mongodb.uri=mongodb://localhost:27017/pcrf?replicaSet=<YourClusterName>

# wifi-customer-cab mongodb connector
wificab.mongodb.enabled=true
wificab.mongodb.uri=mongodb://localhost:27017/wifi-customer-cab?replicaSet=<YourClusterName>

# Eltex.SORM2.replicator MongoDB 'sorm2' connect
sorm2.mongodb.enabled=false
sorm2.mongodb.uri=mongodb://localhost:27017/sorm2?replicaSet=<YourClusterName>

# wifi-customer-cab request settings
wificab.timeout=90000

# Eltex.SORM2.replicator host to use API
sorm2.enabled=false
sorm2.url=http://localhost:7071
sorm2.username=admin
sorm2.password=password

#It enables records export to SORM3 while editing wifi users
sorm3.enabled=false

# ott mongodb connector
ott.mongodb.enabled=true
ott.mongodb.uri=mongodb://localhost:27017/ott?replicaSet=<YourClusterName>

# metrics
metric.interval.s=900

###########################################################################
##########################DB ELTEX_PORTAL settings#########################
###########################################################################
portal.db.driver=com.mysql.jdbc.Driver
portal.db.url=jdbc:mysql://localhost:3306/ELTEX_PORTAL?max_allowed_packet=32362048&useUnicode=true&characterEncoding=utf8
portal.db.username=javauser
portal.db.password=javapass
  • Проверьте и при необходимости измените 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> во всех строках.


Файл /etc/eltex-ngw/application.conf
// Server configuration
server {
    // server port
    port = 8040
    // number of threads in executor that executes handlers and different gateways
    threads = 50
}

http {
    // Timeout of http connection to the end gateway
    connectionTimeout = 30s
    // Number of maximum simultaneous http connections
    maxConnections = 50
    // Time that connection will be kept alive
    keepAliveTimeout = 5s
    // Whether to check SSL certificate
    checkCert = true
    // HTTP User Agent
    userAgent = eltex-ngw

}

sms {
    // Incoming (user to service) sms config
    incoming.config = "smsc.conf"
    // Outgoing (service to user) sms config
    outgoing.config = "smsc.conf"
}

call {
    // Incoming (user to service) call config
    incoming.config = ""
    // Outgoing (service to user) call config
    outgoing.config = ""
}

email {
    // Outgoing (service to user) email config
    outgoing.config = ""

}

database {
    host = localhost
    port = 3306
    name = eltex_ngw
    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
    }

  • Проверьте и при необходимости измените localhost на virtual_ip в строке 44.


Файл /etc/eltex-radius/local.conf
# Ports on which the server will listen
auth_port=1812
#acct_port=1813
inner_tunnel_port=18121

# MySQL database
db_host="localhost"
db_port=3306
db_login="radius"
db_password="radpass"
db_name="radius"

# MySQL 'wireless' database
wireless_db_host="localhost"
wireless_db_port=3306
wireless_db_login="javauser"
wireless_db_password="javapassword"
wireless_db_name="wireless"

# PCRF
# If you setting pcrf_enabled=0, then you also should enable accounting port listening in "default" server
pcrf_host="127.0.0.1"
pcrf_port=7080
pcrf_enabled=1

# EAP
ca_cert_name="local.pem"
tls_key_password="1234"

# Proxying
proxy_auth=0
proxy_domain_regex="^(.+\.)?enterprise\.root$"
proxy_host="127.0.0.1"
proxy_port=18121
proxy_secret="eltex"

# Ubiquity vendor detection
ubi_vendor_regex="Apple|Ubiquiti"
vendor_group_enabled=1

# Settings of runtime NAS discovery
dynamic_clients=false
dynamic_client_subnet=192.168.0.0/16
dynamic_client_lifetime=3600
dynamic_client_rate_limit=false

# Proxy SSID (for example to eltex-eap-tls) #139679
proxy_ssid_enabled=0
proxy_ssid_value="EAP_TLS"
proxy_ssid_host="127.0.0.1"
proxy_ssid_port=18122
proxy_ssid_secret="eltex"
  • Проверьте и при необходимости измените localhost на <virtualip> во всех строках.
  • Проверьте и при необходимости измените 127.0.0.1 на <virtualip> во всех строках.


Файл /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="mongoaddress">mongodb://localhost:27017/wifi-customer-cab?replicaSet=<YourClusterName></entry>
    <entry key="nbiaddress">http://localhost:8080/axis2/services/RadiusNbiService?wsdl</entry>
    <entry key="nbi.serviceLogin.user">softwlc_service</entry>
    <entry key="nbi.serviceLogin.password">password</entry>
    <entry key="nbi.serviceLogin.requestTimeout.sec">120</entry>

    <!--Bonnie or NBI-->
    <entry key="data.service.type">NBI</entry>
    <entry key="bonnie.service.host">localhost</entry>
    <entry key="bonnie.service.port">9070</entry>

    <!--Bruce-->
    <entry key="bruce.service.host">localhost</entry>
    <entry key="bruce.service.port">8008</entry>

    <!-- Support link  -->
    <entry key="support.page.enabled">false</entry>
    <entry key="support.page.url">http://eltex-co.ru</entry>

    <!-- DPI link  -->
    <entry key="dpi.page.enabled">false</entry>
    <entry key="dpi.page.url">https://filter.wifi.example.org/</entry>

    <!-- SSO Settings -->
    <entry key="sso.enabled">false</entry>
    <entry key="sso.redirectUri">http://localhost:8080/wifi-cab/sso</entry>
    <entry key="sso.clientSecret"></entry>
    <entry key="sso.clientId"></entry>

    <!-- SSO Auth -->
    <entry key="sso.auth.server.protocol">http</entry>
    <entry key="sso.auth.server.address"></entry>
    <entry key="sso.auth.server.port">80</entry>

    <entry key="sso.auth.auth.path">/auth/realms/b2b/protocol/openid-connect/auth</entry>
    <entry key="sso.auth.logout.path">/auth/realms/b2b/protocol/openid-connect/logout</entry>

    <!-- SSO REST -->
    <entry key="sso.rest.server.protocol">http</entry>
    <entry key="sso.rest.server.address"></entry>
    <entry key="sso.rest.server.port">80</entry>
    <entry key="sso.rest.server.timeout.sec">10</entry>
    <entry key="sso.rest.protocol.version">2.0</entry>
    <entry key="sso.rest.username"></entry>
    <entry key="sso.rest.password"></entry>

    <entry key="sso.rest.getToken.path">/apiman-gateway/b2b_test/getToken</entry>
    <entry key="sso.rest.getUserInfo.path">/apiman-gateway/b2b_test/getUserInfo</entry>
    <entry key="sso.rest.addUser.path">/apiman-gateway/b2b_test/addUser</entry>
    <entry key="sso.rest.updateUser.path">/apiman-gateway/b2b_test/updateUser</entry>
    <entry key="sso.rest.delUser.path">/apiman-gateway/b2b_test/delUser</entry>
    <entry key="sso.rest.addUserParam.path">/apiman-gateway/b2b_test/addUserParam</entry>
    <entry key="sso.rest.delUserParam.path">/apiman-gateway/b2b_test/delUserParam</entry>
    <entry key="sso.rest.getUserByName.path">/apiman-gateway/b2b_test/getUserByName</entry>
    <entry key="sso.rest.resetPassword.path">/apiman-gateway/b2b_test/resetPassword</entry>
    <entry key="sso.rest.getUserByParam.path">/apiman-gateway/b2b_test/getUserByParam</entry>
    <entry key="sso.rest.getUserByEmail.path">/apiman-gateway/b2b_test/getUserByEmail</entry

</properties>

  • Проверьте и при необходимости измените mongodb://localhost на mongodb://ip_mongo_primary,ip_mongo_secondary в строке 4 и указать 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> во всех строках.


Файл /usr/lib/eltex-ems/conf/config.txt
# DB Event
poolName1=event
event.jdbc.driver=org.gjt.mm.mysql.Driver
event.jdbc.dbUrl=jdbc:mysql://localhost/eltex_alert?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/eltex_ems?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&noAccessToProcedureBodies=true
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://localhost/eltex_ont?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/Syslog?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/acsmain?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/acscmds?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/acsinf?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/acscache?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/radius?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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://localhost/wireless?useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000
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

Проверьте и при необходимости измените  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

Проверка состояния кластера

{
  "data" : {
    "enabled" : true,
    "state" : "ACTIVE",
    "members" : [ {
      "address" : "ip_server1",
      "local" : true,
      "active" : true
    }, {
      "address" : "ip_server2",
      "local" : false,
      "active" : true
    } ],
    "messagesStats" : {
      "received" : 45157,
      "sent" : 45144
    },
    "mongo" : {
      "available" : false,
      "error" : "not running with --replSet"
    }
  },
  "key" : "PcrfErrorCode.success",
  "message" : "Success",
  "code" : 0,
  "args" : [ ]
}

Восстановление системы в случае неудачного обновления

Если используются виртуальные машины, на которых расположены сервисы SoftWLC и удалось выполнить снапшот системы, то восстановите ВМ из этого снапшота.

Если же ВМ не используются, то выполните ручное восстановление пакетов установленных на сервере, после чего восстановите backup БД Mongo и MySQL. 

Восстановление пакетов в случае неудачного обновления 

Выполнить downgrade пакетов на предыдущую версию.

  1. tester@ubuntu:~$ sudo mv /etc/apt/sources.list.d/eltex.list.backup /etc/apt/sources.list.d/eltex.list
  2. tester@ubuntu:~$ sudo apt update
  3. Переустановить пакеты БД (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

  1. Затем выполнить откат на предыдущую версию пакетов остальных (всех) модулей

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

restore_mysql.sh

mongo_update.sh

  • Нет меток