Синхронизация справочников базами данных
Введение
В статье описана настройка новой синхронизации между базами данных 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
Сохраните файл и запустите сервер справочников.
- Откройте менеджерскую станцию.
- Перейдите в Настройки > OLAP отчеты > Серверы отчетов
- Выберите ваш сервер отчетов или справочников. В свойствах поставьте галочку Use Free Listen Port
- В разделе настройке HTTP API разделе HTTP Ограничения из выпадающего списка выберите HTTP Access
- Если вы не знаете, как указать привилегию на объект: HTTP Access — читайте в статье настройка интерфейсов.
- Сохраните настройки перезапустите сервер.
В папке 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]. Если не указан, можно узнать, открыв веб-интерфейс — для этого нажмите на значок в трее 2 раза левой кнопкой мыши.
Например, для сервера справочников:
Для примера, откроем ссылку https://127.0.0.1:54318/rk7api/v1/dbsync/ — моего сервера справочников. Вместо порта 54318 — укажите свой.
Появится окно авторизации.
Укажите имя пользователя латиницей с привилегией HTTP_Access и пароль.
Нажмите Вход. Появится список файлов в папке:
Если список появился — синхронизация работает. Дополнительно проверить синхронизацию можно, изменив имя блюда в меню и проверить это на кассовой станции.
Аналогичным образом можно проверять кассовый сервер и сервер отчетов.
Обработка остановки синхронизации, online-обновление баз данных
В секции [DBSYNC] можно записать дополнительные настройки управляющие режимом синхронизации.
Параметр StopSyncAction применяется на кассовом сервере и на сервере отчётов для указания, что им необходимо делать, если будет остановлена синхронизация — например: отключен сервер справочников или вышестоящий транзитный сервер отчётов.
В соответствующих конфигурационных файлах:
- rk7srv.ini — для сервера справочников
- repsserv.ini — для сервера отчетов
В блоке [DBSYNC] необходимо прописать StopSyncAction= и одно из следующих 3 значений:
Nothing — сервер создаст в логе запись об остановке синхронизации
[DBSYNC] StopSyncAction=Nothing
CODERestartApp — сервер создаст в логе запись об остановке синхронизации, затем автоматически перезагрузится
[DBSYNC] StopSyncAction=RestartApp
CODEReloadReferences — сервер создаст в логе запись об остановке синхронизации, обновит бэкап и скачает коллекции. Будет сохранена более свежая версия базы r_keeper 7.
[DBSYNC] StopSyncAction=ReloadReferences
CODE
Описание 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
; Сколько минут после появления более свежего бэкапа ждать отсутствующих журналов
; Этот параметр срабатывает только при использовании внешнего транспорта, при использовании встроенного транспорта наличие пробелов в файлах журнала запрашивается с вышестоящего сервера и синхронизация останавливается через 5 минут
; Затем происходит запрос бэкапа и применение, если возможно.
; NoJournalMinutesStopSync = 5
; После достижения какого количества бэкапов стирать из 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
; NoJournalMinutesStopSync = 5
; 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
; В остальном - смотрите описание аналогичной секции параметров кассового сервера.