pgpool-II 数据库集群工具的安装配置(主要是记录下安装过程当中遇到的问题)

前部分:php

  1. 下载:下载后的源码包中就包含中文手册和入门教程。html

    http://www.pgpool.net/mediawiki/index.php/Downloadssql

    记住,ubuntu的话,挑选源代码下载!不然./configure的时候会报".PO"文件缺失的错误!数据库

  2. 安装:ubuntu

    ①./configure服务器

    ②make&&make install网络

  3. 配置:并发

    pgpool-II 的配置参数保存在 pgpool.conf 文件中。文件以每行 “parameter = value” 的格式保存。当你安装 pgpool-II 后, pgpool.conf.sample 被自动创建。咱们建议拷贝或者重命名它为 pgpool.conf ,而后你能够随意编辑它。函数

        

        $ cp /usr/local/etc/pgpool.conf.sample /usr/local/etc/pgpool.confpost

        pgpool-II 默认只接受到 9999 端口的本地链接。若是你但愿从其余主机接受链接,请设置 listen_addresses 为 '*'.

        

        listen_addresses = 'localhost'

        port = 9999

    4.启动:

    pgpool -n &

    注意:若是提示“could not open pid file as /var/run/pgpool/pgpool.pid. reason: No such file or directory”,则新建/var/run/pgpool目录,并赋予写权限,或者修改pgpool.conf文件的pid_file_name选项,修改文件路径保证当前用户可访问控制。


  5建立system_db的调度函数:

            

            CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_branches(anyelement)

              RETURNS integer AS

            $BODY$

                SELECT CASE WHEN $1 >= 1 and $1 <= 30000 THEN 0

            WHEN $1 > 30000 and $1 <= 60000 THEN 1

            ELSE 2

             end;

            $BODY$

              LANGUAGE sql VOLATILE

              COST 100;

            ALTER FUNCTION pgpool_catalog.dist_def_branches(anyelement) OWNER TO postgres;

安装过程基本参考了(就是手册和入门教程):http://pgpool.projects.pgfoundry.org/pgpool-II/doc/tutorial-zh_cn.html

    6.结果验证:

        貌似全网的教程都没什么具体的验证方法(手册中的验证方法也不提示结果,模棱两可;并且我是在多个服务器上搭建的集群,不能直接用)。我这里大体记录了一下验证方法。前提是,已经使用pgbench -p 9999向数据库中插入测试数据。

        首先,我这里设置的pgpool监听端口号是9999,数据库集群(initdb)配置的端口号是5432.这种状况下,使用psql -p 9999 bench_parallel和psql -p 5432 bench_parallel均可以链接到bench_parallel数据库(测试并发模式的数据库)

        而后,使用9999端口登陆数据库时,执行"select count(1) from pgbench_accounts;",得到的结果应该是被分发到各个服务器上数据的总和(经由pgpool获取查询结果);使用5432端口登陆数据库时,执行"select count(1) from pgbench_accounts;",得到的结果应该是只存在本地数据库中的数据条目。

        最后说一句,不出意外的话,pgadmin链接到的服务器应该是5432,也就是说,在pgadmin上看到的数据仅仅是本地数据库中存储的数据。若是你配置的是并发模式,并且在pgadmin上看到的是测试数据的总数,那么极可能和我犯了一样的毛病,这个问题在后半部分有解释


后半部分:问题记录:

①编译pgbench时发现问题:Makefile:19: ../../src/Makefile.global: No such file or directory,

其实这种问题的缘由都是,源代码解压事后,configure没有运行过,因此从新回到最高层./configure,会把缺失的文件补全。

②编译pgbench时发现问题:pgbench# make all以后:/usr/bin/ld: cannot find -lpgport。libpgport存在于/usr/local/pgsql/lib中,cp /usr/lcoal/pgsql/lib/libpgport.a /usr/local/lib.便可解决


③启动pgpool时:

bind(0.0.0.0:9999) failed. reason: Address already in use

碰见这个问题,说明9999端口被其它程序占用。

执行命令 lsof|grep 9999,查看9999端口被哪一个进程占用。结果是pgpool。因此killall pgpool便可解决问题。

注意,若是报错bind(0.0.0.0:postgresql) failed. reason: Address already in use,那说明你的端口号设成了5432,和postgresql相同,重启服务器是否可以成功还没有可知。

pgpool只进入重用(replication),不进入并发(parallel)模式

按照入门教程一步一步配置下来发现,每一步都没有问题,可是执行pgbench -i -s 3 -p 9999 bench_parallel后,发现每个数据库节点都是完整的存了一份数据,即使是将bench_parallel数据库单独放置在一个文件夹(表空间)中,也一样能看出文件大小是同样的,51M。

先后拖了将近一周,今天仔细的 看了一下数据分布表dist_def,突然发现,table_name列中,值是“accounts”,而数据库bench_parallel中的表名是"pgbench_accounts"。。。。这个问题好囧,表名改为pgbench_accounts,而后再用pgbench向节点插数据,会发现插入的速度明显下降,甚至能够说是至关慢。固然,这是在将数据分区(节点)存储,效率必定会低,这样插入的数据才是个人目标--并发。

⑤对端口号加深了理解:

    原本这对我来讲是模棱两可的概念,可是在研究上个问题的过程当中,

又对相关知识进行了了解,汗。。。端口号嘛,每一个IP肯定一个主机,每一个主机能够提供许多网络服务,这些网络服务同时使用一个IP,很难辨识,因此有了端口号的概念,也就是一个IP加一个端口号,能够肯定一个服务。

这里,postgresql数据库服务器中,先用initdb初始化一个数据库集群(具体可查pgsql/bin/initdb --help),这里定义了一个端口号,默认5432。固然,每个服务器上不必定只有一个数据库集群,这时,能够新建另外一个端口号的数据库集群。

相关文章
相关标签/搜索