簡單說兩句:
前提:
需要有postgresql的源代碼,並且編譯過(不一定安裝)。
步驟:
1,先下載這個:
http://laser.dyndns.zhengmai.net.cn/download/slony1-1.0.2.tar.gz
解壓縮後,有slony1-1.0.2目錄。
2,進入該目錄,configure --with-pgsourcetree=<postgresql
源代碼目錄>
3,make & make install
4,以一個數據庫用戶的身份,我先說一個最簡單的,所有表都有主鍵
的,點對點的主從複製方案,我們需要寫下面這麼一個腳本:
#!/bin/sh
CLUSTER=『你的集群的名稱,隨意』
DBNAME1=『需要複製的源數據庫』
DBNAME2=『需要複製的目的數據庫』
HOST1=『源庫IP或主機名』
HOST2=『目的庫IP或主機名』
SLONY_USER=『源庫數據庫超級用戶名』
PGBENCH_USER=『源庫用戶名,沒啥用』
slonik <<_EOF_
#這句是定義集群名
cluster name = $CLUSTER;
#這兩句是定義複製節點
node 1 admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER';
node 2 admin conninfo = 'dbname=$DBNAME2 host=$HOST2
user=$PGBENCH_USER';
#初始化集群,id從1開始,如果只有一個集群,那麼肯定是1
#comment裡可以寫一些自己的註釋,隨意
init cluster ( id = 1, comment = 'Node 1' );
#創建一個複製集,id也是從1開始
create set ( id = 1, origin = 1, comment = 'All pgbench tables' );
#向自己的複製集種添加表,每個需要複製的表一條set命令,
#id從1開始,逐次遞加,步進為1;
#fully qualified name是表的全稱:模式名.表名
#這裡的複製集id需要和前面創建的複製集id一致,origin關鍵字
#這裡暫時不解釋
set add table ( set id = 1, origin = 1,
id = 1, fully qualified name = 'public.accounts',
comment = 'Table accounts' );
set add table ( set id = 1, origin = 1,
id = 2, fully qualified name = 'public.branches',
comment = 'Table branches' );
set add table ( set id = 1, origin = 1,
id = 3, fully qualified name = 'public.tellers',
comment = 'Table tellers' );
#
#假如某個表沒有主鍵,但是有唯一鍵字,那麼可以用key關鍵字
#指定其為複製鍵字,如下面的key參數,如果都沒有,則需要添加
#主鍵,我們以後來講
set add table ( set id = 1, origin = 1,
id = 4, fully qualified name = 'public.history',
key = "column",
comment = 'Table history' );
#存儲主從兩個節點的信息
#下面是從節點
store node ( id = 2, comment = 'Node 2' );
#下面是主節點的連接參數
store path ( server = 1, client = 2,
conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER');
#下面是從節點的連接參數
store path ( server = 2, client = 1,
conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER');
#設置複製中角色,主節點是原始提供者,從節點是接受者
store listen ( origin = 1, provider = 1, receiver = 2 );
store listen ( origin = 2, provider = 2, receiver = 1 );
_EOF_
5,然後執行這個腳本,在任何數據庫用戶下都可以,自己搞定認證問題吧。
6,在源庫(主服務器)上運行命令:
slon 『你的集群的名稱』
"dbname=『需要複製的源數據庫』
user=『源庫數據庫超級用戶名』"&
7,在目的庫(從服務器)上運行命令:
slon 『你的集群的名稱』
"dbname=『需要複製的目的數據庫』
user=『源庫數據庫超級用戶名』"&
8,提交複製集,可以用下面的腳本:
#!/bin/sh
CLUSTER=『你的集群的名稱,隨意』
DBNAME1=『需要複製的源數據庫』
DBNAME2=『需要複製的目的數據庫』
HOST1=『源庫IP或主機名』
HOST2=『目的庫IP或主機名』
SLONY_USER=『源庫數據庫超級用戶名』
PGBENCH_USER=『源庫用戶名,沒啥用』
slonik <<_EOF_
# ----
# This defines which namespace the replication system uses
# ----
cluster name = $CLUSTER;
#提供連接參數
node 1 admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER';
node 2 admin conninfo = 'dbname=$DBNAME2 host=$HOST2
user=$PGBENCH_USER';
#提交複製集
subscribe set ( id = 1, provider = 1, receiver = 2, forward = no);
_EOF_
slony1是基於postgresql的異步通知機製做的複製技術,
其同步速度非常快,我測試的結果是近乎實時。目前我這個bbs
採用這個複製技術來做備份,呵呵,除了配置稍微複雜點,非常好用!
因為時間關係,更複雜的層次複製我們以後再談吧。slony自己的
文檔也不老少。最近忙壞了。實在沒時間細講。有具體試驗問題,
在這裡討論吧,我抽空回覆大家。
(http://www.fanqiang.com)
原文鏈接:http://bbs.pgsqldb.com/index.php?t=msg&th=4716&start=0&rid=&S=93db471195f5359505157b010e89f22e