...
Конфигурация keepalived состоит из следующих файлов:
Файл | Описание |
---|---|
/etc/keepalived/keepalived.conf | главный файл конфигурации сервиса |
/etc/keepalived/check_ping.sh | скрипт проверки состояния службы EMS |
/etc/keepalived/keep_notify.sh | скрипт, который выполняется при смене состояния (при переходе в MASTER, BACKUP, FAULT) |
/etc/keepalived/mongo_switch.js | скрипт перевода члена replicaSet MongoDB в состояние, соответствующее состоянию VRRP |
Основной файл конфигурации
...
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#!/bin/bash MYSQL_USER="<mysql_user>" MYSQL_PASSWORD="<mysql_password>" mongo_set_role() { local role="$1" if [[ "$(which mongo)" ]]; then mongo --quiet --eval "var role=\"$role\"" admin /etc/keepalived/mongo_switch.js # Uncomment if using mongodb auth #mongo -u<username> -p<password> --quiet --eval "var role=\"$role\"" admin /etc/keepalived/mongo_switch.js fi } if ! lockfile-create --use-pid -r 5 /tmp/keep.mode.lock; then echo "Unable to lock" echo "Unable to lock" > /tmp/keep.mode.lock.fail exit 0 fi case "$1" in master) # ems_reload_all echo "MASTER" > /tmp/keep.mode mongo_set_role master service eltex-ems restart service tomcat7tomcat8 restart service eltex-ngw restart # рестарт слейва MySQL чтобы при восстановлении связи - сразу получить изменения, # а не ждать периодического heartbeat от второго сервера mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "stop slave" mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "start slave" ;; backup) echo "BACKUP" > /tmp/keep.mode mongo_set_role slave service mongodbmongod restart service eltex-ems stop service tomcat7tomcat8 stop service eltex-ngw stop mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "stop slave" mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "start slave" ;; fault) echo "FAULT" > /tmp/keep.mode mongo_set_role slave service mongodbmongod restart ;; *) echo "Usage: $0 {master|backup|fault}" exit 1 esac lockfile-remove /tmp/keep.mode.lock; exit 0 |
...
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{ "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://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>
во всех строках, кроме 14-ой строки.
- Изменить
127.0.0.1
на<virtualip>
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
auth-service { host = localhost port = 21812 timeout = 10s retries = 3 secret = eltex # pap, chap, mschapv2 protocol = pap } 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 = 100.110.0.212localhost port = 9099 } |
- Изменить
localhost
на<virtualip>
в строках 2, 25, 58, 64, 74,100105.
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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" |
...
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
# 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. Таким образом строка будет выглядить примерно следующим образомБлок кода theme RDark 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
в строке 1944.
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
# 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" |
...
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<?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<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> |
Изменить
4.mongodb://localhost
наmongodb://ip_mongo_primary,ip_mongo_secondary
4 и
указать replicaSet
, который вы настроили в /etc/mongod.conf. Таким образом строка будет выглядить примерно следующим образомБлок кода theme RDark <entry key="mongoaddress">mongodb://192.168.10.3:27017,192.168.10.4:27017/wifi-customer-cab?replicaSet=Cluster</entry>
- Изменить
localhost
на<virtualip>
...
Администрирование → Настройка сервера → Системные модули → softwlc.nbi
Администрирование → Настройка сервера → Системные модули → system
Администрирование → Настройка сервера → Системные модули → tftpserver
Администрирование → Настройка сервера → Системные модули →wifelessCommon
Данный ключ должен совпадать с файлом /etc/eltex-wifi-cab/local_secret на каждом хосте, где установлен eltex-wifi-cab .
Если вы используете модуль netconf, то там так же необходимо актуализировать информацию
Администрирование → Настройка сервера → Системные модули → netconf