可以参考25 高可用性,负载均衡和复制这篇文章了解一些常规的复制方案。
来自于skype的工具包skytools,其中pgq是基于postgresql的通用队列实现。而londiste是基于pgq的复制工具。这 两个工具的组合类似于slony,但相比二者,前者更简单一些。我们可以简单地把这种复制理解成 producer(provider)/consumer(subscriber)类型。master产生数据在队列中,而slave从队列中取数据并且 作用在自己身上。
简单描述一下安装过程如下(假设两台机器,一台是master,一台是slave,都已经安装了数据库)
tar xzvf psycopg2-2.0.7.tar.gz
cd psycopg2-2.0.7
python setup.py build_ext -Rpgsql的安装目录/lib
python setup.py install
tar xzvf skytools-2.1.7.tar.gz
cd skytools-2.1.7
./configure
make
make install
python setup.py install
配置文件名:ticker.ini
[pgqadm]
job_name = ticker
db = dbname=foo host=127.0.0.1 port=5555 user=chry
# how often to run maintenance [minutes]
maint_delay_min = 1
# how often to check for activity [secs]
loop_delay = 0.1
logfile = %(job_name)s.log
pidfile = %(job_name)s.pid
use_skylog = 0
配置文件名:replica.ini
[londiste]
job_name = lmaster_to_slave
provider_db = dbname=foo host=127.0.0.1 port=5555 user=chry
subscriber_db = dbname=foo host=205.203.*.* port=5555 user=chry
# it will be used as sql ident so no dots/spaces
pgq_queue_name = londiste.write
pidfile = %(job_name)s.pid
logfile = %(job_name)s.log
use_skylog = 0
pgqadm.py ticker.ini ticker -d (启动pgq管理进程)
londiste.py replica.ini provider install(安装londiste需要的schema)
londiste.py replica.ini subscriber install(安装londiste需要的schema)
londiste.py replica.ini replay -d(启动数据复制,replica这个文件被部署了两次)
以上过程需要保证slave可以登录master的数据库。
master
londiste.py replica.ini provider add entry
londiste.py replica.ini provider add-seq entry_id_seq
slave
londiste.py replica.ini subscriber add entry
londiste.py replica.ini subscriber add-seq entry_id_seq
添加完毕。
londiste.py replica.ini subscriber resync -v --force
一边是feed数据到write集群,一边不仅仅希望读写分开以提高性能,同时可以支持load balance,那么pgq/londiste无疑是比较好的方案。之前可能需要同时写两个节点的数据以保证数据同步,这样不仅性能打折,而且还必须保证 事务,标准的plproxy是不支持事务的。
票务搜索就是这类应用,还有一些OLTP以及web应用可能也是合适的场合。