文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Slony-I同步复制配置简单步骤

Slony-I同步复制配置简单步骤

时间:2010-04-11  来源:osdba

我们配置一个最简单的同步场景: 环境说明 只有一台主机,在这台主机中建两个数据库pgbench和pgbenchslave, 同步就在这两个数据库之间进行,而pgbench数据库是直接使用pgbench工具生成的测试数据库。 我的数据库版本为PostgreSQL8.4.3,PostgreSQL的用户为Postgres。 我安装的PostgreSQL的主目录为/usr/local/pgsql   编译安装slony-I 下载安装包slony1-2.0.3.tar.bz2到/usr/src目录: tar jxvf slony1-2.0.3.tar.bz2 cd slony1-2.0.3.tar.bz2 export PGMAIN=/usr/local/pgsql ./configure --with-pgconfigdir=$PGMAIN/bin --with-perltools gmake all gmake install     配置过程   为了方便我们增加一些环境变量在postgres用户下的.bash_profile文件中: CLUSTERNAME=slony_example MASTERDBNAME=pgbench SLAVEDBNAME=pgbenchslave MASTERHOST=localhost SLAVEHOST=localhost REPLICATIONUSER=postgres PGBENCHUSER=pgbench export CLUSTERNAME=tang_rep   一般来说,我们使用slony提供的一些脚本工具进行配置,这样可以大大减少我们配置的时间。 使用脚本工具需要配置脚本工具的配置文件/usr/local/etc/slon_tools.conf: cp slon_tools.conf-sample /usr/local/etc/slon_tools.conf   然后编译/usr/local/etc/slon_tools.conf文件,首先是设置CUSTER_NAME,把文件中的$CLUSTER_NAME名字改成我们需要的名字,我这里使用了“ tangrep”: $CLUSTER_NAME = 'tangrep';   然后就是节点配置,把文件里面不需要的add_node的部分删除,加上我们的配置:     add_node(node     => 1,
             host     => 'localhost',
             dbname   => 'pgbench',
             port     => 5432,
             user     => 'postgres',
             password => '');
    add_node(node     => 2,
             host     => 'localhost',
             dbname   => 'pgbenchslave',
             port     => 5432,
             user     => 'postgres',
             password => '');
  最后就是数据集的配置了,也就是配置我们需要同步的表或sequence:         "pkeyedtables" => [
                           'pgbench_accounts',
                           'pgbench_branches',
                           'pgbench_history',
                           'pgbench_tellers',
                           ],
  原本文件中还有对sequnece、无主键表同步的配置示例,把这些都注释掉。   生成pgbench测试数据库及相关的表: createuser -A -D $PGBENCHUSER
createdb -O $PGBENCHUSER -h $MASTERHOST $MASTERDBNAME
createdb -O $PGBENCHUSER -h $SLAVEHOST $SLAVEDBNAME
pgbench -i -s 1 -U $PGBENCHUSER -h $MASTERHOST $MASTERDBNAME 因为pgbench建立的表pgbench_history 没有主键,我们给它建上主键: ALTER TABLE pgbench_history ADD primary key(tid,aid,mtime);   slony-I会用到plpgsql,所以要建plpgsql语言: createlang -h $MASTERHOST plpgsql $MASTERDBNAME   把在pgbench数据库建好的表同步到pgbenchslave数据库中: pg_dump -s -U $REPLICATIONUSER -h $MASTERHOST $MASTERDBNAME | psql -U $REPLICATIONUSER -h $SLAVEHOST $SLAVEDBNAME   运行pgbench工具,生成一些测试数据库在pgbench数据库中: pgbench -s 1 -c 5 -t 1000 -U $PGBENCHUSER -h $MASTERHOST $MASTERDBNAME   进到pgbench数据库中,看pgbench_accounts表中有100000条数据: pgbench=# select count(*) from pgbench_accounts;
 count
-------
 100000
(1 row)
pgbench=#
  进到pgbenchslave数据库中,看pgbench_accounts表中有0条数据: pgbenchslave=# select count(*) from pgbench_accounts;
 count
-------
 0
(1 row)
pgbenchslave=#
    配置slony集群: $ slonik_init_cluster  | slonik
启动slon守护程序: $ slon_start 1   
$ slon_start 2
1和2就是节点号。

创建数据集
$ slonik_create_set 1 | slonik            

添加消费者
$ slonik_subscribe_set 1 2 | slonik
上面命令中的“1”是数据集编号,2是节点编号。 添加完消费者后,pgbench数据库中的数据就同步到pgbenchslave数据库中去了,这时去pgbenchslave中去检查pgbench_accounts表中的数据数: pgbenchslave=# select count(*) from pgbench_accounts;
 count
-------
 100000
(1 row)
pgbenchslave=#   这里把pbbench数据库中pgbench_accounts 删除一条记录,然后到pgbenchslave数据库中的pgbench_accounts中去看,也可以看到这条记录也会没有了:
pgbench=# delete from pgbench_accounts where aid=2;        
DELETE 1
pgbench=# select * from pgbench_accounts where aid=2;
 aid | bid | abalance | filler
-----+-----+----------+--------
(0 rows)
pgbench=#\c pgbenchslave pgbenchslave=#select * from pgbench_accounts where aid=2;
 aid | bid | abalance | filler
-----+-----+----------+--------
(0 rows)
  这里就可以看到两个数据库之间已以同步了。     slony的switchover操作: 也就是把主节点改成从节点,从节点升级为主节点: slonik_move_set set1 node1 node2 | slonik   slony的failver操作: slonik_failover node1 node2 | slonik        
     
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载