PL/Proxy安装配置

1、环境
三台虚拟机
系统:red hat6.5
ip 192.168.11.65           代理数据库
     192.168.11.66          数据节点 db1
     192.168.11.67          数据节点db2
三台机器上均安装好postgresql
数据库版本:postgresql9.4..4
2、在P1上安装plroxy
[postgres@barman ~]$ tar xvf plproxy-2.5.tar.gz
[postgres@barman ~]$ cd plproxy-2.5.tar.gz
[postgres@barman plproxy-2.5]$ make
[postgres@barman plproxy-2.5]$ make install
创建一个新数据库proxydb
[postgres@barman plproxy-2.5]$ createdb proxydb;
进入数据库创建plproxy;
[postgres@barman plproxy-2.5]$ psql proxydb
psql (9.4.4)
Type "help" for help.
postgers=#create extension plproxy;
创建好模式
postgres=#create schema plproxy;
3、在d1和d2上建好数据库datadb
postgres@barman1 ~]$ createdb datadb;


4、 在P1上初始化设置
#plproxy的配置是通过三个函数(过程)实现的,这三个函数的标准模版如下:
#这个函数是让plproxy可以找到对应的集群,将三个函数建立在proxydb中
CREATE OR REPLACE FUNCTION plproxy.get_cluster_partitions(cluster_name text)
RETURNS SETOF text AS $$
BEGIN
IF cluster_name ='cluster1' THEN
RETURN NEXT 'dbname=datadb host=192.168.11.66';
RETURN NEXT 'dbname=datadb host=192.168.11.67';
RETURN;
END IF;
RAISE EXCEPTION ‘Unknown cluster’;
END;
$$ LANGUAGE plpgsql;
#这个函数是plproxy用于判断是否给前端返回已经cache过的结果用的
CREATE OR REPLACE FUNCTION plproxy.get_cluster_version(cluster_name text)
RETURNS int4 AS $$
BEGIN
IF cluster_name = 'cluster1' 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;
6. 在D1,D2节点上设置
#给每个数据库节点都创建一张表users
CREATE TABLE users (
username text,
email text
);
#给每个数据库节点都创建一个插入函数
CREATE OR REPLACE FUNCTION insert_user(i_username text, i_emailaddress text)
RETURNS integer AS $$
INSERT INTO users (username, email) VALUES ($1,$2);
SELECT 1;
$$ LANGUAGE SQL;
7. 在P1节点上设置
#在 plproxy 节点上创建一个同名的插入函数,用于进行集群检索
CREATE OR REPLACE FUNCTION insert_user(i_username text, i_emailaddress text)
RETURNS integer AS $$
CLUSTER 'cluster1';
RUN ON hashtext(i_username);
$$ LANGUAGE plproxy;
#在 plproxy 节点上创建一个查询函数,用于进行集群检索
CREATE OR REPLACE FUNCTION get_user_email(i_username text)
RETURNS text AS $$
CLUSTER 'cluster1';
RUN ON hashtext(i_username) ;
SELECT email FROM users WHERE username = i_username;
$$ LANGUAGE plproxy;
8. 在P1上测试结果
postgres@barman plproxy-2.5]$ psql -d plproxydb
SELECT insert_user('zhangsan','zhangsan@163.com');
#被保存到D2, 可以用select hashtext('zhangsan') & 1验证,被hash到 partition 1
SELECT insert_user('lisi', 'lisi@163.com');
#被保存到D2, 可以用select hashtext('lisi') & 1验证,被hash到 partition 1
SELECT insert_user('wangwu','wangwu@163.cm');
#被保存到D1, 可以用select hashtext('wangwu') & 1验证,,被hash到 partition 0
SELECT get_user_email('zhangsan');
SELECT get_user_email('lisi');
SELECT get_user_email('wangwu');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值