歡迎您光臨本站 註冊首頁

pgSQL 集群過程

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

pgSQL 集群過程

pgSQL 集群過程


需求: 工作需要
     3種集群模式
     pgCluster.................全熱備集群....都讀寫....每台節點都保持數據完整
     pg Slony-I or II..........主從集群.....從只讀....主讀寫
     pg plporxy................分流特性.....負載平衡.....分佈到節點上

目的: 在 plproxy 上做查詢,從node返回結果.
環境: 3台centos:  1台做plproxy   2台做node
步驟: 如下:
1. 安裝pgsql,所有主機都要裝pgsql

版本3.xx........編譯源碼,rpm 都可以.安裝方法看readme或者install文檔.
      
源碼安裝.............默認都裝在/usr/local/pgsql/下.
      
處理一下環境變數的問題.........export PATH=$PATH:/usr/local/pgsql/bin
      
初始化資料庫目錄.................initdb -D /usr/local/pgsql/data
      
生成一個資料庫................createdb 資料庫名
      
添加plpgsql語言支持..................createlang plpgsql 資料庫名

修改 pgsql 的配置文件.......vi /usr/local/pgsql/data/postgresql.conf
      
取消註釋.........listen_addresses = '*'
    ............port = 5432
      
添加用戶認證...............host 資料庫名 用戶名 ip地址 trust
2   安裝plproxy.....只在proxy上安裝,node不用安裝
      解包........make && make install
      
添加plproxy支持..psql -f /usr/local/pgsql/share/contrib/plproxy.sql 資料庫名
              
在P1(也就是前端)上創建schema

psql testproxy ..............用psql客戶端連接資料庫

create schema plproxy; ........生成schema.

vi MyClusterInit.sql,然後把下面的內容保存:(去掉註釋)#################   begin    ###################

CREATE OR REPLACE FUNCTION plproxy.get_cluster_partitions(cluster_name text)
RETURNS SETOF text AS $
BEGIN
     IF cluster_name = 'MyCluster' THEN
         RETURN NEXT 'dbname=test1 host=192.168.1.190';<----節點ip
         RETURN NEXT 'dbname=test2 host=192.168.1.193';<----節點ip

         RETURN;
     END IF;
     RAISE EXCEPTION 'Unknown cluster';
END;
$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION plproxy.get_cluster_version(cluster_name text)
RETURNS int4 AS $
BEGIN
     IF cluster_name = 'MyCluster' THEN
         RETURN 1;
     END IF;
     RAISE EXCEPTION 'Unknown cluster';
END;
$ LANGUAGE plpgsql;

create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text)
returns setof record as $
begin
     key := 'statement_timeout';
     val := 60;
     return next;
     return;
end; $ language plpgsql;

################   end    #################複製代碼psql -f MyClusterInit.sql -d testproxy...........執行上述sql語句.

以上proxy設置完成..............................................

開始節點的設置:

給每個節點都創建一個函數:方法同上:vi到一個文件中,然後執行這個文件.內容如下:#########################   begin   ########################
create or replace function public.dquery(query text) returns setof record as $
declare
    ret record;
begin
      for ret in execute query loop
      return next ret;
      end loop;
      return;
end;
$ language plpgsql;

create or replace function public.ddlExec(query text) returns integer as $
declare
    ret integer;
begin
  execute query;
    return 1;
end;
$ language plpgsql;

create or replace function public.dmlExec(query text) returns integer as $
declare
    ret integer;
begin
  execute query;
    return 1;
end;
$ language plpgsql;
##############################      end       ######################複製代碼psql -f 這個文件名 -d database name -h ip地址

4. 然後在proxy上建立相同的函數,用於集群檢索.建立,執行方法同上:CREATE OR REPLACE FUNCTION public.dquery(query text) RETURNS setof
record AS $
CLUSTER 'MyCluster';
RUN ON ALL;
$ LANGUAGE plproxy;

CREATE OR REPLACE FUNCTION public.ddlexec(query text) RETURNS setof integer
AS $
CLUSTER 'MyCluster';
RUN ON ALL;
$ LANGUAGE plproxy;

CREATE OR REPLACE FUNCTION public.dmlexec(query text) RETURNS setof integer
AS $
CLUSTER 'MyCluster';
RUN ON ANY;
$ LANGUAGE plproxy;
###########################  done   ###########################複製代碼5. 測試
   方法:在proxy,nodes上建立相同的表
        用select,insert,del 在proxy執行.然後每個node上都有響應..
   代碼: select * from public.ddlexec(
                          'create table usertable(id primary key,
                                                  username varchar(20)'
                                      );

        .......................在數據節點上生成一個表usertable,
       然後可以插入一些數據測試:
       select * from public.ddlexec(
       'insert into usertable(id,username) values(1,'aaa')');

【轉載】http://blog.csdn.net/joliny/archive/2008/12/10/3491861.aspx

[火星人 ] pgSQL 集群過程已經有627次圍觀

http://coctec.com/docs/service/show-post-5074.html