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

女生的网名这么多〃 提交于 2020-02-28 12:36:47

前部分:

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

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

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

  2. 安装:

    ①./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.conf

        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。当然,每一个服务器上不一定只有一个数据库集群,这时,可以新建另一个端口号的数据库集群。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!