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

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

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

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


В случае, если ранее было настроено резервирование на версии 1.27/1.28/1.29 то при обновлении на версию 1.30 необходимо следовать данной инструкции.

Подготовка к обновлению 

Все дальнейшие действия необходимо произвести на 2х нодах

Подготовка БД

Перед началом обновления необходимо проверить статус всех сервисов и доступность mongo по replicaSet

mongo --host replicaSet/<ip-адрес_master>:27017,<ip-адрес_slave>:27017

Проверка количества разрешенных коннектов к БД .

vagrant@ubuntu:~$ mysql -uroot -proot
mysql> show variables like "%max_connections%"; (Если меньше 500, то выполнить следующую команду)
mysql> SET GLOBAL max_connections = 500;

При обновлении необходимо остановить репликацию MySQL:

vagrant@ubuntu:~$ mysql -uroot -proot
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

Для обновления необходимо выдать права на доступ к БД. Для этого перейдите в БД и выполните следующие команды : 

ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'root';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password;
create user 'root'@'<ip-адрес_master>' identified by 'root';
ALTER USER 'root'@'<ip-адрес_master>' IDENTIFIED WITH mysql_native_password;
ALTER USER 'root'@'<ip-адрес_master>' IDENTIFIED BY 'root';
create user 'root'@'<ip-адрес_slave>' identified by 'root';
ALTER USER 'root'@'<ip-адрес_slave>' IDENTIFIED WITH mysql_native_password;
ALTER USER 'root'@'<ip-адрес_slave>' IDENTIFIED BY 'root';
flush privileges;

Перед обновлением сделайте дамп БД и желательно сделать 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   

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

 Перед началом обновления необходимо проверить статус всех сервисов, для этого выполните команду :

vagrant@ubuntu:~$ sudo systemctl list-units |grep eltex
  eltex-airtune.service                                                                        loaded active running   LSB: Eltex AirTune Server
  eltex-apb.service                                                                            loaded active running   Eltex Access Point Binder service
  eltex-bruce.service                                                                          loaded active running   Scheduling service
  eltex-disconnect-service.service                                                             loaded active running   Eltex Disconnect service
  eltex-doors.service                                                                          loaded active running   AP Monitoring service
  eltex-ems.service                                                                            loaded active running   Eltex EMS
  eltex-jobs.service                                                                           loaded active running   Eltex executor service
  eltex-johnny.service                                                                         loaded active running   Eltex johnny — a service to rule them all
  eltex-logging-service.service                                                                loaded active running   Eltex logging service
  eltex-mercury.service                                                                        loaded active running   Eltex Mercury — hotspot user management service
  eltex-ngw.service                                                                            loaded active running   Eltex Notification Gateway
  eltex-pcrf.service                                                                           loaded active running   Eltex PCRF Service
  eltex-portal-constructor.service                                                             loaded active running   Eltex Portal Constructor
  eltex-portal.service                                                                         loaded active running   Eltex Portal
  eltex-radius-nbi.service                                                                     loaded active running   Eltex-Radius-Northbound — SoftWLC SOAP/XML Northbound
  eltex-radius.service                                                                         loaded active running   Eltex FreeRADIUS multi-protocol policy server
  eltex-wids.service                                                                           loaded active running   Eltex WIDS/WIPS
  eltex-wifi-cab.service                                                                       loaded active running   Wi-Fi Customer Cab Service

Проверка работоспособности Nbi 

в поисковой строке введите запрос : 

http://<ip-softwlc>:8080/axis2/services/RadiusNbiService?wsdl

На страничке браузера должно отобразиться следующее:


Необходимо проверить открытые порты, для этого запустите скрипт с проверкой портов : 

vagrant@ubuntu:~$ sudo ./eltex-softwlc-helper-latest.sh --test-ports
Test ports mode

Start TCP/UDP port checking for all services..
Checking tcp port '3306' for application 'mysqld' (Server MySQL) - passed
Checking tcp port '27017' for application 'mongo' (MongoDB server) - passed
Checking tcp port '9310' for application 'java' (EMS-server Applet API ) - passed
Checking udp port '162' for application 'java' (EMS server SNMP API) - passed
Checking tcp port '8081' for application 'java' (tomcat (NBI, EMS applet)) - passed
Checking tcp port '8083' for application 'java' (WiFi Customer Cab (Jetty)) - passed
Checking tcp port '8080' for application 'nginx' (Nginx proxy server) - passed
Checking tcp port '9000' for application 'java' (Captive Portal, Portal Group) - passed
Checking tcp port '9001' for application 'java' (Portal Constructor, Portal Group) - passed
Checking tcp port '8040' for application 'java' (eltex-notification-gw, Portal Group) - passed
Checking tcp port '8090' for application 'java' (eltex-apb, Portal Group) - passed
Checking tcp port '6565' for application 'java' (eltex-mercury service, Portal Group) - passed
Checking tcp port '9097' for application 'java' (eltex-doors service HTTP API, Portal Group) - passed
Checking tcp port '7070' for application 'java' (PCRF monitoring API) - passed
Checking tcp port '7080' for application 'java' (PCRF RADIUS API) - passed
Checking tcp port '5701' for application 'java' (PCRF Hazelcast API) - passed
Checking udp port '1813' for application 'java' (PCRF, RADIUS accounting API) - passed
Checking tcp port '8008' for application 'java' (eltex-bruce service HTTPS API) - passed
Checking tcp port '9696' for application 'java' (eltex-jobs service HTTPS API) - passed
Checking udp port '1812' for application 'eltex-radius' (RADIUS API) - passed
Checking tcp port '9095' for application 'eltex-wids' (eltex-wids-service API) - passed
Checking tcp port '9099' for application 'java' (eltex-logging-service, Portal Group) - passed
Checking tcp port '9096' for application 'java' (eltex-disconnect-service HTTP API, Portal Group) - passed
Checking tcp port '9100' for application 'java' (eltex-johnny service HTTP API, Portal Group) - passed
Checking tcp port '8082' for application 'eltex-airtune' (eltex-airtune API) - passed
Checking tcp port '8089' for application 'eltex-airtune' (eltex-airtune API) - passed
Checking tcp port '8099' for application 'eltex-airtune' (eltex-airtune API) - passed
Checking udp port '514' for application 'syslog' (Linux syslog server) - passed
Checking udp port '69' for application 'tftp' (Linux TFTP server) - passed

> Main core ports are tested successfully!

На действующем slave будут недоступны порты 162 и 9310. Это связано с тем, что на slave выключен сервис  eltex-ems

Перед обновлением необходимо остановить сервер rsync:

vagrant@ubuntu:~$ systemctl stop rsync.service

Запускать rsync необходимо после обновления всех нод.

Обновление 

В случае, если резервирование настроено по схеме 1 + 1 (используются две однохостовые установки), обновление можно провести, используя скрипт-установщик, доступный по ссылке http://archive.eltex-co.ru/wireless/help/softwlc-1.31/eltex-softwlc-helper-mos_1.31.sh

Обновлять ноды необходимо поочередно. Начинать обновление рекомендовано с Slave.

Также загрузить скрипт можно напрямую на сервер, используя утилиту wget

wget http://archive.eltex-co.ru/wireless/help/softwlc-1.31/eltex-softwlc-helper-mos_1.31.sh

Далее, необходимо выдать права на испольнение данного файла и запустить его с ключем --update-eltex-packages

sudo chmod +x eltex-softwlc-helper-mos_1.31.sh
sudo ./eltex-softwlc-helper-mos_1.31.sh --update-eltex-packages

 В случае, если установка выполнена более чем на 2х хостах, необходимо вручную добавить репозиторий на хост и обновить пакет

# Добавление новых репозиториев для ubuntu 22.04
wget -q -O - http://archive.eltex-co.ru/wireless/repo.gpg.key| gpg --yes --dearmor -o /etc/apt/keyrings/eltex.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://archive.eltex-co.ru/wireless softwlc-1.30-common main" >>/etc/apt/sources.list.d/eltex.list
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://archive.eltex-co.ru/wireless softwlc-1.30-jammy main" >>/etc/apt/sources.list.d/eltex.list
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/eltex.gpg] http://archive.eltex-co.ru/wireless softwlc-1.30-dependencies-jammy main" >>/etc/apt/sources.list.d/eltex.list
sudo apt update
# Установка необходимых пакетов на хост
sudo apt install eltex-<название пакета>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Добавление новых репозиториев для Ubuntu 18.04, Ubuntu 20.04, Astra 1.7
wget -O - http://archive.eltex-co.ru/wireless/repo.gpg.key | apt-key add -
echo "deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.30-common main" >>/etc/apt/sources.list.d/eltex.list
echo "deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.30-jammy main" >>/etc/apt/sources.list.d/eltex.list
echo "deb [arch=amd64] http://archive.eltex-co.ru/wireless softwlc-1.30-dependencies-jammy main" >>/etc/apt/sources.list.d/eltex.list
sudo apt update
# Установка необходимых пакетов на хост
sudo apt install eltex-<название пакета>

После того, как установились все пакеты, убедимся, что все обновилось успешно, сервисы

sudo systemctl list-units | grep eltex

Необходимо, чтобы все сервисы были в состоянии loaded service active.

Во время обновления системных модулей, будет предложено изменить некоторые конфигурационный файлы.

Перед соглашением/отказом, рекомендуется ознакомиться с изменениями.

Configuration file '/etc/eltex-radius-nbi/radius_nbi_config.txt'
 ==> 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.
*** radius_nbi_config.txt (Y/I/N/O/D/Z) [default=N] ? y
Configuration file '/etc/eltex-pcrf/eltex-pcrf.json'
==> 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.
*** eltex-pcrf.json (Y/I/N/O/D/Z) [default=N] ? y


Скопируйте лицензии в директорию /usr/lib/eltex-ems/conf/licence/ на обоих серверах. 

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

При настройке резервирования в процессе эксплуатации (то есть если в MySQL на действующем сервере уже имеются данные), необходимо перенести эти данные на второй сервер. Это можно сделать при помощи утилиты mysqldump.

Для этого, необходимо на первом сервере заблокировать таблицы, снять дамп, разблокировать таблицы и скопировать получившийся файл на второй сервер:

sudo mysql -uroot -proot -e "FLUSH TABLES WITH READ LOCK;"
sudo mysqldump -uroot -proot --databases ELTEX_PORTAL eltex_alert eltex_auth_service eltex_bruce eltex_doors eltex_ems eltex_jobs eltex_ngw eltex_ont radius wireless eltex_pcrf  eltex_wids eltex_wifi_customer_cab > mysqldump_master.sql
sudo mysql -uroot -proot -e "UNLOCK TABLES;"

После необходимо перенести дамп на slave ноду (нода которую обновили) 

sudo scp mysqldump_master.sql <username>@<ip_server2>:/home/<username>/
Далее необходимо сменить мастерство:(запускать необходимо на master ноде) 
 sudo systemctl restart keepalived.service

Приступить к обновлению 2-ой ноды аналогично 1-ой.

Тюнинг настройки сервисов

После обновлением необходимо включить сервер rsync:

vagrant@ubuntu:~$ systemctl start rsync.service

Запускать rsync необходимо после обновления всех нод.

На обоих серверах в файле /etc/keepalived/keepalived.conf необходимо добавить следующие параметры: 
state BACKUP изменить на state MASTER

/etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
 
   script_user root
   enable_script_security 
}

vrrp_script check_network {
    script "/etc/keepalived/check_ping.sh"
    interval 5
    weight 50
    fall 3
    rise 3
    init_fail
    user root
}

vrrp_instance VI_SWLC {
    state MASTER
    interface <interface>
    virtual_router_id 1
    track_script {
        check_network
    }
    track_interface {
        <interface> weight 50
    }
    priority 150
    advert_int 1
    nopreempt
	# Uncomment and comment "nopreempt" if preemption needed
	#preempt_delay 180
    authentication {
        auth_type PASS
        auth_pass eltex
    }
    virtual_ipaddress {
        <virtual_ip> dev <interface> label <interface>:1
    }
 
    notify_master "/etc/keepalived/keep_notify.sh master"
    notify_backup "/etc/keepalived/keep_notify.sh backup"
    notify_fault "/etc/keepalived/keep_notify.sh fault"
 
    unicast_peer {
        <ip_адрес_другого_сервера>
    }
}

В файле keep_notify.sh удалить / закомментировать блок кода так как mongo не используется с версии 1.30

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
}

Удалить или закомментировать строки service tomcat8 restart или service tomcat9 restart и строку service mongod restart
Сюда же добавить строку по перезапуску сервиса  eltex-wifi-cab

service eltex-wifi-cab.service restart

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

/etc/keepalived/keep_notify.sh
#!/bin/bash

MYSQL_USER="<mysql_user>"
MYSQL_PASSWORD="<mysql_password>"


if ! lockfile-create --use-pid -r 5 /tmp/keep.mode.lock; then
    echo "Unable to lock"
    echo "Unable to lock" > /tmp/keep.mode.lock.fail
    exit 0
fi

case "$1" in
    master)
    #  ems_reload_all
    echo "MASTER" > /tmp/keep.mode
  
    service eltex-ems restart
    service eltex-ngw restart
    service eltex-wifi-cab.service restart
  ;;
 backup)
    echo "BACKUP" > /tmp/keep.mode
    service eltex-ems stop
    service eltex-ngw stop	
    service eltex-wifi-cab.service restart
	
 ;;
 fault)
    echo "FAULT" > /tmp/keep.mode
 ;;
 *)
    echo "Usage: $0 {master|backup|fault}"
    exit 1
esac

lockfile-remove /tmp/keep.mode.lock;

exit 0

Внесите изменение в файл /etc/keepalived/check_ping.sh  поменяв строчку ping -q -c5 $HOST >> /var/log/check_ping.log на ping -c 1 -W 1 $HOST >> /var/log/check_ping.log

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

/etc/keepalived/keep_notify.sh
#!/bin/bash

# host to ping
# there - default gw
HOST=<default_gw_ip>
# -q quiet
# -c nb of pings to perform
 ping -c 1 -W 1 $HOST >> /var/log/check_ping.log

# $? var keeping result of execution
# previous command
if [ $? -eq 0 ]
    then
        echo `date +"%T %F"` "OK gw reachable"
        EXIT_CODE=0
    else
        echo `date +"%T %F"` "ERROR gw unreacheble!"
        EXIT_CODE=1
fi

exit $EXIT_CODE

Включение репликации

Перенос дампа данных и перенос на второй сервер

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

sudo mysql -uroot -proot -e "FLUSH TABLES WITH READ LOCK;"
sudo mysqldump -uroot -proot --databases ELTEX_PORTAL eltex_alert eltex_auth_service eltex_bruce eltex_doors eltex_ems eltex_jobs eltex_ngw eltex_ont radius wireless eltex_pcrf  eltex_wids eltex_wifi_customer_cab eltex_sorm2 eltex_ott eltex_jerry> mysqldump_master.sql
sudo mysql -uroot -proot -e "UNLOCK TABLES;"
sudo scp mysqldump_master.sql <username>@<ip_server2>:/home/<username>/

Затем, развернуть dump на втором сервере:

sudo mysql -uroot -proot < /home/<username>/mysqldump_master.sql

Включение репликации БД

Настроить и запустить репликацию второго сервера с первого (выполнить действия на втором сервере):

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='<ip_server1>', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_USE_GTID=slave_pos;
START SLAVE;

Проверить состояние репликации:

MariaDB [(none)]> show slave status \G;
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 100.110.3.91
                   Master_User: replication
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000013
           Read_Master_Log_Pos: 3332141
                Relay_Log_File: localhost-relay-bin.000062
                 Relay_Log_Pos: 320
         Relay_Master_Log_File: mysql-bin.000013
              Slave_IO_Running: No
             Slave_SQL_Running: No
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 3332141
               Relay_Log_Space: 0
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: NULL
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 0
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State:
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)

Выведем состояние параметров gtid:

MariaDB [(none)]> show global variables like '%gtid%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| gtid_binlog_pos         | 0-2-4217  |
| gtid_binlog_state       | 0-2-4217  |
| gtid_cleanup_batch_size | 64        |
| gtid_current_pos        | 0-1-13665 |
| gtid_domain_id          | 0         |
| gtid_ignore_duplicates  | OFF       |
| gtid_pos_auto_engines   |           |
| gtid_slave_pos          | 0-1-13665 |
| gtid_strict_mode        | ON        |
| wsrep_gtid_domain_id    | 0         |
| wsrep_gtid_mode         | OFF       |
+-------------------------+-----------+
11 rows in set (0.001 sec)


Структура значения GTID выглядит следующим образом:

X-Y-Z:

X - номер домена кластера;

Y - server_id ноды кластера;

Z - gjpbwbz 


Проверить состояние репликации:

vaMariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.152.12
                   Master_User: replication
                   Master_Port: 5890
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000003
           Read_Master_Log_Pos: 2682485
                Relay_Log_File: mysqld-relay-bin.000002
                 Relay_Log_Pos: 2674921
         Relay_Master_Log_File: mysql-bin.000003
              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:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 2682485
               Relay_Log_Space: 2675231
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: Slave_Pos
                   Gtid_IO_Pos: 0-1-13677
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 740
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 12844
1 row in set (0.001 sec)

Проверка обновления

Для проверки перехода сервисов на новую версию, выполните команду: 

vagrant@ubuntu:~$ dpkg -l | grep eltex 

При переходе на версию 1.31 версии пакетов должны быть следующие:

ii  eltex-airtune                    1.6.0.34                                amd64        Eltex AirTune service
ii  eltex-apb                        1.31-625                                all          Eltex Access Point Binder
ii  eltex-auth-service-db            1.31-939                                all          Database configuration for Eltex authentication service
ii  eltex-bruce                      1.31-482                                all          Eltex microservice for task scheduling
ii  eltex-disconnect-service         1.31-237                                all          Eltex Disconnect Service - a service to disconnect SoftWLC Hotspot users
ii  eltex-doors                      1.31-484                                all          Eltex microservice gateway subsytem
ii  eltex-ems                        3.35-13183                              all          Eltex.EMS
ii  eltex-ems-db                     3.35-13183                              all          Eltex.EMS database
ii  eltex-jobs                       1.31-479                                all          Eltex microservice for task execution
ii  eltex-johnny                     1.31-277                                all          Eltex johnny — a service to rule them all
ii  eltex-logging-service            1.31-267                                all          Eltex Logging Service
ii  eltex-mercury                    1.31-323                                all          Eltex Mercury - hotspot user management service
ii  eltex-ngw                        1.31-832                                all          Eltex Notification Gateway
ii  eltex-oui-list                   1.31-939                                all          Eltex OUI list
ii  eltex-pcrf                       1.31-3217                               all          Eltex.PCRF
ii  eltex-portal                     1.31-4344                               all          Eltex Captive Portal
ii  eltex-portal-constructor         1.31-4344                               all          Eltex Captive Portal Administration Console
ii  eltex-radius                     1.31-939                                amd64        FreeRADIUS with modifications by Eltex to use in SoftWLC
ii  eltex-radius-db                  1.31-939                                all          Database configuration for Eltex RADIUS server
ii  eltex-radius-nbi                 1.31-3633                               all          Eltex-Radius-Northbound
ii  eltex-wids-service               1.31-697                                all          Eltex.Wids-Service
ii  eltex-wifi-cab                   1.31-3113                               all          Eltex Wi-Fi customer cabinet

Для проверки корректного обновления можно выполнить все действия перечисленные в пункте Проверка состояния сервисов . 

При проверке работоспособности репликации важно обратить внимание на следующие пункты : 

  1. При выводе состояния слейва  MariaDB [(none)]> show slave status\G на двух серверах, вы должны видеть :


    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes


  2. При выполнение каких-либо действий в ЕМС, должны появляться новые транзакции на двух нодах.
     MariaDB [(none)]> show slave status\G 


    Gtid_IO_Pos: 0-1-13677
  3. Попробуйте выключить один из серверов. Подождать пару минут и включите. Убедитесь, что транзакции подтянулись.

Настройка ProxySQL

ProxySQL – ПО с открытым исходным кодом (GPL license) для проксирования SQL-запросов. Представляет собой высокопроизводительный инструмент, который можно применять для HA.

Поддерживает MySQL и его форки (Percona, Maria & etc).

Установка

Скачиваем файл с официального сайта: https://proxysql.com/documentation/installing-proxysql/ для Debian 10 и устанавливаем:

wget https://github.com/sysown/proxysql/releases/download/v2.5.2/proxysql_2.5.2-debian10_amd64.deb
sudo dpkg -i proxysql_2.5.2-debian10_amd64.deb

В БД mariadb добавляем пользователя:

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%';

Редактируем файл настроек /etc/proxysql.cnf и приводим его к виду (тестовый стенд):

proxysql.cnf
#file proxysql.cfg

########################################################################################
# This config file is parsed using libconfig , and its grammar is described in:
# http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-File-Grammar
# Grammar is also copied at the end of this file
########################################################################################

########################################################################################
# IMPORTANT INFORMATION REGARDING THIS CONFIGURATION FILE:
########################################################################################
# On startup, ProxySQL reads its config file (if present) to determine its datadir.
# What happens next depends on if the database file (disk) is present in the defined
# datadir (i.e. "/var/lib/proxysql/proxysql.db").
#
# If the database file is found, ProxySQL initializes its in-memory configuration from
# the persisted on-disk database. So, disk configuration gets loaded into memory and
# then propagated towards the runtime configuration.
#
# If the database file is not found and a config file exists, the config file is parsed
# and its content is loaded into the in-memory database, to then be both saved on-disk
# database and loaded at runtime.
#
# IMPORTANT: If a database file is found, the config file is NOT parsed. In this case
#            ProxySQL initializes its in-memory configuration from the persisted on-disk
#            database ONLY. In other words, the configuration found in the proxysql.cnf
#            file is only used to initial the on-disk database read on the first startup.
#
# In order to FORCE a re-initialise of the on-disk database from the configuration file
# the ProxySQL service should be started with "systemctl start proxysql-initial".
#
########################################################################################

datadir="/var/lib/proxysql"
errorlog="/var/log/proxysql/proxysql.log"

admin_variables=
{
	admin_credentials="admin:admin"
#	mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
	mysql_ifaces="0.0.0.0:6032" # порт для подключения к БД
#	refresh_interval=2000
#	debug=true
}

mysql_variables=
{
	threads=4
	max_connections=2048
	default_query_delay=0
	default_query_timeout=36000000
	have_compress=true
	poll_timeout=2000
#	interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
	interfaces="0.0.0.0:6033" #порт для взаимодействия proxysql с сервисами выставили 6033 (стандартный порт MySQL)
    default_schema="information_schema"
	stacksize=1048576
	server_version="5.5.30"
	connect_timeout_server=3000
# make sure to configure monitor username and password
# https://github.com/sysown/proxysql/wiki/Global-variables#mysql-monitor_username-mysql-monitor_password
	monitor_username="monitor"
	monitor_password="monitor"
	monitor_history=600000
	monitor_connect_interval=60000
	monitor_ping_interval=10000
	monitor_read_only_interval=1500
	monitor_read_only_timeout=500
	ping_interval_server_msec=120000
	ping_timeout_server=500
	commands_stats=true
	sessions_sort=true
	connect_retries_on_failure=10
}


# defines all the MySQL servers
mysql_servers =
(
	{
		address = "<IP MASTER>" # 
		port = 5890 #перенастроили порт для взаимодействия с mysql 
		hostgroup = 1
		maxconnections = 500
        max_replication_lag = 0
        weight = 1000
    },
	{
		address = "<IP SLAVE>"
		port = 5890 #перенастроили порт для взаимодействия с mysql
        hostgroup = 2
		maxconnections = 500
        max_replication_lag = 0
        weight = 500
    }
)


# defines all the MySQL users
mysql_users:
(
	{
		    username = "root"
		    password = "root"
		    default_hostgroup = 0
	        active = 1
	        max_connections = 500
	        fast_forward = 1
	},
	{
        	username = "javauser"
        	password = "javapassword"
        	default_hostgroup = 1
        	active = 1
        	max_connections = 500
        	fast_forward = 1
	},
	{
		    username = "radius"
	        password = "radpass"
        	default_hostgroup = 1
        	active = 1
        	max_connections = 500
        	fast_forward = 1
	}
)



#defines MySQL Query Rules
mysql_query_rules:
(
#	{
#		rule_id=1
#		active=1
#		match_pattern="^SELECT .* FOR UPDATE$"
#		destination_hostgroup=0
#		apply=1
#	},
#	{
#		rule_id=2
#		active=1
#		match_pattern="^SELECT"
#		destination_hostgroup=1
#		apply=1
#	}
)

scheduler=
(
  {
    id=1
    active=1
    interval_ms=10000
    filename="/var/lib/proxysql/read_only_switch.sh"
    arg1="NULL"
    arg2="NULL"
    arg3="NULL"
    arg4="NULL"
    arg5="NULL"
    comment="Script to switch read_only_status"
  }
)


mysql_replication_hostgroups=
(
        {
                writer_hostgroup=1
                reader_hostgroup=2
                comment="SWLC REPLICA"
       }
)


Основные настройки.

Исправляем вывод файла логов на более обычную директорию:

errorlog="/var/log/proxysql/proxysql.log"

Добавляем секцию с информацией о серверах MariaDB:

mysql_servers =
(
	{
		address = "<IP MASTER>" # 
		port = 5890 #перенастроили порт для взаимодействия с mysql 
		hostgroup = 1
		maxconnections = 500
        max_replication_lag = 0
        weight = 1000
    },
	{
		address = "<IP SLAVE>"
		port = 5890 #перенастроили порт для взаимодействия с mysql
        hostgroup = 2
		maxconnections = 500
        max_replication_lag = 0
        weight = 500
    }
)

добавляем информацию о пользователях БД:

mysql_users:
(
	{
		    username = "root"
		    password = "root"
		    default_hostgroup = 0
	        active = 1
	        max_connections = 500
	        fast_forward = 1
	},
	{
        	username = "javauser"
        	password = "javapassword"
        	default_hostgroup = 1
        	active = 1
        	max_connections = 500
        	fast_forward = 1
	},
	{
		    username = "radius"
	        password = "radpass"
        	default_hostgroup = 1
        	active = 1
        	max_connections = 500
        	fast_forward = 1
	}
)

Добавляем информацию о группах 

mysql_replication_hostgroups=
(
        {
                writer_hostgroup=1
                reader_hostgroup=2
                comment="SWLC REPLICA"
       }
)

Добавляем информацию о scheduler:

scheduler=
(
  {
    id=1
    active=1
    interval_ms=10000
    filename="/var/lib/proxysql/read_only_switch.sh"
    arg1="NULL"
    arg2="NULL"
    arg3="NULL"
    arg4="NULL"
    arg5="NULL"
    comment="Script to switch read_only_status"
  }
)

 В директорию /var/lib/proxysql/ необходимо добавить следующий скрипт read_only_switch.sh:

#!/bin/bash
MASTER_HOST="<ip_server_master>"
SLAVE_HOST="<ip_server_slave>"
MYSQL_USER="javauser"
MYSQL_PASS="javapassword"

# Проверяем доступность мастера
if mysqladmin -h $MASTER_HOST -u $MYSQL_USER -p$MYSQL_PASS ping; then
    # Мастер доступен, убедимся, что он в read-write
    mysql -h $MASTER_HOST -u $MYSQL_USER -p$MYSQL_PASS -e "SET GLOBAL read_only = 0;"
    # Установить слейв в read-only, если он был временно переключен
    mysql -h $SLAVE_HOST -u $MYSQL_USER -p$MYSQL_PASS -e "SET GLOBAL read_only = 1;"
else
    # Если мастер недоступен, переключаем слейв в read-write
    mysql -h $SLAVE_HOST -u $MYSQL_USER -p$MYSQL_PASS -e "SET GLOBAL read_only = 0;"
fi


Рестартуем сервис:

systemctl restart proxysql


 Здесь необходимо обратить особое внимание: если существует файл «proxysql.db» (в каталоге /var/lib/proxysql), служба ProxySQL будет читать и анализировать файл proxysql.cnf только при первом запуске; Далее файл proxysql.cnf не будет прочитан во время сеанса запуска! Если вы хотите, чтобы конфигурация в файле proxysql.cnf вступила в силу после перезапуска службы proxysql (то есть, если вы хотите, чтобы proxysql читал и анализировал файл конфигурации proxysql.cnf при перезапуске), вам необходимо удалить  в директории /var/lib/ сначала файл базы данных proxysql/proxysql.db, а затем перезапустить службу proxysql. Это эквивалентно инициализации и запуску службы proxysql, снова будет создан чистый файл базы данных proxysql.db (если ранее были настроены правила маршрутизации, связанные с proxysql, и т. д., он будет удален). Официальная рекомендация — использовать метод интерфейса администратора! (То есть используйте клиент mysql для подключения к порту управления на машине proxysql)

Подключение к административной консоли (используются дефолтные настройки /etc/proxysql.cnf):

mysql -uadmin -padmin -P 6032 -h 127.0.0.1 --prompt='Admin>'


Для отображения статусов запущенных серверов mysql воспользуемся командой :

select * from runtime_mysql_servers;


Далее, необходимо  изменить порт взаимодействия SoftWLC с Proxysql:

update global_variables set variable_value = '0.0.0.0:3306' where variable_name = 'mysql-interfaces';
SAVE MYSQL VARIABLES TO DISK;


В настройках mariadb НА ОБОИХ СЕРВЕРАХ  /etc/mysql/mariadb.cnf необходимо в разделе [client-server] изменить port на указанный ранее, в примере - 5890

[client-server]
# Port or socket location where to connect
port = 5890

После этого необходимо перезагрузить  ОБА СЕРВЕРА mariadb и proxysql

sudo service mariadb restart
sudo service proxysql restart

Далее, необходимо перезагрузить репликацию mariadb:

# На слейве
stop slave;
change master to  master_host='<IP MASTER>',  master_port=5890,  master_user='replication',  master_password='password',  master_use_gtid=slave_pos;
start slave;

# На мастере
stop slave;
change master to  master_host='<IP SLAVE>',  master_port=5890,  master_user='replication',  master_password='password',  master_use_gtid=slave_pos;
start slave;


Смена версии mysql, которую отдает proxysql

Заходим в административную консоль, изменяем переменную:

update global_variables set variable_value='5.7.19' where variable_name='mysql-server_version';

Загружаем изменения в оперативную конфигурацию proxysql:

load mysql variables to runtime;

Сохраняем изменения:

save mysql variables to disk;

Проверяем значение переменной:

show variables like 'mysql-server_version';

Добавление/удаление/отключение сервера

Чтобы добавить новый сервер, его необходимо определить, вставив новую строку в mysql_serversтаблицу.
Обратите внимание, что в таблице есть несколько столбцов со значениями по умолчанию.

Следующее добавляет новый бэкэнд со всей конфигурацией по умолчанию:

Admin> SELECT * FROM mysql_servers;
Empty set (0.00 sec)

Admin> INSERT INTO mysql_servers (hostname) VALUES ('172.16.0.1');
Query OK, 1 row affected (0.00 sec)

Admin> SELECT * FROM mysql_servers\G
*************************** 1. row ***************************
       hostgroup_id: 0
           hostname: 172.16.0.1
               port: 3306
          gtid_port: 0
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 1000
max_replication_lag: 0
            use_ssl: 0
     max_latency_ms: 0
            comment: 
1 row in set (0.00 sec)


Чтобы корректно отключить внутренний сервер, необходимо изменить его statusна OFFLINE_SOFT. Активные транзакции и соединения по-прежнему будут использоваться, но новый трафик на узел отправляться не будет.

Admin> SELECT hostgroup_id,hostname,status FROM mysql_servers;
+--------------+------------+--------+
| hostgroup_id | hostname   | status |
+--------------+------------+--------+
| 0            | 172.16.0.1 | ONLINE |
| 1            | 172.16.0.2 | ONLINE |
| 1            | 172.16.0.3 | ONLINE |
| 1            | 172.16.0.1 | ONLINE |
+--------------+------------+--------+
4 rows in set (0.00 sec)

Admin> UPDATE mysql_servers SET status='OFFLINE_SOFT' WHERE hostname='172.16.0.2';
Query OK, 1 row affected (0.00 sec)

Admin> SELECT hostgroup_id,hostname,status FROM mysql_servers;
+--------------+------------+--------------+
| hostgroup_id | hostname   | status       |
+--------------+------------+--------------+
| 0            | 172.16.0.1 | ONLINE       |
| 1            | 172.16.0.2 | OFFLINE_SOFT |
| 1            | 172.16.0.3 | ONLINE       |
| 1            | 172.16.0.1 | ONLINE       |
+--------------+------------+--------------+
4 rows in set (0.00 sec)

Можно полностью удалить внутренний сервер, удалив его из mysql_serversтаблицы.

Внутренне удаление бэкэнда или его настройка OFFLINE_HARDобрабатываются одинаково. При LOAD MYSQL SERVERS TO RUNTIMEвыполнении Hostgroup_Manager обнаружит, что внутренний сервер был удален, и пометит его как OFFLINE_HARD.

Мониторинг

SHOW TABLES FROM monitor;

SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 4;
SELECT * FROM monitor.mysql_server_galera_log ORDER BY time_start_us DESC LIMIT 4;
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 4;
  • Нет меток