Сервер:Построение двух-серверной отказоустойчивой системы - NEW

Материал из ЛОКАРУС
(Различия между версиями)
Перейти к: навигация, поиск
(Настройка схемы)
 
(не показаны 12 промежуточных версий 1 участника)
Строка 1: Строка 1:
 
== Описание общей схемы ==
 
== Описание общей схемы ==
Система состоит трёх основных элементов: шлюза и двух серверов. На шлюзе нужные порты пробрасываются на один из серверов - он является в схеме главным. В случае его отказа, второй сервер дает команду шлюзу перебросить порты на него и становится главным. Когда поднимается первый сервер, то он, видя, что роль главного у него забрали, становится второстепенным (можно указать ему насильно забирать роль главного на себя при помощи опции в конфиге - '''WATCHDOG_ROUTER_MASTER=true'''). Потоки данных ходят так: от прибора к шлюзу, затем в главный сервер и там дублируются на второстепенный. Благодаря этому на обоих серверах находится актуальная БД.
+
Система состоит трёх основных элементов: шлюза и двух серверов. На шлюзе нужные порты пробрасываются на один из серверов - он является в схеме главным. В случае его отказа, второй сервер дает команду шлюзу перебросить порты на него и становится главным. Когда поднимается первый сервер, то он, видя, что роль главного у него забрали, становится второстепенным (можно указать ему насильно забирать роль главного на себя при помощи опции в конфиге - '''WATCHDOG_ROUTER_MASTER'''=true). Потоки данных ходят так: от прибора к шлюзу, затем в главный сервер и там дублируются на второстепенный. Благодаря этому на обоих серверах поддерживаются актуальные версии БД.
  
 
=== Настройка ===
 
=== Настройка ===
Строка 24: Строка 24:
  
 
Если видите дату, то все хорошо.
 
Если видите дату, то все хорошо.
 +
Это нужно для того, чтобы давать команды шлюзу переключать проброс портов с одного сервера на другой.
 +
 +
=== Настройка зеркалирования ===
 +
 +
Стартуем на обоих серверах службу '''locarus-server''' и идем в веб-админку.
 +
Настройки -> Обмен данными
 +
 +
 +
* Включаем '''MIRROR_ENABLE'''
 +
* В строке '''MIRROR''' пишем IP-адрес соседнего сервера.
 +
* '''MIRROR_MODE''' -> ALERT
 +
* '''MIRROR_DEPTH''' -> Указываем нужное кол-во дней
 +
 +
Дополнительно на первом сервере, если необходимо, устанавливаем переменную в конфиге - '''WATCHDOG_ROUTER_MASTER'''=true
 +
 +
На каждом сервере прописываем команду для роутера в переменную '''WATCHDOG_ROUTER_URL'''.
 +
 +
Пример:
 +
  WATCHDOG_ROUTER_URL=ssh -p 38 root@192.168.0.1 '/etc/firewall-crash'
 +
 +
Логика работы такая: когда сервер стартует, то он смотрит на опцию '''WATCHDOG_ROUTER_MASTER''', если она включена, то он дает команду, которая записана в '''WATCHDOG_ROUTER_URL'''. Если отключена, то грузится в штатном режиме.
 +
 +
Во время работы, если второй сервер видит, что первый недоступен, то он становится главным (этот момент обозначается в логе  '''locarus-server.log''' строкой со словом '''MASTER''') и дает команду которая у него хранится в '''WATCHDOG_ROUTER_URL''' роутеру для переключения данных на себя.
 +
 +
Как только первый начинает работать, то он при загрузке проверяет у себя опцию '''WATCHDOG_ROUTER_MASTER'''
 +
* если она включена, то он дает команду роутеру, которая у него хранится в '''WATCHDOG_ROUTER_URL''' на мереключение потока данных на него и становится главным
 +
* если она выключена, то он никаких команд роутеру не дает и просто становится подчиненным. Это будет видно в логе '''locarus-server.log''' (строка со словом '''SLAVE''').
 +
 +
== Принудительное зеркалирование ==
 +
 +
Начиная с версии 3.1.207.1907 появилась возможность принудительно провести полное зеркалирование данных с одного сервера на другой. Для этого необходимо провести настройку серверов как для простого зеркалирования.
 +
Зеркалирование выполняется командой:
 +
 +
  http://xxx.xxx.xxx.xxx:8091/do.remirror?from=2015-03-15T00:00:00.000Z&to=2015-03-17T00:00:00.000Z&host=yyy.yyy.yyy.yyy:1333
 +
 +
 +
где
 +
 +
  xxx.xxx.xxx.xxx                - IP адрес главного сервера,
 +
  yyy.yyy.yyy.yyy                - IP адрес ведомого сервера,
 +
  from=2015-03-15T00:00:00.000Z  - дата, с которой начинать чтение данных из БД
 +
  to=2015-03-17T00:00:00.000Z    - дата, до которой читать из БД
 +
 +
 +
Можно задать принудительное зеркалирование за определённую дату всех приборов конкретного клиента. Для этого в запрос надо добавить еще один параметр - cid=<номер клиента>. Номер клиента можно узнать в общем списке всех клиентов в вэб-мониторе Локарус-сервера.
 +
 +
Пример запроса:
 +
 +
  http://xxx.xxx.xxx.xxx:8091/do.remirror?from=2015-03-15T00:00:00.000Z&to=2015-03-17T00:00:00.000Z&host=yyy.yyy.yyy.yyy:1333&cid=35
 +
 +
Процесс можно наблюдать в лог файлах mirror. И в веб-мониторе главного сервера. Там появиться надпись о том, что происходит зеркалирование и сколько приборов осталось обработать.
 +
 +
 +
Также в конфиг сервера добавлены дополнительные ключи для более тонкой настройки:
 +
* Ключ SERVER_SENDER_TRIES - количество попыток отсылки данных при сбоях связи для Mirror и Remirror. По умолчанию 128
 +
* Ключ SERVER_SENDER_THREADS_LIMIT - ограничение на количество одновременно работающих тредов передачи данных для Mirror и Remirror. По умолчанию 32
 +
 +
== Locarus Informer ==
 +
В такой схеме ЛИ надо настраивать на работу с внешним IP-адресом шлюза. Тогда при отказе одного из Локарус-серверов, клиенты смогут получать треки со второго. Т.О. для них тоже будет реализована отказоустойчивая схема.
 +
 +
--[[Участник:Yura|Юра]] 13:17, 22 октября 2014 (YEKT)

Текущая версия на 12:18, 22 апреля 2015

Содержание

Описание общей схемы

Система состоит трёх основных элементов: шлюза и двух серверов. На шлюзе нужные порты пробрасываются на один из серверов - он является в схеме главным. В случае его отказа, второй сервер дает команду шлюзу перебросить порты на него и становится главным. Когда поднимается первый сервер, то он, видя, что роль главного у него забрали, становится второстепенным (можно указать ему насильно забирать роль главного на себя при помощи опции в конфиге - WATCHDOG_ROUTER_MASTER=true). Потоки данных ходят так: от прибора к шлюзу, затем в главный сервер и там дублируются на второстепенный. Благодаря этому на обоих серверах поддерживаются актуальные версии БД.

Настройка

Пример настройки на серверах под управлением Linux. Для Windows систем настройка будет похожая. Основное отличие - передача команды шлюзу для переброса портов.

Настраиваем оба сервера по статье: Сервер:Установка на Ubuntu Server 14.04.1

Создание SSH-ключей для отправки команд шлюзу без паролей

На обоих серверах (вместо user пишем логин текущего пользователя):

 sudo ssh-keygen -t rsa
 sudo cp -r /root/.ssh ~
 sudo chown -R user:user ~
 sudo chmod 600 ~/.ssh/*
 ssh-copy-id -p 38 root@<тут IP-адрес шлюза>
 sudo bash
 ssh -p '38' 'root@<и тут IP-адрес шлюза>'

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

 ssh -p 38 root@<тут IP-адрес шлюза> '<тут любая команда, которая должна выполняться на шлюзе>'
 ssh -p 38 root@192.168.0.1 'date'

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

Настройка зеркалирования

Стартуем на обоих серверах службу locarus-server и идем в веб-админку. Настройки -> Обмен данными


  • Включаем MIRROR_ENABLE
  • В строке MIRROR пишем IP-адрес соседнего сервера.
  • MIRROR_MODE -> ALERT
  • MIRROR_DEPTH -> Указываем нужное кол-во дней

Дополнительно на первом сервере, если необходимо, устанавливаем переменную в конфиге - WATCHDOG_ROUTER_MASTER=true

На каждом сервере прописываем команду для роутера в переменную WATCHDOG_ROUTER_URL.

Пример:

 WATCHDOG_ROUTER_URL=ssh -p 38 root@192.168.0.1 '/etc/firewall-crash'

Логика работы такая: когда сервер стартует, то он смотрит на опцию WATCHDOG_ROUTER_MASTER, если она включена, то он дает команду, которая записана в WATCHDOG_ROUTER_URL. Если отключена, то грузится в штатном режиме.

Во время работы, если второй сервер видит, что первый недоступен, то он становится главным (этот момент обозначается в логе locarus-server.log строкой со словом MASTER) и дает команду которая у него хранится в WATCHDOG_ROUTER_URL роутеру для переключения данных на себя.

Как только первый начинает работать, то он при загрузке проверяет у себя опцию WATCHDOG_ROUTER_MASTER

  • если она включена, то он дает команду роутеру, которая у него хранится в WATCHDOG_ROUTER_URL на мереключение потока данных на него и становится главным
  • если она выключена, то он никаких команд роутеру не дает и просто становится подчиненным. Это будет видно в логе locarus-server.log (строка со словом SLAVE).

Принудительное зеркалирование

Начиная с версии 3.1.207.1907 появилась возможность принудительно провести полное зеркалирование данных с одного сервера на другой. Для этого необходимо провести настройку серверов как для простого зеркалирования. Зеркалирование выполняется командой:

 http://xxx.xxx.xxx.xxx:8091/do.remirror?from=2015-03-15T00:00:00.000Z&to=2015-03-17T00:00:00.000Z&host=yyy.yyy.yyy.yyy:1333


где

 xxx.xxx.xxx.xxx                - IP адрес главного сервера,
 yyy.yyy.yyy.yyy                - IP адрес ведомого сервера,
 from=2015-03-15T00:00:00.000Z  - дата, с которой начинать чтение данных из БД
 to=2015-03-17T00:00:00.000Z    - дата, до которой читать из БД


Можно задать принудительное зеркалирование за определённую дату всех приборов конкретного клиента. Для этого в запрос надо добавить еще один параметр - cid=<номер клиента>. Номер клиента можно узнать в общем списке всех клиентов в вэб-мониторе Локарус-сервера.

Пример запроса:

 http://xxx.xxx.xxx.xxx:8091/do.remirror?from=2015-03-15T00:00:00.000Z&to=2015-03-17T00:00:00.000Z&host=yyy.yyy.yyy.yyy:1333&cid=35

Процесс можно наблюдать в лог файлах mirror. И в веб-мониторе главного сервера. Там появиться надпись о том, что происходит зеркалирование и сколько приборов осталось обработать.


Также в конфиг сервера добавлены дополнительные ключи для более тонкой настройки:

  • Ключ SERVER_SENDER_TRIES - количество попыток отсылки данных при сбоях связи для Mirror и Remirror. По умолчанию 128
  • Ключ SERVER_SENDER_THREADS_LIMIT - ограничение на количество одновременно работающих тредов передачи данных для Mirror и Remirror. По умолчанию 32

Locarus Informer

В такой схеме ЛИ надо настраивать на работу с внешним IP-адресом шлюза. Тогда при отказе одного из Локарус-серверов, клиенты смогут получать треки со второго. Т.О. для них тоже будет реализована отказоустойчивая схема.

--Юра 13:17, 22 октября 2014 (YEKT)

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты