1.环境
OS:windows Server 2003 SP1;
PostGreSQL: postgresql-8.2.4-1;
Slony-I: postgresql-8.2.4-1自带的Slony-I;
2.实现要求
单向同步主服务器“user_level”到从服务器的“user_level”;
其中主服务器IP:192.168.0.42,DBName:XTSMH,UserName:postgres,PassWord:1234;
从服务器IP:192.168.0.50,DBName:XTSMH,UserName:postgres,PassWord:1234;
3.配置步骤
step1:
注册相应的动态链接库:
进入%PG%/lib目录,运行“regsvr32 slevent.dll”;
step2:
注册服务:
在主服务器上以及从服务器上,进入%PG%/bin目录,运行“slon -regservice”;
step3:
建立联通性:
在主服务器上以及从服务器上,编辑%PG%/data/pg_hba.conf,使网络中的两个数据库服务器能相互访问;
step4:
建立主服务器脚本文件“master.script”;
step5:
运行脚本文件:
在主服务器里进入%PG%/bin运行“slonik master.script” ;
如报错提示缺少相应的*.sql文件,请将%PG%/share下的xxid.v80.sql, slony1_funcs.v80.sql,slony1_base.v80.sql复制后更名为相应的文件(只改文件名,如将xxid.v80.sql复制后改为xxid.v81.sql);
step6:
在主服务器上建立引擎配置文件“slony_master.conf”其内容是集群名称以及指向从服务器的连接配置;
step7:
为服务添加引擎:
在主服务器里进入%PG%/bin运行“slon -addengine slony_master.conf”;
step8:
建立从服务器脚本文件“slave.script”;
step9:
运行脚本文件:
在从服务器里进入%PG%/bin运行“slonik slave.script” ;
如报错提示缺少相应的*.sql文件,请参看step5;
step10:
在从服务器上建立引擎配置文件“slony_slave.conf”其内容是集群名称以及指向主服务器的连接配置;
step11:
为服务添加引擎:
在从服务器里进入%PG%/bin运行“slon -addengine slony_slave.conf”;
step12:
分别在主服务器和从服务器上挂起服务并监听引擎;
4. master.script
#定义集群名称
cluster name=SMHSYN;
# 定义复制节点
#主节点
node 1 admin conninfo = 'dbname=XTSMH host=192.168.0.42 user=postgres password=1234';
#从节点
node 2 admin conninfo = 'dbname=XTSMH host=192.168.0.50 user=postgres password=1234';
# 初始化集群,id从1开始
init cluster ( id = 1, comment = 'Master Node' );
#设置参与同步的数据表,创建复制集,id也是从1开始,从复制集添加表
create set ( id = 1, origin = 1, comment = 'All XTSMH Tables' );
set add table ( set id = 1, origin = 1, id = 1, fully qualified name = 'public.user_level', comment = 'Table user_level' );
#设置存储节点,存储主从两个节点的信息
store node ( id = 2, comment = 'Slave Node' );
#设置存储路径
#主节点
store path ( server = 1, client = 2, conninfo = 'dbname=XTSMH host=192.168.0.42 user=postgres password=1234');
#从节点
store path ( server = 2, client = 1, conninfo = 'dbname=XTSMH host=192.168.0.50 user=postgres password=1234');
#设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接受者
store listen ( origin = 1, provider = 1, receiver = 2 );
store listen ( origin = 2, provider = 2, receiver = 1 );
5. slony_master.conf
#集群名称
cluster_name = 'SMHSYN'
#连接主服务器的信息
conn_info = 'dbname=XTSMH host=192.168.0.42 user=postgres password=1234'
6. slave.script
#定义集群名称
cluster name=SMHSYN;
#定义复制节点
#主节点
node 1 admin conninfo = 'dbname=XTSMH host=192.168.0.42 user=postgres password=1234';
#从节点
node 2 admin conninfo = 'dbname=XTSMH host=192.168.0.50 user=postgres password=1234';
#定义订阅
SUBSCRIBE SET (ID = 1, PROVIDER = 1, RECEIVER = 2, FORWARD = YES);
7. slony_slave.conf
#集群名称
cluster_name = 'SMHSYN'
#连接从服务器的信息
conn_info = 'dbname=XTSMH host=192.168.0.50 user=postgres password=1234'