PL/Proxy安装配置

来源:互联网 发布:八音度调音软件 编辑:程序博客网 时间:2024/05/18 03:16
1、环境三台虚拟机系统:red hat6.5ip 192.168.11.65           代理数据库     192.168.11.66          数据节点 db1     192.168.11.67          数据节点db2三台机器上均安装好postgresql数据库版本:postgresql9.4..42、在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 proxydbpsql (9.4.4)Type "help" for help.postgers=#create extension plproxy;创建好模式postgres=#create schema plproxy;3、在d1和d2上建好数据库datadbpostgres@barman1 ~]$ createdb datadb;4、 在P1上初始化设置#plproxy的配置是通过三个函数(过程)实现的,这三个函数的标准模版如下:#这个函数是让plproxy可以找到对应的集群,将三个函数建立在proxydb中CREATE OR REPLACE FUNCTION plproxy.get_cluster_partitions(cluster_name text)RETURNS SETOF text AS $$BEGINIF cluster_name ='cluster1' THENRETURN 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 $$BEGINIF cluster_name = 'cluster1' THENRETURN 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 $$beginkey := 'statement_timeout';val := 60;return next;return;end;$$ language plpgsql;6. 在D1,D2节点上设置#给每个数据库节点都创建一张表usersCREATE 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 plproxydbSELECT insert_user('zhangsan','zhangsan@163.com');#被保存到D2, 可以用select hashtext('zhangsan') & 1验证,被hash到 partition 1SELECT insert_user('lisi', 'lisi@163.com');#被保存到D2, 可以用select hashtext('lisi') & 1验证,被hash到 partition 1SELECT insert_user('wangwu','wangwu@163.cm');#被保存到D1, 可以用select hashtext('wangwu') & 1验证,,被hash到 partition 0SELECT get_user_email('zhangsan');SELECT get_user_email('lisi');SELECT get_user_email('wangwu');

0 0