Ubuntu下PostgreSQL数据库集群(PL/Proxy)配置方法

2014-11-24 18:22:46 · 作者: · 浏览: 0

原理只是一个概念,可操作性不强,看了N多的半原理半细节的相关文章,却总是被各种各样的细节困惑住。为了自己下次能够快速的使用PostgreSQL,以流水帐的方式记录配置PostgreSQL集群的步骤有些结论是自己猜想的或者引用的,以后发现错误再修正吧。
顺便发些感想(跳过下面一段,都是题外话,其实就是废话):
其实很多东西,从原理上说都很简单,几乎我们每个人都能说上一点。但是实际上,原理性的文章一般可操作性都不是很强。我个人觉得,如果目标是给自己看或者目标是让团队的人能够读懂并可以操作的文章,还是应该多一些细节描述,用文学的观点来说,就是表现手法要细腻一些。


Over,转入正题:


首先解释一下数据库集群:N个数据库堆到一起,找一个当个头头,管理所有的数据库并让它们协同工作。当然了,要不要找个头头,找几个头头,如何协作等等问题这些都可以商量和约定,因此,也就形成了不同的数据库集群。
如果数据库系统是PostgreSQL,这个集群就是PostgreSQL数据库集群
PostgreSQL数据库管理集群的方法有很多,有人提出了PL/Proxy方式的集群(这才是本文的重点)。这个PL/Proxy方式的集群是这样的:有很多安装了PostgreSQl数据库的计算机,有台计算机是头头,我们把这个头头叫做proxy,其他的叫做database0,database1……。当然名字叫什么是无所谓的,关键是有个是头头,其他的受头头指挥。


看了原理图,是不是觉得很简单,稍微了解技术的人都能想到这种架构。既然这么简单,那就开始创建一个数据库集群吧,需求如下


1.创建一个如集群结构图所示的集群,数据库集群中均操作同一个数据库“JiwanCluster”
2.用户通过客户端操作proxy节点在集群中一个表user(说白了就是要通过集群的方法在Database0和Database1的JiwanCluster中创建一个叫做user的表);
3.用户通过客户端操作proxy节点在集群上插入多个记录信息到集群的user表上(需要把插入操作分布到两个Database节点上);
4.用户通过客户端操作proxy节点在集群上查询集群上的所有user记录


需求不算难吧,不过很不幸,如果你对PostgreSQL不熟悉的话,你仍然搭建不了数据库(反正我看了原理后,还是搭建不了)。原理嘛,这东西太官方了,来点操作性较强的步骤(版本号需要留意一下,版本不同的话,可能会导致情况大不相同):


可以创建虚拟机的软件如VMWare, VirtualPC, Xen等等,本文的实验用的是VMWare,原因是我对VMWare比较熟悉;


这个嘛,没有什么说的,但是对于新人,这个到西还要再说一下。你可以到Ubuntu的官方网站http://www.ubuntu.com/上找到下载地址,我当时的下载的地址是http://ubuntu.positive-internet.com/releases/lucid/ubuntu-10.04-desktop-i386.iso


——–章节凌乱,先来个“完美分割线”——–
PS:现在的三台机器都能提供数据库服务了,而且在任何一台机器使用客户端都可以自由的访问其他数据库服务器中的”JiwanCluster”数据库,不过他们还不是集群,仅仅是可以相互访问的数据库服务器而已,他们之间没有任何协作关系。下面创建PL/Proxy方式的协作关系(嫌这个词太土?!那就换一个:创建PostgreSQL 数据库集群)。
——–章节凌乱,先来个“完美分割线”——–


sudo apt-get install postgresql-8.4-plproxy


下面是解释,不想了解的话,可以直接跳过。


这一步的目的是:使proxy节点知道怎样指挥集群(实验中,就是指挥database0和database1),换句话就是说,让prxoy知道三件事情:
怎样把用户的SQL请求发送给集群的节点;
怎样接受集群的处理结果;
怎样将处理后的结果返回给用户。


这一步的实质是:复制plproxy.so文件到目录”/user/lib/postgresql/8.5/lib”的下面;复制plproxy.sql文件到目录”/usr/share/postgresql-8.4-plproxy”下面(这个目录是安装程序创建的,plproxy.sql文件是给下一步创建plproxy语言使用的,不是必须的,完全可以在需要的时候自己写相应的SQL语句)。这两个文件的存在是这一步安装成功的一个标志。
需要注意的是:安装过程语言是对数据库系统而言的,可以认为仅仅是复制了一些需要的文件而已,之后使用这个过程语言的之前,还要分别为每一个需要使用此过 程语言的数据库创建这个语言(说白了,就是还要告诉每个数据库到那里找相应的文件plproxy.so文件,下一步有解释)。