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

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

Версия 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] http://archive.eltex-co.ru/wireless softwlc-1.24-xenial main" >> /etc/apt/sources.list.d/eltex.list
vagrant@ubuntu:~$ sudo echo "deb [arch=amd64] http://archive.eltex-co.ru/wireless radius-1.24-bionic mai" >> /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

  • Нет меток