Help in defining 3rd ER server
Posted in 2012
Topics: General Discussion
11.50.FC8 AIX I have an existing ER configuration between two servers, A & B. I am trying to add a third server into this configuration so the relationship would be as follows: Update anywhere between A & B Trying to define: A replicates to C B replicates to C *The replicates on C will be defined as one way only coming from either A or B. A <------> B \\\\ / \\\\ / \\\\ / C Here is what I have defined so far: A = prod1_serv B = prod2_serv C = ids_12338_er From Server A prod1_serv SERVER ID STATE STATUS QUEUE CONNECTION CHANGED ----------------------------------------------------------------------- ids_12338_er 3 Active Connected 0 May 17 14:28:04 prod1_serv 1 Active Local 0 prod2_serv 2 Active Connected 0 May 10 16:10:30 From Server B prod2_serv SERVER ID STATE STATUS QUEUE CONNECTION CHANGED ----------------------------------------------------------------------- prod1_serv 1 Active Connected 0 May 10 16:10:29 prod2_serv 2 Active Local 0 From Server C ids_12338_er SERVER ID STATE STATUS QUEUE CONNECTION CHANGED --------------------------------------------------------------------- ids_12338_er 3 Active Local 0 prod1_serv 1 Active Connected 0 May 17 14:28:03 This is where my problem lies: I need to complete this triangle and when I try to get ids_12338_er onto Server B or prod2_serv onto ids_12338_er I get the following error no matter if I run the command from ids_12338_er or prod2_serv. cdr define server --connect=jpmc12338_er -S jpmcprod2_serv ids_jpmc12338_er command failed -- remote/cyclic synchronization not allowed (64) what am I doing wrong ? I kind of think my define_server command is the problem. Thanks in advance , Mark
Original Question:
11.50.FC8 AIX
I have an existing ER configuration between two servers, A & B. I am trying to
add a third server into this configuration so the relationship would be as
follows:
Update anywhere between A & B
Trying to define:
A replicates to C
B replicates to C
*The replicates on C will be defined as one way only coming from either A or B.
A <------> B
\\\\ /
\\\\ /
\\\\ /
C
Here is what I have defined so far:
A = prod1_serv
B = prod2_serv
C = ids_12338_er
From Server A prod1_serv
SERVER ID STATE STATUS QUEUE CONNECTION CHANGED
-----------------------------------------------------------------------
ids_12338_er 3 Active Connected 0 May 17 14:28:04
prod1_serv 1 Active Local 0
prod2_serv 2 Active Connected 0 May 10 16:10:30
From Server B prod2_serv
SERVER ID STATE STATUS QUEUE CONNECTION CHANGED
-----------------------------------------------------------------------
prod1_serv 1 Active Connected 0 May 10 16:10:29
prod2_serv 2 Active Local 0
From Server C ids_12338_er
SERVER ID STATE STATUS QUEUE CONNECTION CHANGED
---------------------------------------------------------------------
ids_12338_er 3 Active Local 0
prod1_serv 1 Active Connected 0 May 17 14:28:03
This is where my problem lies: I need to complete this triangle and when I try
to get ids_12338_er onto Server B or prod2_serv onto ids_12338_er I get the
following error no matter if I run the command from ids_12338_er or prod2_serv.
cdr define server --connect=jpmc12338_er -S jpmcprod2_serv ids_jpmc12338_er
command failed -- remote/cyclic synchronization not allowed (64)
what am I doing wrong ? I kind of think my define_server command is the
problem.
Thanks in advance ,
My Reply:
What is the original 'cdr define server' command you used when you added it to
the 1st server? My guess is that you added it as 'leaf' node, because it shows
up on A, but not on B, and C does not know about B. The 'onstat -g cat
servers' command would tell you - look for the 'isleaf:' option. That's why
you are getting the error about 'cyclic' replication, you are running the
command again for this C server when one of the Root nodes in the ER
environment (A) already knows about this server.
For this to work - you should consider using all 'root' nodes - meaning all
servers know about each other. Then define your replicates to go the direction
you need them to. I would recommend defining C as a target only - for example:
cdr define repl -c serv1 -C ignore -S tran replicate_xyz \\\\
"P db@A:owner.table" "select * from table" \\\\
"P db@B:owner.table" "select * from table" \\\\
"R db@C:owner.table" "select * from table"
This makes A and B 'update anywhere', and C the 'receive-only' target for any
updates from A or B.
HTH
-Ron Privett