需求: 工作需要
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 $$.......................在資料節點上生成乙個表usertable,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)'
);
然後可以插入一些資料測試:
select * from public.ddlexec(
'insert into usertable(id,username) values(1,'aaa')');
6. 如果失敗請: 參考 pgsql
官方手冊
nginx tomcat集群過程
1.裝多tomcat,注意埠不要一樣,每乙個tomcat都要設三個埠,都要不一樣 比如配兩個,啟動起來,如果埠衝突起啟不了 配製nginx配製如下 user nobody worker processes 2 error log logs error.log error log logs error...
pgsql處理文件型別資料 pgsql使用文件
pgsql使用文件 也是一種資料庫。安裝yum install postgresql server y 基礎配置 使用mkdir建立資料目錄 mkdir data postgres 使用chown賦予postgres data postgres許可權 chown postgres.postgres ...
PgSQL 特性分析 備庫啟用過程分析
postgresql standby 可以通過兩種方法來啟用成為主庫 trigger file,配置在recovery.conf中。pg ctl promote傳送sigusr1訊號給postmaster程序。同時,postgresql支援快速啟用 fast promote 和非快速啟用 fallb...