Введение

В статье описана настройка новой синхронизации между базами данных r_keeper_7

Минимальная версия r_keeper_7 для работы синхронизации — 7.6.4.

Описание синхронизации

Схема взаимодействия

Для включения синхронизации, укажите настройку ниже в ini-файле сервера. 

[DBSYNC]
UseDBSync=1

После запуска в этом режиме, сервер справочников создаст рядом с файлом базы rk7.udb файл rk7.udb.SQLite и папку, в которой будет накапливать резервные копии, журнальные файлы и файл настройки фильтрации для передачи клиентским приложениям. 
По умолчанию это папка DBSync\outgoing в папке с базой данных.

Передача клиентским приложениям происходит по сети. Сетевой доступ к этой папке обеспечивается по протоколу WebDAV.  Для работы WebDAV каждым сервером запускается nginx, доступ к которому автоматически прокидывается сквозь HTTP-интерфейс сервера. Если в ini-файлах клиентских приложений не задан статический ReqSourceURL, хост и порт для подключения к нему клиентские приложения по умолчанию выясняют у сервера сами, подключаясь к нему по сетевому имени.

Схема взаимодействия модулей в синхронизации 2.0 представлена ниже:

Настройка синхронизации

Откройте файл настроек сервера справочников — rk7srv.INI и добавьте настройку UseDBSync=1 в секцию [DBSYNC]. Секции по умолчанию нет, так что ее тоже необходимо указать.

;;first line comment to avoid problems with BOM
[REFSERVER]
Server             = RK7TEST
UDBFILE            = ..\..\base\rk7.udb
MainLang           = .\localize\rkeeper7\rkeeper7.ru.xlf
AltLang            = .\localize\rkeeper7\rkeeper7.en.xlf
WorkModules        = ..\..\base\workmods
ErrorLogSize       = 10485760
DisableSMARTVerify = 1
UseNetChecking=1
LicServerIP=l.ucs.ru:60606
Usesql=1

[DBSYNC]
UseDBSync=1

[NETKERN]
Protocols          = tcpsoc.DLL

Сохраните файл и запустите сервер справочников. 

  1. Откройте менеджерскую станцию.
  2. Перейдите в Настройки > OLAP отчеты > Серверы отчетов
  3. Выберите ваш сервер отчетов или справочников. В свойствах поставьте галочку Use Free Listen Port\
  4. В разделе настройке HTTP API разделе HTTP Ограничения выберите HTTP Access
  5. Если вы не знаете, как создать и настроить роль HTTP Access — посмотрите этот раздел.
  6. Сохраните настройки перезапустите сервер.

В папке RK7\base\ появится папка DBSync, содержащая папку outgoing. В outgoing сервер справочников будет накапливать резервные копии и журнальные файлы для передачи клиентским приложениям.

Пропишите эту же настройку в остальных приложениях: сервере отчетов, кассовом сервере и кассовых станциях.

...
[DBSYNC]
UseDBSync=1
...

Сохраните файлы настроек и запустите приложения.

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

https://http_host:http_port/rk7api/v1/dbsync/
  • http_host — IP-адрес желаемого сервера. В нашем случае это 127.0.0.1
  • http_port — порт сервера. Задается в секции [TCPSOC]. Если не указан, можно узнать, открыв веб-интерфейс. Например, для сервера справочников:

Для примера, откроем ссылку https://127.0.0.1:54318/rk7api/v1/dbsync/ — моего сервера справочников. Появится окно авторизации.

Укажите имя пользователя латиницей с правом HTTP_Access и пароль.

Нажмите Вход. Появится список файлов в папке:

Если список появился — синхронизация работает. Дополнительно проверить синхронизацию можно, изменив имя блюда в меню и проверить это на кассовой станции. 

Аналогичным образом можно проверять кассовый сервер и сервер отчетов.

 

Описание ini-файлов

Сервер справочников

Файл настроек сервера справочников — rk7srv.INI

[DBSync]
; Включение ведения второй базы SQLiteCMN для общей (основной) и локальной баз справочников,
; и записи их журнальных файлов и бэкапов для работы механизма синхронизации базами.
; После запуска в этом режиме, сервер справочников сделает рядом с файлом базы rk7.udb файл rk7.udb.SQLite
; и папку, в которой будет накапливать резервные копии, журнальные файлы и файл настройки фильтрации
; для передачи клиентским приложениям. Подробнее о ней см. ниже, в описании параметра OutputPath.
; По умолчанию это папка DBSync\outgoing в папке с базой данных.
; Сетевой доступ к этой папке у нас автоматически обеспечивается по протоколу WebDAV,
; для чего каждым сервером запускается свой nginx, доступ к которому автоматически прокидывается
; сквозь HTTP-интерфейс сервера. Если в ini клиентских приложений им не задан статический ReqSourceURL (см. ниже),
; хост и порт для подключения к нему клиентские приложения по умолчанию выясняют у сервера сами, подключаясь к нему по сетевому имени.
; Для проверки можно подключаться к этой папке, например, web-браузером, по URL вида https://<http host>:<http port>/rk7api/v1/dbsync/
UseDBSync = 1

; Папка, в которую будут попадать созданные файлы бакапов, журналов и файл настройки фильтрации.
; Можно не задавать, так как по умолчанию - это папка DBSync\outgoing\ рядом с файлом собственной базы данных справочников
; сервера справочников. Клиентские приложения берут из неё файлы для обновления своих баз.
; Доступ к ней они получают либо через встроенный WebDAV, либо напрямую как к папке в файловой системе, либо любым другим способом.
; OutputPath = <DataBasePath>DBSync\outgoing

; Через столько транзакций делать бэкап. По умолчанию, через каждые 1000 файлов журнала.
; BackupOnVersionsDelta = 2000

; После накопления какого суммарного размера журнала (в процентах от размера последнего бэкапа) делать новый бэкап.
; По умолчанию, 30% - новый бэкап будет сделан, когда суммарный размер файлов журнала,
; появившихся после создания последнего бэкапа,  достигнет 30% от размера этого последнего бэкапа.
; BackupOnJournalSizeMultiplier = 30

; После достижения какого суммарного объёма файлов журнала стирать из OutputPath самые старые из них.
; Задаётся в процентах от размера последнего сделанного бэкапа, по умолчанию 300.
; То есть, по умолчанию, файлов журнала будет храниться три размера базы.
; BackupMaxTotalSizeMultiplier = 300

; Минимальное время хранения файлов журналов в часах
; По умолчанию журналы хранятся не менее 8 часов
; MinSaveJournalHours = 8

; После достижения какого количества бэкапов стирать из OutputPath самые старые из них.
; По умолчанию хранится два бэкапа - последний и, на всякий случай, предыдущий
; BackupCountLimit = 2

; Для защиты обмена файлами через http можно задать системный пароль, значение параметра должно начинаться с ":"
; ServerLoginInfo = :<Password>

; Включение режима откладки nginx. 1 — включить. По умолчанию — 0.
; NginxDebug = 0

Сервер отчетов

Файл настроек сервера отчетов — repserv.ini

[DBSync]
; Включение получения бэкапов, журналов и файла настроек фильтрации с вышестоящего сервера для синхронизации
; с ним своей основной базы справочников, а так же включение ведения второй базы SQLiteCMN для локальных справочников,
; и записи её журнальных файлов и бэкапов для работы механизма синхронизации базами.
; После запуска в этом режиме, сервер отчётов сделает рядом с файлом базы rk7.udb папку DBSync\outgoing,
; в которой будет накапливать бэкапы, журнальные файлы и файл настроек фильтрации для передачи своим клиентским
; приложениям, как по основной базе справочников, полученные с вышестоящего сервера и применённые к своей базе,
; так и по локальной базе, сформированные при редактировании локальных справочников на этом сервере.
UseDBSync = 1

; По поводу настроек исходящей папки, см. описание аналогичной секции параметров сервера справочников.
; Доступ к папке OutputPath на вышестоящем сервере может быть открыт по протоколу WebDAV и посторонними средствами,
; в этом случае в параметре ReqSourceURL нужно указать URL, откуда запрашивать (Request) данные.
; ReqSourceURL = http://<serverIP>:<WebDAVPort>/rk7api/v1/dbsync
; Если этот параметр заполнен пустым значением, то скачивание по протоколу WebDAV будет отключено.
; Это полезно, если вышестоящий сервер находится на том же компьютере или в локальной сети, и есть возможность
; дать доступ к его исходящей папке напрямую средствами файловой системы.
; ReqSourceURL = 

; Для балансировки нагрузки на сеть и серверы, можно задать сколько секунд должны ждать процессы скачивания по WebDAV
; между запросами к серверу на тему появления нового файла журнала или нового бэкапа. По умолчанию - интервал 2 секунды.
; ReqInterval = 2

; Для балансировки нагрузки на сеть и серверы, в процессе скачивания через WebDAV можно регулировать
; сколько процентов от размера бэкапа должны быть файлы журнала, чтобы на старте работы клиента скачался этот бэкап,
; а не скачивались и накатывались эти файлы журнала.
; По умолчанию задано 100 процентов: если нужные файлы журнал больше бэкапа, скачается бэкап.
; Если указать 200, то файлы журнала должны оказаться в 2 раза больше бэкапа, чтоб было выбрано скачивание бэкапа,
; а если указать 50 - бэкап может быть в 2 раза больше логов, но скачается бэкап.
; Выбирайте значение для этого параметра в зависимости от скорости сети, скорости применения файлов журнала,
; торможения системы при применении большого количества файлов журнала и т.п.
; ReqStartLoadBackupMultiplier = 100

; По умолчанию, при подключении через WebDAV бэкапы для папки OutputPath делаются локально, с оглядкой на настройки
; условий снятия бэкапов и независимо от серверов. Поэтому они получаются не для тех же версий данных, для которых бэкапы
; сняты на других серверах. В случае потребности в синхронности бэкапов или для снижения какой-то из нагрузок, 
; сделана возможность включить режим получения бэкапов скачиванием их с вышестоящего сервера. По умолчанию она выключена.
; ReqToDownloadBackups = 0

; Папка (относительно exe-файла), откуда будут забираться бэкапы и журнальные файлы с ближайшего вышестоящего сервера
; для обновления своей базы. По умолчанию она задаётся равной <DatabasePath>DBSync\incoming
; Если параметр ReqSourceURL (см. выше) не задан пустым, то именно в неё по WebDAV будут скачиваться файлы.
; Если ReqSourceURL задан пустым, то здесь можно указать путь к папке DBSyncOutputPath вышестоящего сервера
; справочников или отчётов, если она находится в той же сети или на том же компьютере, или к её копии, получаемой 
; с удалённого сервера каким-либо сторонним средством.
; InputPath = <RefServerBaseFolder>\DBSync\outgoing

; Папка, в которую будут попадать обработанные файлы бэкапов и журналов. Туда же будут записываться файлы базы локальных справочников.
; Можно не задавать, так как по умолчанию - это папка <DatabasePath>DBSync\outgoing\ рядом с файлом базы данных справочников сервера отчётов.
; OutputPath = <DataBasePath>DBSync\outgoing

; Режим, когда сервер отчётов обработанные файлы из папки InputPath будет удалять после их копирования в OutputPath.
; Это полезно, если в папку InputPath их они скачиваются персонально для данного сервера отчётов.
; Если в качестве входящей папки указана исходящая папка вышестоящего сервера, и она используется несколькими клиентами совместно,
; этот режим не уместен, и за чисткой этой папки следит сам вышестоящий сервер.
; В связи с этим, если InputPath=<DataBasePath>DBSync\incoming то по умолчанию RemoveProcessed = 1, иначе 0.
; RemoveProcessed = 0

; Для обмена файлами через http можно задать системного пользователя с паролем
; Для http сервера:
; ServerLoginInfo = :<Password>
; Для http клиента:
; ReqSourceLoginInfo = [<User>]:<Password>
; <User> - только для внешних WebDAV серверов. Для подключения к серверам RK7 <User> задавать не надо (будет использовано сетевое имя)!

; Те же, что и на сервере справочников
; BackupOnVersionsDelta = 2000
; BackupOnJournalSizeMultiplier = 30
; BackupMaxTotalSizeMultiplier = 300
; MinSaveJournalHours = 8
; BackupCountLimit = 2
; NginxDebug = 0

[CONFIG]
; Тип используемой базы. Механизм рассчитан на работу с SQLite, поэтому нужно указывать SQLiteCMN или SQLiteUCS.
; Должен совпадать с типом базы, указанным на сервере справочников.
; Пока там это указывать невозможно, так что здесь тоже не нужно его задавать.
; DataBaseKind = SQLiteCMN

; Настройки фильтрации не изменились, при желании включается через SyncSchdFile.
; Но при синхронизации базами, настройки фильтрации используются на чтении из базы,
; и поэтому они теперь нужны не только на репе - они должны быть заданы на каждом кассовом сервере и у каждой кассовой станции.
; Поэтому: 
;   Серверы, при включённом UseDBSync, свой фильтр сохраняют в OutputPath для использования клиентами.
;   Клиенты, при включённом UseDBSync, если в параметре SyncSchdFile не задано иного, используют файл настройки фильтрации
;   из папки, заданной параметром InputPath. Туда он должен попадать из OutputPath вышестоящего сервера.
; Коме того, из заданного в этом параметре файла используются только RestFilterIn, skipDeleteIn, а расписание не используется.
; SyncSchdFile = 

Кассовый сервер

Файл настроек кассового сервера — RKEEPER.INI

[DBSync]
; Смотрите описание аналогичной секции параметров сервера отчетов, имея ввиду что база локальных справочников на кассовом сервере тоже берется исключительно с вышестоящего сервера.

[CONFIG]
; Смотрите описание аналогичной секции параметров сервера отчетов.

Кассовая станция и станция печати

Файл настроек кассовой станции и станции печати — wincash.ini и winprint.ini

[DBSync]
; Смотрите описание аналогичной секции параметров сервера отчётов, но параметры отвечающие за наполнение и чистку папки OutputPath и выполнение бэкапов игнорируются
[CONFIG]
; Путь к собственной папке для БД справочников кассовой станции.
; Кассовая станция в режиме синхронизации базами тоже будет иметь свою базу данных, и должна понимать, куда её положить.
; Если не указать - будет использоваться папка приложения.
BasePath = ..

; Вместо используемого на серверах параметра DBSyncMoveToOutput, у кассовой станции параметр назван DBSyncRemoveProcessed 
; Это режим, когда касса обработанные файлы из папки DBSyncInputPath будет удалять после обработки.
; Это полезно, если их в папку DBSyncInputPath перекладывает какой-либо сторонний механизм, персонально для данной кассы.
; По умолчанию 1, если DBSyncInputPath=<DataBasePath> + 'DBSync\incoming', иначе 0.
; DBSyncRemoveProcessed = 0

; В остальном - смотрите описание аналогичной секции параметров кассового сервера.