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

Я пытаюсь настроить односторонний поток данных от Microsoft SQL Server, работающего на локальном компьютере, к MariaDB, работающему на VPS в облаке.

У локальной машины нет общедоступного статического IP-адреса, но у VPS есть.

Мне удалось их подключить, но данные не распространяются.

Поддерживается ли такая установка (машина без статического общедоступного IP-адреса -> машина со статическим общедоступным IP-адресом)? Или обе машины должны иметь возможность как-то подключаться друг к другу? Я что-то упускаю?

Вот мои конфигурационные файлы MariaDB VPS (корпорация/главный сервер/цель): engine/corp-000.properties

engine.name=corp-000

db.driver=org.mariadb.jdbc.Driver
db.url=jdbc:mariadb://localhost/LKDSDISP
db.user=<username>
db.password=<passwordhere>

registration.url=
sync.url=http://<ip>:31415/sync/corp-000

group.id=corp
external.id=000

job.purge.period.time.ms=7200000
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000

initial.load.create.first=true

MS SQL на локальной машине (исходник) engine/sovetskaya-001.properties

engine.name=sovetskaya-001
db.driver=net.sourceforge.jtds.jdbc.Driver
db.url=jdbc:jtds:sqlserver://localhost:1433/LKDSDISP;useCursors=true;bufferMaxMemory=10240;lobBuffer=5242880

db.user=<username>
db.password=<pwd>

registration.url=http://<mariadb-ip-here>:31415/sync/corp-000

sync.url=http://<local-machine-public-internet-ip-here>:31415/sync/sovetskaya-001
group.id=sovetskaya
external.id=001
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000

initial.load.create.first=true

Моя конфигурация маршрутизатора/узла/триггера выглядит так:

insert into sym_node_group (node_group_id, description) values ('corp', 'Target MariaDB server');

insert into sym_node_group (node_group_id, description) values ('sovetskaya', 'Sovetskaya MS SQL Server source');

insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('sovetskaya', 'corp', 'P');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('corp', 'sovetskaya', 'W');

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)
values('sovetskaya_2_corp', 'sovetskaya', 'corp', 'default',current_timestamp, current_timestamp);
    
insert into sym_channel (channel_id, processing_order, max_batch_size, enabled, description) values ('main_channel', 1, 100000, 1, 'channel for replication');
 
insert into sym_trigger (trigger_id,source_table_name,channel_id,last_update_time,create_time) values ('item','item','main_channel',current_timestamp,current_timestamp);
    
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time) values ('item','sovetskaya_2_corp', 100, current_timestamp, current_timestamp);

Исходная таблица в MS SQL Server называется dbo.item.


person uson1x    schedule 29.09.2020    source источник
comment
этот сценарий должен работать. локальная машина (советская) должна отправлять данные на сервер (корпорацию), и когда есть данные, которые должны быть синхронизированы с сервера, она будет ждать, пока локальная машина доберется до них. если я правильно понимаю, синхронизация данных локально с сервером не работает. есть ли логи на локальной машине?   -  person Boris Pavlović    schedule 30.09.2020
comment
Спасибо, Борис, за подтверждение того, что это должно быть поддержано. Это дало мне импульс копать дальше. Оказалось, что недостающими частями были: включение начальной обратной загрузки и создание таблицы БД вручную. Я опубликую свои выводы в качестве ответа.   -  person uson1x    schedule 02.10.2020


Ответы (1)


Оказалось, что мне не хватило трех ключевых частей:

  1. Создание целевой таблицы базы данных на corp-000 вручную. Думал, что SymmetricDS создаст его автоматически, но это не так.
  2. Включение начальной обратной загрузки в corp-000.properties (auto.reload.reverse=true). На всякий случай я включил его в свойствах целевого и исходного узлов.
  3. Вставка (auto.reload.reverse, true) в таблицу sym_parameter (см. ниже)

Мои окончательные файлы свойств: MariaDB VPS (corp/main server/target): engine/corp-000.properties

engine.name=corp-000

db.driver=org.mariadb.jdbc.Driver
db.url=jdbc:mariadb://localhost/LKDSDISP
db.user=<username>
db.password=<passwordhere>

registration.url=
sync.url=http://<ip>:31415/sync/corp-000

group.id=corp
external.id=000

job.purge.period.time.ms=7200000
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000

initial.load.create.first=true
auto.reload.reverse=true

MS SQL на локальной машине (исходник) engine/sovetskaya-001.properties

engine.name=sovetskaya-001
db.driver=net.sourceforge.jtds.jdbc.Driver
db.url=jdbc:jtds:sqlserver://localhost:1433/LKDSDISP;useCursors=true;bufferMaxMemory=10240;lobBuffer=5242880

db.user=<username>
db.password=<pwd>

registration.url=http://<mariadb-ip-here>:31415/sync/corp-000

sync.url=http://<local-machine-public-internet-ip-here>:31415/sync/sovetskaya-001
group.id=sovetskaya
external.id=001
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000

initial.load.create.first=true
auto.reload.reverse=true

Моя конфигурация маршрутизатора/узла/триггера (запустите ее в консоли базы данных, чтобы добавить необходимые значения конфигурации в таблицы sym_*, которые SymmetricDS использует для синхронизации конфигурации):

insert into sym_node_group (node_group_id, description) values ('corp', 'Target MariaDB server');

insert into sym_node_group (node_group_id, description) values ('sovetskaya', 'Sovetskaya MS SQL Server source');

insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('sovetskaya', 'corp', 'P');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('corp', 'sovetskaya', 'W');

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)
values('sovetskaya_2_corp', 'sovetskaya', 'corp', 'default',current_timestamp, current_timestamp);
    
insert into sym_channel (channel_id, processing_order, max_batch_size, enabled, description) values ('main_channel', 1, 100000, 1, 'channel for replication');
 
insert into sym_trigger (trigger_id,source_table_name,channel_id,last_update_time,create_time) values ('item','item','main_channel',current_timestamp,current_timestamp);
    
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time) values ('item','sovetskaya_2_corp', 100, current_timestamp, current_timestamp);

INSERT INTO sym_parameter (external_id,node_group_id,param_key,param_value) VALUES ('ALL','sovetskaya','auto.reload.reverse','true');

create table item (name varchar(50), count int);

Затем я запускаю bin/sym на corp-000 в качестве сервера:

bin/sym -e corp-000 -S

и на совецком локальном ПК в качестве клиента:

bin\sym -e sovetskaya -C

person uson1x    schedule 02.10.2020