Windows下Postgresql数据库通过Slony-I配置集群实现数据库同步的方法
经过了几天的数据库集群配置,今天终于成功了,详细过程和遇到的问题总结如下。
一. 我们要实现的环境是windows xp或者windows7上Postgresql数据库,实现目的是多台数据库服务器进行数据库同步,即数据库同步更新、删除、插入等对数据库的操作。
二. 使用的工具是数据库版本Postgresql8.4,配置集群的工具是Stack Builder自己的可安装的Slony-I v2.0.4-1.
三. Slony-I实现数据库集群同步的原理简述:Slony-i是采用一主多从式集群方式,通过在主服务器和从服务器上建立同步节点,设置远程访问路径,启动监听进程(slon守护进程)进行监听,当主服务器进行了修改操作时,通过触发器触发,从进程进行异步修改来达到数据库同步。
四. 详细步骤如下:
1. 安装Postgresql数据库和Slony-i集群软件。
2. 注册相应的动态链接库。
进入%PG%/lib目录,运行regsvr32 slevent.dll,对集群所用到的动态链接库进行注册。
3. 注册服务
进入%PG%/bin目录,运行 slon –regservice 注册slony-i服务项。注册完后,在运行 services.msc会看到slony-i服务项,默认状态没有启动。
4. 建立连通性。
服务器之间进行远程访问需要对访问权限进行设置。Pg_hba.conf是访问配置文件,可以按照本地local/网络host,ip地址/子网掩码,访问方式 的格式进行权限设置。
5. 建立主服务器文件master.script
例如:
cluster name=testlao;
node 1 admin conninfo = 'dbname=lao host=192.168.2.138 user=postgres password=74581';
node 2 admin conninfo = 'dbname=lao host=192.168.2.130 user=postgres password=74581';
init cluster( id = 1,comment = 'Master Node');
store node ( id = 2, comment = 'Slave Node',event node=1 );
store path ( server = 1, client = 2, conninfo = 'dbname=lao host=192.168.2.138 user=postgres password=74581');
store path ( server = 2, client = 1, conninfo = 'dbname=lao host=192.168.2.130 user=postgres password=74581');
store listen ( origin = 1, provider = 1, receiver = 2 );
store listen ( origin = 2, provider = 2, receiver = 1 );
create set ( id = 1, origin = 1, comment = 'All lao Tables' );
set add table (set id = 1,origin = 1,id = 1,fully qualified name = 'public.res2_4m',comment = 'Table res2_4m');
6. 运行脚本进入%PG%/bin目录下,运行slonik master.script。
7. 在服务器上建立slony_master.conf配置文件,其内容是集群名称以及指向主服务器的连接配置。
例如:cluster_name = 'testlao'
conn_info = 'dbname=lao host=192.168.2.138 user=postgres password=74581'
8. 为服务添加引擎,%PG%/bin下运行 slon –addengine slony_master.conf
9. 建立从服务器的脚步文件 slave.script
例如:
cluster name=testlao;
node 1 admin conninfo = 'dbname=lao host=192.168.2.138 user=postgres password=74581';
node 2 admin conninfo = 'dbname=newlao host=192.168.2.130 user=postgres password=74581';
SUBSCRIBE SET (ID = 1, PROVIDER = 1, RECEIVER = 2, FORWARD = NO, OMIT COPY = NO);
10. 从服务器上运行脚本 slonik slave.script
11. 在从服务器上建立引擎配置文件 slony-_slave.conf
例如:
Cluster_name = ‘testlao’
Conn_info = ‘dbname=lao host=192.168.2.130 user=postgres password=74581’
其内容是集群名称和指向从服务器的链接
12. 在从服务器中进入%PG%/bin目录,运行 slon –addengine slony_slave.conf。
13. 分别在主服务器和从服务器上挂起服务并监听引擎。
五. 遇到的问题及解决方式。
1. 在win7下注册动态链接库失败,提示:“模块slevent.dll已加载,但对DllRegisterServer的调用失败,错误代码为0x80040200“。解决方法:以管理员身份运行命令提示符,执行相同操作就可行。原因:win7对安全级别进行了设置,对动态链接库的注册要管理员模式才可以。
2. 在执行slonik configfilename时,发现找不到.sql文件。解决办法:复制+改名,到share文件夹下找到复制到bin目录,如果名字不对要改为相应的名字。
3. 当slon –addengine时,可以slon –listengines来查看监视进程,如果没有的话要在运行中services.msc中开启slony-i服务
4. 当主从服务器配置好后,根据需要对两个触发器进行设置,开启或者关闭。
六. 参考链接:
http://blog.csdn.net/luo_yifan/archive/2010/03/23/5409338.aspx 对其中的错误进行了改正,并对遇到的问题进行了总结。