最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

PostgreSQL 数据库集群和PLproxy配置安装指南

来源:动视网 责编:小OO 时间:2025-10-02 00:59:24
文档

PostgreSQL 数据库集群和PLproxy配置安装指南

PostgreSQL数据库集群和PL/Proxy配置安装指南PostgreSQL数据库集群和PL/Proxy配置安装指南2008年12月31日星期三15:06PL/Proxy和PostgreSQL集群的结构关系可以用下图清楚地表示,对PL/Proxy和PostgreSQL集群还不太了解的朋友可以看SkypePlansforPostgreSQLtoScaleto1BillionUsers这篇文章。以下操作是在三台不同机器上执行的情况,其中plproxy节点的机器名是P1,数据库节点的机器名分别是
推荐度:
导读PostgreSQL数据库集群和PL/Proxy配置安装指南PostgreSQL数据库集群和PL/Proxy配置安装指南2008年12月31日星期三15:06PL/Proxy和PostgreSQL集群的结构关系可以用下图清楚地表示,对PL/Proxy和PostgreSQL集群还不太了解的朋友可以看SkypePlansforPostgreSQLtoScaleto1BillionUsers这篇文章。以下操作是在三台不同机器上执行的情况,其中plproxy节点的机器名是P1,数据库节点的机器名分别是

PostgreSQL 数据库集群和PL/Proxy配置安装指南

PostgreSQL 数据库集群和PL/Proxy配置安装指南

2008年12月31日 星期三 15:06

PL/Proxy和PostgreSQL集群的结构关系可以用下图清楚地表示,对PL/Proxy和PostgreSQL集群还不太了解的朋友可以看Skype Plans for PostgreSQL to Scale to 1 Billion Users这篇文章。

以下操作是在三台不同机器上执行的情况,其中plproxy节点的机器名是P1,数据库节点的机器名分别是D1和D2。机器硬件配置如下,同时需要Linux-4.2、postgresql-8.3.0和plproxy-2.0.4,pgbouncer的安装过程略去。

plproxy节点:

hostname: P1

inet addr:10.0.0.1

OS: Linux 2.6.9-42.ELsmp

CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz

MemTotal: 514440 kB

node1节点:

hostname:D1

inet addr:10.0.0.2

OS: Linux 2.6.9-42.ELsmp

CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz

MemTotal: 254772 kB

node2节点:

hostname:D2

inet addr:10.0.0.3

OS: Linux 2.6.9-42.ELsmp

CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz

MemTotal: 254772 kB

1. 在P1, D1,D2上安装postgresql-8.3.0,并创建URTCluster数据库

## Compile and install

gunzip postgresql-8.3.0.tar.gz

tar xf postgresql-8.3.0.tar

cd postgresql-8.3.0

./configure –prefix=/home/y/pgsql –with-perl

gmake

gmake check

sudo gmake install

## Add Unix User

sudo adduser postgres

sudo mkdir /home/y/pgsql/data

sudo chown postgres /home/y/pgsql/data

## Init DB and Start service

sudo -u postgres /home/y/pgsql/bin/initdb -D /home/y/pgsql/data

sudo -u postgres /home/y/pgsql/bin/postgres -D /home/y/pgsql/data >logfile 2>&1 &

## Create DB and Use Local Connection

sudo -u postgres /home/y/pgsql/bin/createdb URTCluster

##检查数据库是否已经创建

sudo -u postgres /home/y/pgsql/bin/psql -d URTCluster

#D1,D2必须允许P1访问

#编辑postgresql.conf,打开tcp连接端口

sudo vim /home/y/pgsql/data/postgresql.conf

listen_addresses = ‘*’

port = 5432

#添加postgres用户的认证

sudo vim /home/y/pgsql/data/pg_hba.conf

host URTCluster postgres 10.0.0.0/16 trust

# 重起服务器

sudo -u postgres /home/y/pgsql/bin/pg_ctl -D /home/y/pgsql/data stop

sudo -u postgres /home/y/pgsql/bin/postgres -D /home/y/pgsql/data >logfile 2>&1 &

sudo -u postgres /home/y/pgsql/bin/pg_ctl -D /home/y/pgsql/data reload

2. 在P1上安装plproxy-2.0.4

#检查$PATH变量里是否有/home/y/pgsql/bin目录,如果没有,修改你的.bash_profile文件,添加/home/y/pgsql/bin到path里。

echo $PATH

gunzip plproxy-2.0.4.tar.gz

tar xf plproxy-2.0.4.tar

cd plproxy-2.0.4

gmake

sudo gmake install

#创建plproxy

sudo -u postgres /home/y/pgsql/bin/psql -f

/home/y/pgsql/share/contrib/plproxy.sql URTCluster

3. 在P1, D1,D2上安装plpgsql

sudo -u postgres /home/y/pgsql/bin/createlang plpgsql URTCluster

4. 在P1上创建schema

sudo -u postgres /home/y/pgsql/bin/psql -d URTCluster

URTCluster=# create schema plproxy;

5. 在P1上初始化设置

#plproxy的配置是通过三个函数(过程)实现的,这三个函数的标准模版如下:

#这个函数是让plproxy可以找到对应的集群

CREATE OR REPLACE FUNCTION plproxy.get_cluster_partitions(cluster_name text)

RETURNS SETOF text AS $$

BEGIN

IF cluster_name =’URTCluster’ THEN

RETURN NEXT ‘dbname=URTCluster host=10.0.0.2′;

RETURN NEXT ‘dbname=URTCluster host=10.0.0.3′;

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 = ‘URTCluster’ 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;

#把这三个函数放在一个URTClusterInit.sql文件里,并执行

sudo -u postgres /home/y/pgsql/bin/psql -f URTClusterInit.sql -d URTCluster -h 10.0.0.1

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;

#把函数保存在 URTClusterNodesInit_1.sql文件里,并执行

sudo -u postgres /home/y/pgsql/bin/psql -f URTClusterNodesInit_1.sql -h 10.0.0.2 -d URTCluster

sudo -u postgres /home/y/pgsql/bin/psql -f URTClusterNodesInit_1.sql -h 10.0.0.3 -d URTCluster

7. 在P1节点上设置

#在 plproxy 节点上创建一个同名的插入函数,用于进行集群检索

CREATE OR REPLACE FUNCTION insert_user(i_username text, i_emailaddress text)

RETURNS integer AS $$

CLUSTER ‘URTCluster’;

RUN ON hashtext(i_username);

$$ LANGUAGE plproxy;

#在 plproxy 节点上创建一个查询函数,用于进行集群检索

CREATE OR REPLACE FUNCTION get_user_email(i_username text)

RETURNS text AS $$

CLUSTER ‘URTCluster’;

RUN ON hashtext(i_username) ;

SELECT email FROM users WHERE username = i_username;

$$ LANGUAGE plproxy;

#把函数保存在 URTClusterProxyExec.sql文件里,并执行

sudo -u postgres /home/y/pgsql/bin/psql -f URTClusterProxyExec_1.sql -h 10.0.0.1 -d URTCluster

8. 在P1上测试结果

sudo -u postgres /home/y/pgsql/bin/psql -d URTCluster

SELECT insert_user(’Sven’,’sven@somewhere.com’);

#被保存到D2, 可以用select hashtext(’Sven’) & 1验证,被hash到 partition 1

SELECT insert_user(’Marko’, ‘marko@somewhere.com’);

#被保存到D2, 可以用select hashtext(’Marko’) & 1验证,被hash到 partition 1

SELECT insert_user(’Steve’,’steve@somewhere.cm’);

#被保存到D1, 可以用select hashtext(’Steve’) & 1验证,被hash到 partition 0

SELECT get_user_email(’Sven’);

SELECT get_user_email(’Marko’);

SELECT get_user_email(’Steve’);

文档

PostgreSQL 数据库集群和PLproxy配置安装指南

PostgreSQL数据库集群和PL/Proxy配置安装指南PostgreSQL数据库集群和PL/Proxy配置安装指南2008年12月31日星期三15:06PL/Proxy和PostgreSQL集群的结构关系可以用下图清楚地表示,对PL/Proxy和PostgreSQL集群还不太了解的朋友可以看SkypePlansforPostgreSQLtoScaleto1BillionUsers这篇文章。以下操作是在三台不同机器上执行的情况,其中plproxy节点的机器名是P1,数据库节点的机器名分别是
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top