pgSQL 集群過程

2021-04-23 00:44:07 字數 4393 閱讀 8810

需求: 工作需要

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')');

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...