PostgreSQL 与 Slony-I 的安装配置

Thursday, April 22nd, 2010 @ 11:31 am

数据库切换
~~~~~~~~~
Slony-I 是一个异步的灾备系统,所以很可能出现这种情况,事务在 master 库已经完成了,但是在同步到 slave 库之前,突然 down 掉了。Down掉的原因可能很多,而定期对系统做维护会大大减少系统down掉的概率,这也是系统管理员和DBA主要职责之一。

常用的维护方法是:将master与slave的切换,由slave对外提供服务,我们可以专心的对master进行维护,维护完成后在切回来,继续由mater提供服务,这就是 switchover,例如数据库或者操作系统升级。
当然,即使这样,也不能保证master永远都不出问题,一旦出现库甚至是主机down掉的情况,并且短期内无法恢复,我们要直接配置slave,由它作为master立刻对外提供服务,这种情况叫做failover

+ 使用 postgres 用户执行下面的脚本测试 switchover

$ vi switchover.sh
#!/bin/bash

CLUSTER=contact_cluster
DB1=contactdb
DB2=contactdb_slave
H1=192.168.0.194
H2=192.168.0.199
U=postgres

slonik <<_EOF_
cluster name = $CLUSTER;

node 1 admin conninfo = 'dbname=$DB1 host=$H1 user=$U';
node 2 admin conninfo = 'dbname=$DB2 host=$H2 user=$U';

lock set (id = 1, origin = 1);
wait for event (origin = 1, confirmed = 2);
move set (id = 1, old origin = 1, new origin = 2);
wait for event (origin = 1, confirmed = 2);
_EOF_
$ chmod +x switchover.sh
$ ./switchover.sh

脚本执行完以后,所有 master 节点 (node1) 上的set将全部转移到slave节点,master变成一个subscriber,salve成为origin,两个节点的角色互换,可以放心的对原 master(fedora主机) 进行维护。
维护完以后,修改switchover.sh,把所有的节点编号再换回来 (set id 不变),如下:

lock set (id = 1, origin = 2);
wait for event (origin = 2, confirmed = 1);
move set (id = 1, old origin = 2, new origin = 1);
wait for event (origin = 2, confirmed = 1);

修改好以后,再次执行脚本,恢复到最开始的设置,即 master是fedora,slave是ubuntu

假设fedora上的库已经down掉了,在fedora上

$ su -
$ service postgresql stop

+ 在ubuntu上使用postgres用户执行下面的脚本测试 failover

$ vi failover.sh
#!/bin/bash

CLUSTER=contact_cluster
DB1=contactdb
DB2=contactdb_slave
H1=192.168.0.194
H2=192.168.0.199
U=postgres

/usr/lib/postgresql/8.4/bin/slonik <<_EOF_
cluster name = $CLUSTER;

node 1 admin conninfo = 'dbname=$DB1 host=$H1 user=$U';
node 2 admin conninfo = 'dbname=$DB2 host=$H2 user=$U';

failover (id = 1, backup node = 2);
drop node (id = 1, event node = 2);
_EOF_
$ chmod +x failover.sh
$ ./failover.sh

脚本执行完后,slave节点会获得所有 set,并作为 provider 提供服务(但前面 subscribe 设置时要forward = yes),原来的 master节点会被彻底从 slony 系统中删除,和 switchover 不同的是此操作不可逆,并且切换是在原来master库已经down掉(slony 进程还在)的情况下完成的。如果想要将原来的master 重新加入 slony,需要参考前面的步骤,对该库进行重新配置,使其称为一个 slave,然后再 switchover 进行切换。

Pages: 1 2 3 4 5 6 7

Tags: ,
Posted in Technology | No Comments »

Leave a Reply