作者:icyriver
来源:http://icyriver.net/?p=176
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’);
分享到:
相关推荐
通过以上步骤,您已经成功安装并配置了一个包含两个数据库节点和一个 PL/Proxy 节点的 PostgreSQL 数据库集群。接下来可以根据具体业务需求进一步配置 PL/Proxy 来实现负载均衡等功能。 ### 总结 本文详细介绍了...
PostgreSQL是一款功能强大且开源的关系数据库管理系统,本文将详细指导您如何从源码安装和编译PostgreSQL。 环境准备 在开始安装之前,需要准备好基础环境,包括配置主机的/etc/hosts文件,使用vim编辑器编辑文件...
本文将详细介绍如何构建基于PostgreSQL的数据库集群,并引入PL/Proxy作为负载均衡器以提高整个系统的可扩展性和可用性。 #### 二、PostgreSQL集群概述 PostgreSQL集群通常由多个PostgreSQL实例组成,这些实例可以...
1. **配置plproxy**:首先设置plproxy,使其能够识别并连接到集群中的各个PostgreSQL数据库节点。 2. **数据分发策略**:定义合适的数据分发策略,例如使用哈希算法将数据均匀分布到不同的节点上。 3. **故障恢复...
【PostgreSQL 12主从集群安装】 在搭建PostgreSQL 12主从集群时,首先需要理解主从复制的概念。主从复制是数据库高可用性的一种常见解决方案,它允许数据从一个节点(主节点)实时同步到另一个或多个节点(从节点)...
pl/proxy的安装,部署,以及例子,英文版本 针对postgresql集群
一切都从为高效的PostgreSQL数据集群的框架选取硬件开始,然后从一些管理员通常面对的真实问题的解决来缩短宕机时间,接着,我们加入数据库监控到软件栈中,使用collectd, Nagios, 和Graphite。没有加入复制机制的...
基于 Linux 的 PostgreSQL 数据库部署以及 PostGIS 安装 在本文中,我们将介绍如何在 Linux 操作系统上部署 PostgreSQL 数据库,并安装 PostGIS。PostgreSQL 是一个功能强大且开源的关系数据库管理系统,而 PostGIS...
PostgreSQL数据库内核分析PostgreSQL数据库内核分析PostgreSQL数据库内核分析PostgreSQL数据库内核分析PostgreSQL数据库内核分析PostgreSQL数据库内核分析PostgreSQL数据库内核分析PostgreSQL数据库内核分析...
1.nacos服务,适配postgresql数据库。 2.提供nacos,postgresql的创建nacos数据库脚本。 3.nacos/conf/nacos-pg.sql数据库脚本文件。 4.nacos版本1.4.2。
PostgreSQL数据库内核分析.pdf
本教程将详细介绍如何手动安装PostgreSQL数据库,并配置主从复制,以实现数据的安全备份和高可用性。 一、手动安装PostgreSQL 1. **系统准备**:首先确保你的操作系统(如Ubuntu、CentOS或Windows)支持PostgreSQL...
PostgreSQL是一种流行的开源关系型数据库管理系统,以其强大的功能和稳定性受到广大开发者喜爱。Python作为一种易学且功能丰富的编程语言,常用于与数据库交互,进行数据处理和自动化任务。本主题将围绕使用Python...
在Java编程中,连接到PostgreSQL数据库通常需要特定的驱动程序,这个驱动程序通常是以JAR(Java Archive)文件的形式存在。"连接postgresql数据库需要的jar包"指的是用于建立Java应用程序与PostgreSQL数据库之间通信...
本文将指导您使用 Bucardo 搭建 PostgreSQL 数据库双主同步,涵盖 Bucardo 的介绍、搭建前准备、安装 Perl 和 PostgreSQL、安装依赖包等方面的知识点。 一、Bucardo 介绍 Bucardo 是针对 PostgreSQL 数据库开发的...
具体路径依系统而定,通常安装路径可能类似于 `/opt/PostgreSQL/9.5/bin/`。 总的来说,PostgreSQL的备份和恢复功能十分强大且灵活,通过命令行工具可以实现对数据库的全面管理和维护。尽管文档内容可能存在扫描...
PostgreSQL数据库内核分析 清晰版,完整415页
《PostgreSQL数据库内核分析》彭智勇 完整版44M
3. **编译和安装**:解压源码包后,进入目录,运行以下命令进行配置,确保在配置时启用PL/Python模块: ``` ./configure --with-python ``` 然后编译和安装: ``` make sudo make install ``` 4. **创建...