В статье описана настройка новой синхронизации между базами данных 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
Выберите ваш сервер отчетов или справочников. В свойствах поставьте галочкуUse Free Listen Port
В разделе настройкеHTTP APIразделеHTTP Ограниченияиз выпадающего списка выберитеHTTP Access
Если вы не знаете, как указать привилегию на объект: HTTP Access — читайте в статьенастройка интерфейсов.
Сохраните настройки перезапустите сервер.
В папкеRK7\base\ появится папкаDBSync, содержащая папкуoutgoing. Вoutgoingсервер справочников будет накапливать резервные копии и журнальные файлы для передачи клиентским приложениям.
Пропишите эту же настройку в остальных приложениях: сервере отчетов, кассовом сервере и кассовых станциях.
[DBSYNC]
UseDBSync=1
DELPHI
Сохраните файлы настроек и запустите приложения.
Проверка синхронизации
Для проверки синхронизации можно просмотреть папку браузером. Для этого откройте ссылку вида:
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
CODE
RestartApp — сервер создаст в логе запись об остановке синхронизации, затем автоматически перезагрузится
[DBSYNC]
StopSyncAction=RestartApp
CODE
ReloadReferences — сервер создаст в логе запись об остановке синхронизации, обновит бэкап и скачает коллекции. Будет сохранена более свежая версия базы 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
DELPHI
Сервер отчетов
Файл настроек сервера отчетов —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; Папка (относительно 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 =
DELPHI
Кассовый сервер
Файл настроек кассового сервера —RKEEPER.INI
[DBSync]; Смотрите описание аналогичной секции параметров сервера отчетов, имея ввиду что база локальных справочников на кассовом сервере тоже берется исключительно с вышестоящего сервера.[CONFIG]; Смотрите описание аналогичной секции параметров сервера отчетов.
DELPHI
Кассовая станция и станция печати
Файл настроек кассовой станции и станции печати —wincash.iniиwinprint.ini
[DBSync]; Смотрите описание аналогичной секции параметров сервера отчётов, но параметры отвечающие за наполнение и чистку папки OutputPath и выполнение бэкапов игнорируются
[CONFIG]; Путь к собственной папке для БД справочников кассовой станции.; Кассовая станция в режиме синхронизации базами тоже будет иметь свою базу данных, и должна понимать, куда её положить.; Если не указать - будет использоваться папка приложения.
BasePath =..; Вместо используемого на серверах параметра DBSyncMoveToOutput, у кассовой станции параметр назван DBSyncRemoveProcessed
; Это режим, когда касса обработанные файлы из папки DBSyncInputPath будет удалять после обработки.; Это полезно, если их в папку DBSyncInputPath перекладывает какой-либо сторонний механизм, персонально для данной кассы.; По умолчанию 1, если DBSyncInputPath=<DataBasePath>+'DBSync\incoming', иначе 0.; DBSyncRemoveProcessed =0; В остальном - смотрите описание аналогичной секции параметров кассового сервера.