I'm new to SymmetricDS. It's bit confusing for me how to configure this setup on SymmetricDS. Our requirement is like this.
We have 4 MSSQL databases (DB1, DB2, DB3 and DB4). All 4 should be pointed to one target db (DB5). So I created 4 source nodes for each source databases (DB1, DB2, DB3 and DB4) and one target node for the DB5 in the same SymmetricDS installation. All the changed data and initial load in 4 source nodes should be routed to DB5 only, not the other way round. Hope this requirement is clear.
Could you please help me on configurations of the setup? I need to clarify below doubts I have. Could you please assist me on the following points if those are the correct/recommended way of configuring this requirement?
I created 4 properties files in engines folder for each source db and one for the target db. All 5 engines are in the same SymmetricDS installation.
I kept one source db as the root node and added its sync url to the registration url of other 3 source nodes properties files.
I executed create-sym-tables command for each node and started the node using sudo ./bin/sym_service.bat start but it failed. Then sym.bat worked.
Updated sym_node_group, sym_node_group_link, sym_router, sym_channel for each source dbs.
Updated tables on SYM_TRIGGER and SYM_TRIGGER_ROUTER and executed initial load for each node. sudo ./bin/symadmin.bat --engine corp-<dbname> reload-node 001
Then restarted the service using, sudo ./bin/sym.bat
Only the data in DB1 node has been routed to the target. Shouldn't it route all 4 source db data to the target db? Am I missing any configuration or step?
Thank you.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The Target needs to be the registration node. Put the Sync url of the Target node in all of the source node's engine files. This will allow them to all see the target. You can optionally set Reverse initial load to true, so once those Sources register with the Target, they will send an initial load automatically to the Target without having to be manually triggered. You can use the documentation found in the link below to look into Reverse initial load more: https://www.symmetricds.org/doc/3.14/html/user-guide.html
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The reload-node command is between a node and the root node -- forward load from root to node, or reverse load from node to root. You can send loads between a source and target node using the sym_table_reload_request table. We can work on updating the reload-node command to allow a source and target node.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I created corp-000 as the target node and store-<dbname> as the source nodes. I added the sync.url of the target node as the registration.url of source nodes engine files as you have suggested. Then, </dbname>
Executed create-sym-tables for each engine.
Set rev_initial_load_enabled=1 in SYM_NODE_SECURITY in each source db.
Updated sym_channel, sym_trigger and sym_trigger_router for each source db.
Inserted following 4 records into SYM_TABLE_RELOAD_REQUEST table in target db for each source nodes.
I noticed that all the source nodes has sent the create table scripts for their tables. But I see only one source db triggered the initial load for its table.
I have added following parameters to all the source engine files.
I don't think step 3 is needed (updating sym_channel, sym_trigger, sym_trigger_router on each source db) because each store node will register with corp-000 and receive a copy of all SYM tables. You don't need step 4 with sym_table_reload_request because you are using the reverse initial load (sym_node_security.rev_initial_load_enabled=1).
Other that that, the steps sound correct. Look in the logs/symmetric.log to see if there are any errors. If you can post logs, we can take a look.
👍
1
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I attached the symmetric.log herewith.
Steps done :
1. Executed create-sym-tables for each engine.
2. Set rev_initial_load_enabled=1 for each node on SYM_NODE_SECURITY in source db.
3. Updated sym_channel, sym_trigger and sym_trigger_router in source db.
4. Then started the service.
I'm new to SymmetricDS. It's bit confusing for me how to configure this setup on SymmetricDS. Our requirement is like this.
We have 4 MSSQL databases (DB1, DB2, DB3 and DB4). All 4 should be pointed to one target db (DB5). So I created 4 source nodes for each source databases (DB1, DB2, DB3 and DB4) and one target node for the DB5 in the same SymmetricDS installation. All the changed data and initial load in 4 source nodes should be routed to DB5 only, not the other way round. Hope this requirement is clear.
Could you please help me on configurations of the setup? I need to clarify below doubts I have. Could you please assist me on the following points if those are the correct/recommended way of configuring this requirement?
I created 4 properties files in engines folder for each source db and one for the target db. All 5 engines are in the same SymmetricDS installation.
I kept one source db as the root node and added its sync url to the registration url of other 3 source nodes properties files.
I executed
create-sym-tables
command for each node and started the node usingsudo ./bin/sym_service.bat start
but it failed. Thensym.bat
worked.Updated sym_node_group, sym_node_group_link, sym_router, sym_channel for each source dbs.
Updated tables on SYM_TRIGGER and SYM_TRIGGER_ROUTER and executed initial load for each node.
sudo ./bin/symadmin.bat --engine corp-<dbname> reload-node 001
Then restarted the service using,
sudo ./bin/sym.bat
Only the data in DB1 node has been routed to the target. Shouldn't it route all 4 source db data to the target db? Am I missing any configuration or step?
Thank you.
The Target needs to be the registration node. Put the Sync url of the Target node in all of the source node's engine files. This will allow them to all see the target. You can optionally set Reverse initial load to true, so once those Sources register with the Target, they will send an initial load automatically to the Target without having to be manually triggered. You can use the documentation found in the link below to look into Reverse initial load more:
https://www.symmetricds.org/doc/3.14/html/user-guide.html
The reload-node command is between a node and the root node -- forward load from root to node, or reverse load from node to root. You can send loads between a source and target node using the sym_table_reload_request table. We can work on updating the reload-node command to allow a source and target node.
Hi Jake & Eric,
I created corp-000 as the target node and store-<dbname> as the source nodes. I added the sync.url of the target node as the registration.url of source nodes engine files as you have suggested. Then, </dbname>
I noticed that all the source nodes has sent the create table scripts for their tables. But I see only one source db triggered the initial load for its table.
I have added following parameters to all the source engine files.
Could you please help me find what I have missed here?
Thanks.
I don't think step 3 is needed (updating sym_channel, sym_trigger, sym_trigger_router on each source db) because each store node will register with corp-000 and receive a copy of all SYM tables. You don't need step 4 with sym_table_reload_request because you are using the reverse initial load (sym_node_security.rev_initial_load_enabled=1).
Other that that, the steps sound correct. Look in the logs/symmetric.log to see if there are any errors. If you can post logs, we can take a look.
Any update on this?
Any update on this?
Any clue on this?
Thanks
Last edit: Maneshii 2023-11-28
Can you attach your symmetric.log file from all of the source nodes that do not send data to the target?
I attached the symmetric.log herewith.
Steps done :
1. Executed create-sym-tables for each engine.
2. Set rev_initial_load_enabled=1 for each node on SYM_NODE_SECURITY in source db.
3. Updated sym_channel, sym_trigger and sym_trigger_router in source db.
4. Then started the service.
Any update on this?
Thanks
Last edit: Maneshii 2023-12-02
Is there any update?
Is there any update?
I searched through your log file and it looks like 3 of your 4 source nodes successfully sent loads to the corp-000 node:
The store-dba node is encountering the following error when sending data to the corp-000 node:
org.h2.jdbc.JdbcSQLException: Schema "information_schema" not found;
Can you check whether the corp-000 node's H2 database contains the information_schema?