4.3 slave到master的切换
如果您想扩展读或您想做一个数据备份,一个 slave是件美好的事情。但是,slave可能不会一直是slave。在有些时候,您可能需要把slave转换为master。PostgreSQL提供了一些简单的方法来做到这一点。第一个也是最有可能的最便捷的方法把一个slave转换为一个master是使用pg_ctl:
iMac:slavehs$ pg_ctl -D . promote
server promoting
iMac:slavehs$ psql test
psql (9.2.4)
Type "help" for help.
test=# CREATE TABLE sample (id int4);
CREATE TABLE
promote命令会给postmaster进程发送信号并把您的slave转换为master。一旦转换完成,您就可以连接和创建对象。
除了promote命令,还有第二个选项来把slave转换为master。尤其是当您试图把PostgreSQL和一个您所选择的高可用软件整合到一起的时候,创建一个简单的文件比调用init脚本更容易。
要使用基于文件的方法,您可以添加trigger_file 命令到您的 recovery.conf文件。
trigger_file = ‘/tmp/start_me_up.txt‘
在我们的例子中,PostgreSQL将等待一个文件/tmp/start_me_up.txt 来使条件成立。这个文件的内容是完全不相干的;PostgreSQL简单地检查文件是否存在,如果存在,就会停止恢复,把自己转换为master。
创建一个空文件是相当简单的工作:
iMac:slavehs$ touch /tmp/start_me_up.txt
数据库系统将会回应新文件start_me_up.txt
FATAL: terminating walreceiver proced fire up:
LOG: trigger file found: /tmp/start_ss due to
administrator command
LOG: redo done at 0/50000E0
LOG: selected new timeline ID: 2
LOG: archive recovery complete
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
PostgreSQL将会每五秒钟一次检查您已经在recovery.conf中定义的文件。大多数情况下,这是完全正常的,而且直到目前为止,足够快。