Git Product home page Git Product logo

process-replication's Introduction

Репликация (Replication)

Процесс для Апостол CRM.

Описание

Процесс репликации подразумевает собой распространение изменений данных с главного сервера (мастер, master), на один или более подчиненных серверов (слейв, slave).

Необходимость в создании собственного механизма репликации данных обусловлена рядом требований к бизнес логике. Ключевым из которых является создание распределённой сети серверов в режиме работы Мастер-Мастер учитывая отсутствие у некоторых Мастер-серверов внешнего статического IP-адреса, а также передача данных по каналам связи с не стабильной работой и низкой пропускной способностью.

Алгоритм работы

Репликация состоит из трех шагов:

  1. Мастер-сервер сохраняет изменения данных в журнале репликации (replication.log).
  2. Слейв-сервер копирует эти данные в журнал ретрансляции (replication.relay) с указанием источника данных (source).
  3. Слейв-сервер воспроизводит изменения из журнала ретрансляции, применяя их к собственным данным.

Установка

Следуйте указаниям по сборке и установке Апостол CRM

Настройка

Мастер-сервер

Любой сервер может выступать в качестве Мастер-сервера, для этого нужно определиться со списком таблиц для репликации:

Список таблиц для репликации

Список доступных для репликации таблиц можно посмотреть с помощью следующего SQL запроса:

SELECT * FROM ReplicationTable ORDER BY schema, name;

Активировать репликацию для таблицы из списка можно с помощью следующего SQL запроса:

SELECT replication.table('schema', 'table', true);

Отключить репликацию для таблицы из списка можно с помощью следующего SQL запроса:

SELECT replication.table('schema', 'table', false);

Задействовать репликацию можно и в два этапа.

На первом этапе нужно определиться со списком таблиц и установить для них признак репликации на втором включить репликацию.

Установить или снять признак репликации на таблице можно с помощью следующего SQL запроса:

--Установить
SELECT replication.set_table('schema', 'table', true);
--Снять
SELECT replication.set_table('schema', 'table', false);

Как применять SQL запрос к списку таблиц в виде массива продемонстрировано в следующем примере:

SELECT replication.set_table('db', t.name, true) FROM (SELECT unnest(ARRAY['table1', 'table2', 'table3', 'tableN']) AS name) AS t;

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

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

SELECT replication.on();

Отключение репликации

Для того, что-бы отключить репликацию на сервере выполнить следующий запрос:

SELECT replication.off();

Слейв-сервер

Слейв-сервер подключается к Мастер-серверу по WebSocket API.

Для активации Слейв-сервера в фале конфигурации необходимо убедиться в наличии следующих настроек:

## Process: Replication
[process/Replication]
## default: false
enable=true

## Source name
#source=localhost

## Replication mode: master, slave
## default: slave
#mode=slave

auth=https://master-server.com
server=wss://master-server.com
provider=system
application=replication
oauth2=replication.json

Значения в параметрах auth и server должны соответствовать DNS-имени или IP-адресу Мастер-сервера.

Файл replication.json должен располагаться в папке oauth2 каталога с настройками Слейв-сервера (как правило это /etc/<project>).

В этом файле указывается client_id и client_secret пользователя (OAuth2-клиента) зарегистрированного на Мастер-сервере. Обратите внимание на то, что бы пользователь был также включен в группу replication на Мастер-сервере.

Пример файла:

{
  "type": "service_account",
  "issuers": ["accounts.master-server.com"],
  "scopes": ["scope"],
  "client_id": "<client_id>",
  "client_secret": "<client_secret>",
  "algorithm": "HS256",
  "auth_uri": "/oauth2/authorize",
  "token_uri": "/oauth2/token"
}

Режимы репликации

Существует три режима репликации:

  • Slave;
  • Proxy;
  • Master.

Slave

По умолчанию Слейв-сервер работает в режиме Слейв-Мастер. Это означает, что данные будут передаваться только от Мастер-сервера к Слейв-серверу.

Proxy

Прокси-сервер выполняет функции Слейв-сервера но при этом дублирует поступающие в журнал ретрансляции (replication.relay) данные в журнал репликации (replication.log). Это позволяет другим серверам подключенным к Прокси-серверу получать данные с Мастер-сервера к которому подключен Прокси-сервер.

Master

Слейв-сервер можно настроить в режим работы Мастер-Мастер. Для этого нужно указать в параметре mode значение master и выполнить настройки репликации описанные выше в разделе Мастер-сервер. В этом режиме оба сервера будут передавать данные друг другу, но при этом только один из них будет подключен к другому.

Здесь важно указать на обоих серверах одни и те же таблицы для репликации, хотя это не обязательное условие.

Можно, конечно, настроить два сервера друг на друга в режиме slave, но лучше придерживаться правила при котором только один сервер подключается к другому. При такой схеме можно выстроить распределённую сеть где множество Слейв-сервер (в режиме master) будут подключается к одному главному Мастер-серверу.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.