Slony-I可以来实现PostgreSQL数据库的主从复制。
下面是Slony-I的安装配置简明指南,实现主副数据库的同步。后面我会再介绍Pgbouncer的安装和配置1.主副数据库机器Master:hostname:M_DBinetaddr:10.0.0.11OS:Linux2.6.9-42.ELsmpCPU:Intel(R)Xeon(R)CPUL5320@1.86GHzMemTotal:254772kBPgSQL:postgresql-8.3.0Slave:hostname:S_DBinetaddr:10.0.0.12OS:Linux2.6.9-42.ELsmpCPU:Intel(R)Xeon(R)CPUL5320@1.86GHzMemTotal:514440kBPgSQL:postgresql-8.3.0#在M_DB和S_DB上安装postgresql-8.3.0,安装和配置过程参见我的上一篇Blog,确保超级用户是postgres,数据库名是URT。#检查M_DB和S_DB上的超级用户postgres是否可以访问对方的机器#分别在M_DB和S_DB上执行sudo-upostgres/home/y/pgsql/bin/createlangplpgsqlURT#分别在M_DB和S_DB上的URT数据库里创建相同的表accounts。2.安装Slony-I#分别在M_DB和S_DB上安装Slony-Itarxfjslony1-1.2.13.tar.bz2cdslony1-1.2.13./configure–with-pgconfigdir=/home/y/pgsql/bingmakeallsudogmakeinstall3.SlonyConfig创建urt_replica_init.sh文件:###############################!/bin/shSLONIK=/home/y/pgsql/bin/slonik#slonik可执行文件位置CLUSTER=URT#你的集群的名称SET_ID=1#你的复制集的名称MASTER=1#主服务器IDHOST1=M_DB#源库IP或主机名DBNAME1=URT#需要复制的源数据库SLONY_USER=postgres#源库数据库超级用户名SLAVE=2#从服务器IDHOST2=S_DB#目的库IP或主机名DBNAME2=URT#需要复制的目的数据库PGBENCH_USER=postgres#目的库用户名$SLONIK<<_EOF_#这句是定义集群名clustername=$CLUSTER;#这两句是定义复制节点node$MASTERadminconninfo='dbname=$DBNAME1host=$HOST1user=$SLONY_USER';node$SLAVEadminconninfo='dbname=$DBNAME2host=$HOST2user=$PGBENCH_USER';#初始化集群和主节点,id从1开始,如果只有一个集群,那么肯定是1#comment里可以写一些自己的注释,随意initcluster(id=$MASTER,comment='PrimaryNode');#下面是从节点storenode(id=$SLAVE,comment='SlaveNode');#配置主从两个节点的连接信息,就是告诉Slave服务器如何来访问Master服务器#下面是主节点的连接参数storepath(server=$MASTER,client=$SLAVE,conninfo='dbname=$DBNAME1host=$HOST1user=$SLONY_USER');#下面是从节点的连接参数storepath(server=$SLAVE,client=$MASTER,conninfo='dbname=$DBNAME2host=$HOST2user=$PGBENCH_USER');#设置复制中角色,主节点是原始提供者,从节点是接受者storelisten(origin=$MASTER,provider=1,receiver=2);storelisten(origin=$SLAVE,provider=2,receiver=1);#创建一个复制集,id也是从1开始createset(id=$SET_ID,origin=$MASTER,comment='Allpgbenchtables');#向自己的复制集种添加表,每个需要复制的表添加一条set命令,id从1开始,逐次递加,步进为1;#fullyqualifiedname是表的全称:模式名.表名#这里的复制集id需要和前面创建的复制集id一致setaddtable(setid=$SET_ID,origin=$MASTER,id=1,fullyqualifiedname='public.accounts',comment='Tableaccounts');_EOF_#########################在M_DB或者S_DB上执行./urt_replica_init.sh4.SlonyStart创建Master.slon文件:########################cluster_name="URT"conn_info="dbname=URThost=M_DBuser=postgres"########################创建Slave.slon文件:########################cluster_name="URT"conn_info="dbname=URThost=S_DBuser=postgres"#########################在M_DB上执行/home/y/pgsql/bin/slon-fmaster.slon>>master.log&#在S_DB上执行/home/y/pgsql/bin/slon-fslave.slon>>slave.log&5.SlonySubscribe创建urt_replica_subscribe.sh文件:#########################!/bin/shSLONIK=/home/y/pgsql/bin/slonik#slonik可执行文件位置CLUSTER=URT#你的集群的名称SET_ID=1#你的复制集的名称MASTER=1#主服务器IDHOST1=M_DB#源库IP或主机名DBNAME1=URT#需要复制的源数据库SLONY_USER=postgres#源库数据库超级用户名SLAVE=2#从服务器IDHOST2=S_DB#目的库IP或主机名DBNAME2=URT#需要复制的目的数据库PGBENCH_USER=postgres#目的库用户名$SLONIK<<_EOF_#这句是定义集群名clustername=$CLUSTER;#这两句是定义复制节点node$MASTERadminconninfo='dbname=$DBNAME1host=$HOST1user=$SLONY_USER';node$SLAVEadminconninfo='dbname=$DBNAME2host=$HOST2user=$PGBENCH_USER';#提交复制集subscribeset(id=$SET_ID,provider=$MASTER,receiver=$SLAVE,forward=no);_EOF_#########################在M_DB或者S_DB上执行./urt_replica_subscribe.sh6.测试修改M_DB上URT数据里的accounts表,S_DB上的accounts表也会随之改变
评论