postgresql 数据库同步复制
一、 我们要实现的环境是windowsxp、windows2003上安装PostgreSQL数据库,实现目的是两台数据库服务器进行数据库同步,即数据库同步更新、删除、插入等对数据库的操作。 二、 使用的工具是数据库版本PostgreSQL9.2,配置集群的工具是StackBuilder自己的可安装的Slony-Iv2.1.3-1。 三、 Slony-I实现数据库集群同步的原理简述:Slony-i是采用一主多从式集群方式,通过在主服务器和从服务器上建立同步节点,设置远程访问路径,启动监听进程(slon守护进程)进行监听,当主服务器进行了修改操作时,通过触发器触发,从进程进行异步修改来达到数据库同步。但是这种同步只能是从服务器备份主服务器,不能修改从服务器让主服务器同步。也即这种同步是单方向的。而且主、从服务器的postgres服务和slony-I服务都必须启动。 四、 先在两台机子上安装PostgreSQL和Slony-I,且都建立一个test的数据库。并在test库上建立需要同步的表,例如testtable,这些表必须要有主键(Slony-I只是实现某个数据库,某些设定好的表的同步更新,新建表不行)。需要多个表则建立多个。 五、详细配置步骤如下: 1.环境
2.实现要求 单向同步主服务器“192.168.101.128”到从服务器的“192.168.101.32”;
| ||||||||||||
Master192.168.101.128 |
Slave192.168.101.32 |
|||||||||||
数据库名 |
test |
test |
||||||||||
用户名 |
postgres |
postgres |
||||||||||
密码 |
123 |
123 |
3.配置步骤:
第一步:
注册服务:
在主服务器上以及从服务器上,进入%PG%/bin目录,运行“slon-regservice”;建立Slony-I服务。
第二步:
建立联通性:
在主服务器上以及从服务器上,编辑%PG%/data/pg_hba.conf,使网络中的两个数据库服务器能相互访问;
都要加上主从服务器的ip,必须保留127.0.0.1
- #IPv4localconnections:
- hostallall127.0.0.1/32md5
- hostallall192.168.101.128/32md5
- hostallall192.168.101.32/32md5
第三步:
建立主服务器脚本文件“master.script”;
注:postgrecluster为群集名,test为需要复制的数据库名,testtable为复制表名(必须在两个库先建且要有主键),node1和node2中的1,2为节点的别名,可以用别的。
以下为文件详细内容:
- #----------------master.script-------------Start-----------------
- #定义集群名称
- clustername=postgrecluster;
- #定义复制节点
- #主节点
- node1adminconninfo='dbname=testhost=192.168.101.128user=postgrespassword=123';
- #从节点
- node2adminconninfo='dbname=testhost=192.168.101.32user=postgrespassword=123';
- #初始化集群,id从1开始
- initcluster(id=1,comment='MasterNode');
- #设置参与同步的数据表,创建复制集,id也是从1开始,从复制集添加表
- createset(id=1,origin=1,comment='AlltestTables');
- setaddtable(setid=1,id=1,fullyqualifiedname='public.testtable',comment='Tabletesttable');
- #设置存储节点,存储主从两个节点的信息
- storenode(id=2,comment='SlaveNode',eventnode=1);
- #设置存储路径
- storepath(server=1,client=2,conninfo='dbname=testhost=192.168.101.128user=postgrespassword=123');
- storepath(server=2,client=1,conninfo='dbname=testhost=192.168.101.32user=postgrespassword=123');
- #设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接收者
- storelisten(origin=1,provider=1,receiver=2);
- storelisten(origin=2,provider=2,receiver=1);
- #----------------master.script-------------End-----------------
第四步:
运行脚本文件
在主服务器里进入%PG%/bin运行“slonikmaster.script”;
注:如果master.script不放在bin目录下,则需要加上路径!
第五步:
在主服务器上建立引擎配置文件“slony_master.conf”,其内容是集群名称以及指向从服务器的连接配置;
test为需要复制的数据库名。
copy