PostgreSQL 与 Slony-I 的安装配置
数据库切换
~~~~~~~~~
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 进行切换。
Tags: postgresql, slony
Posted in Technology | No Comments »