zoukankan      html  css  js  c++  java
  • PostgreSQL 利用Pgpool-II的集群搭建方案

    PostgreSQL 利用Pgpool-II的集群搭建方案
    1.       下载安装 
     
    在官网 http://pgfoundry.org/projects/pgpool 下载 pgpool-II 2.2.2.tar.gz ,执行以下命令安装: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]#tar xvf pgpool-II 2.2.2.tar.gz    [*]
    [*]#cd pgpool-II 2.2.2
    [*]
    [*]#./ configure; make; make install;   
    #tar xvf pgpool-II 2.2.2.tar.gz #cd pgpool-II 2.2.2 #./ configure; make; make install; 
     
    2.       Parallel_Mode 配置 
     
    数据库的 Patition 可以利用 Pgpool-II 的 Parallel_Mode 来实现,在这种方式下,必须设置另外一个叫做 “System Database” 的数据库(我们称之为 SystemDB )。 SystemDB 保存决定数据如何在各节点中保存的用户定义规则,另一个用途是合并使用数据库链( dblink )从数据库节点返回的结果。 
     
    本文中的配置, Pgpool 和 SystemDB 都放在服务器 192.168.1.239 ,占用端口分别为: 9999 和 5444 。 
     
    配置文件的默认路径是: /usr/local/etc ,首先需要配置 pgpool.conf 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]#cd /usr/local/etc ; cp pgpool.conf.sample pgpool.conf;   
    #cd /usr/local/etc ; cp pgpool.conf.sample pgpool.conf; 
     
    下面是具体的配置过程: 
     
    设置并发查询 
    将 pgpool.conf 文件中的 parallel_mode 参数设置为 true 开启数据库复制功能: 
    parallel_mode = true 
    这样并不能自动开始并发查询, pgpool-II 还需要 SystemDB 以及分布规则来知道如何在各节点中分布数据。 
     
    另外, SystemDB 使用数据库链连接 pgpool-II ,因此,需要设置 listen_addresses 参数好让 pgpool-II 接受这些连接请求: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]listen_addresses = '*'
     
    listen_addresses = '*' 
     
    注意:并发查询和复制是不能共存的,使用并发查询功能时, replication_mode 必须设置为 false 。此外,并发查询和复制采用不同的格式储存数据,这样前边我们创建的 “bench_replication” 数据库无法被重用( reuse )。 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]replication_mode = false
    [*]
    [*]load_balance_mode = false
     
    replication_mode = false load_balance_mode = false 
     
    parallel_mod 设置为 true 、 listen_addresses 设置为 '*' 、 replication_mode 和 load_balance_mode 设置为 false 。 
     
    配置 SystemDB 
     
    SystemDB 仅仅是一个安装有数据库链的数据库,数据表 “dist_def” 被用来保存数据分布规则。可以在单独的电脑中放置 SystemDB ,也可以与数据库节点之一共存。 
     
    在服务器 192.168.1.121 上的 5444 端口上创建 SystemDB ,下边是 SystemDB 的参数设置列表: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]system_db_hostname = '192.168.1.121'
    [*]
    [*]system_db_port = 5444
    [*]
    [*]system_db_dbname = 'pgpool'
    [*]
    [*]system_db_schema = 'pgpool_catalog'
    [*]
    [*]system_db_user = 'pgpool'
    [*]
    [*]system_db_password = ''
     
    system_db_hostname = '192.168.1.121' system_db_port = 5444 system_db_dbname = 'pgpool' system_db_schema = 'pgpool_catalog' system_db_user = 'pgpool' system_db_password = ''
     
    事实上,这是 pgpool.conf 中的缺省设置。 
     
    然后创建叫做 “pgpool” 的用户,再创建所有者为 “pgpool” 的数据库 “pgpool” : 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]#createuser -p 5444 pgpool    [*]
    [*]#createdb -p 5444 -O pgpool pgpool   
    #createuser -p 5444 pgpool #createdb -p 5444 -O pgpool pgpool 
     
    安装数据链 
     
    接下来,必须将数据库链安装到 “pgpool” 数据库,它是包含在 PostgreSQL 源代码 contrib 目录下的工具之一。 
     
    在“pgpool” 数据库中定义数据库链函数。PostgreSQL 安装在/opt/PostgresPlus/8.3AS ,dblink.sql (函数定义文件)会被放置在/opt/PostgresPlus/8.3AS/dbserver/share/contrib 中,运行如下命令创建函数: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]# edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/contribdblink.sql -p 5444 pgpool   
    # edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/contribdblink.sql -p 5444 pgpool 
     
    定义 dist_def 数据表 
     
    接下来,定义数据库表“dist_def” 存放数据分布规则。安装pgpool-II 时,system_db.sql 文件放置在/opt/PostgresPlus/8.3AS/dbserver/share /system_db.sql (这里我们使用缺省安装路径),它包括了一些包括“dist_def” 在内的特殊用途数据表,执行下边的命令创 建dist_def 数据表: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]# edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/system_db.sql -p 5444 -U pgpool pgpool   
    # edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/system_db.sql -p 5444 -U pgpool pgpool 
     
    定义数据分布节点 
     
    例子中的三个分布节点,分别为:192.168.1.239:5444 , 192.168.1.201:5444, 192.168.1.201:5443 
     
    在pgpool.conf 中定义这三个节点: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]backend_hostname0 = '192.168.1.239'
    [*]
    [*]backend_port0 = 5444
    [*]
    [*]backend_weight0 = 1
    [*]
    [*]backend_data_directory0 = '/usr/postgresql/data'
    [*]
    [*]backend_hostname1 = '192.168.1.201'
    [*]
    [*]backend_port1 = 5444
    [*]
    [*]backend_weight1 = 1
    [*]
    [*]backend_data_directory1 = '/usr/postgresql/data'
    [*]
    [*]backend_hostname2 = '192.168.1.201'
    [*]
    [*]backend_port2 = 5443
    [*]
    [*]backend_weight2 = 1
    [*]
    [*]backend_data_directory2 = '/usr/postgresql/data2'
     
    backend_hostname0 = '192.168.1.239' backend_port0 = 5444 backend_weight0 = 1 backend_data_directory0 = '/usr/postgresql/data' backend_hostname1 = '192.168.1.201' backend_port1 = 5444 backend_weight1 = 1 backend_data_directory1 = '/usr/postgresql/data' backend_hostname2 = '192.168.1.201' backend_port2 = 5443 backend_weight2 = 1 backend_data_directory2 = '/usr/postgresql/data2' 
     
    检验并发查询 
     
    重新启动pgpool-II 载入pgpool.conf 的变化,然后我们来检验一下并发查询是否在正常运行。 
     
    首先,命名为“bench_parallel” 的分布数据库,通过pgpool-II 创建到每一个节点上: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]$ createdb -p 9999 bench_parallel   
    $ createdb -p 9999 bench_parallel 
     
    接下来,生成测试数据: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]$ pgbench -i -s 3 -p 9999 bench_parallel   
    $ pgbench -i -s 3 -p 9999 bench_parallel 
     
    这时可以用数据库工具分别查看各节点的数据来确认结果。也可以在 Pgpool 的服务端口进入 SQL 操作来查看数据: 
     
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]#ebd-psql –p 9999 bench_parallel    [*]
    [*]#select * from accounts;   
    #ebd-psql –p 9999 bench_parallel #select * from accounts; 
     
    此时三个节点的数据可以通过一个共同的接口跟应用进行关联,该接口就是pgpool ,默认端口为9999 。 
     
    启动/关闭pgpool-II启动pgpool-II,在终端之上使用如下命令: 
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]$ pgpool  
    $ pgpool这个命令会把日志输出在终端上,因此推荐使用如下选项: 
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]$ pgpool -n -d > /tmp/pgpool.log 2>&1 &  
    $ pgpool -n -d > /tmp/pgpool.log 2>&1 &使用-n选项,pgpool-II作为非deamon进程运行,不会与终端脱离,这个选项需要将日志信息重定向至某个文件中。选项-d指令生成debug信息。 
     
    停止pgpool-II,使用如下命令: 
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]$ pgpool stop  
    $ pgpool stop如果有客户端正在连接,pgpool-II会等待他们断开,然后才停止。如果需要强制终止,使用下边的命令: 
    Java代码 http://mengqingyu.javaeye.com/images/icon_copy.gif
     
    [*]$ pgpool -m fast stop  
    $ pgpool -m fast stop
     
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xtlog/archive/2009/05/27/4219353.aspx 
    http://blog.csdn.net/joliny/archive/2008/01/25/2065426.aspx
    renxiao2003 发表于 2011-01-31 22:00:37
    本文翻译自源代码包中的“pgpool-II Tutorial”文档
    "pgpool-II " 是pgpool 的下一代产品。
    PostgreSQL 专用的所谓「连接池(pool)」服务器, PostgreSQL 客?端 和 PostgreSQL Server 之间做?者的媒介.根据利用 pgpool 做的事务, 能降低对 PostgreSQL server的连接overhead,能使之提高系?负载量.
     
    PostgreSQL 的客?端连接到 pgpool 的话, 当第一回 PostgreSQL 的连接被 pgpool 建立.
    对有客?端?束或者 PostreSQL 的连接不切断的情况下, 下次同样的用?, 资料库对 pgpool 的连接的?候这个 PostgreSQL 的连接会被再利用.
     
    再者, 因?pgpool有「Hot-Backup」的机制, 能按住到最小限度系?的 down time.
     
    另外 pgpool「replication」也可行的.根据使用replication的事, 物理地? 2 台Server 时时的地取得故障的接应 当软件故障发生也能继续提供服务.
    (如果第一服务器down下?, pgpool 自?地?提交给次要伺服器。)
     
    pgpool 的 replication 因?根? 2 台伺服器?送同?的查?的事?行, 所?同期 replication 的就是一?.
     
    再者,?在,replication以只2台,3台以上的replication不能.
     
    pgpool 有著分配?索??(SELECT)?2台伺服器的?荷分散?能.
    根???能大幅度提高?索性能.
    下面我们来安装pgpool-ii 
    安装pgpool-II
    安装pgpool-II是件非常容易的事情,在解压缩的源代码tar包目录中运行如下命令:
    $ ./configure
    $ make
    $ make install 
     
    configure命令收集系统信息并将它们用在编译过程中,可以传递命令行参数给configure脚本来控制它的行为,比如安装目录,缺省情况下将安装到/usr/local之下。
    make命令编译源代码,make install安装编译后的可执行文件,在要安装的目录中必须具有写权限。
    本指南将使用缺省安装目录/usr/local。
     
    注意:pgpool-II需要PostgreSQL 7.4或者更高版本的libpq库(第三版本协议),如果configure脚本显示类似下边的错误信息,可能是没有安装libpq库或者它不支持第三版协议:
    configure: error: libpq is not installed or libpq is old
    (这里与前边讲最低支持6.4的说法冲突,看起来这个更可信。)
     
    如果确信是支持第三版协议的libpq库,但是仍然收到这样的错误信息,可能是因为configure脚本没有正确识别它。
    configure脚本在/usr/local/pgsql下搜索libpq库,如果PostgreSQL安装在其他目录,使用--with-pgsql或者是--with-pgsql-includedir和--with-pgsql-libdir命令行参数来指定它。
     
    配置文件
    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 
     
    本指南将使用缺省参数。
     
    配置PCP命令
    pgpool-II有一个出于管理目的可以通过网络查询数据库节点信息、关闭pgpool-II等功能的接口(interface)。使用PCP命令首先必须通过用户验证,它不同于PostgreSQL的用户验证,需要在pcp.conf中定义用户名和密码。文件中的用户名/密码成对出现在每一行,用冒号隔开,密码是md5格式:
    postgres:e8a48653851e28c69d0506508fb27fc5
     
    安装pgpool-II时,自动建立pcp.conf.sample文件,推荐拷贝并且重命名以后再编辑:
    $ cp /usr/local/etc/pcp.conf.sample /usr/local/etc/pcp.conf
     
    使用pg_md5命令可以将密码加密为md5格式,它是作为pgpool-II可执行部分安装的,pg_md5使用一个文本作为参数,然后显示出这个文本的md5加密文本。
    例如: 将“postgres”作为参数传递给pg_md5,pg_md5将把md5加密过文本打印到标准输出:
    $ /usr/bin/pg_md5 postgres
    e8a48653851e28c69d0506508fb27fc5
     
    PCP命令通过网络执行,因此必须在pcp.conf文件中使用pcp_port设置监听端口。
    本指南将使用pcp_port的缺省值:
    pcp_port = 9898
     
    设置数据库节点
    现在,我们要设置pgpool-II的后端数据库,它们可以跟pgpool-II在同一台主机上,也可以在独立的机器上。如果放在同一主机之上,每个数据库服务器必须使用不同的端口。如果放在其他独立的机器上,必须设置它允许接受来自pgpool-II的连接请求。
     
    本指南中,我们将在pgpool-II的同一个服务器上放置三个数据库,分别使用5432、5433、5434端口。在pgpool-II的配置文件pgpool.conf中作如下设置:
    backend_hostname0 = 'localhost'
    backend_port0 = 5432
    backend_weight0 = 1
    backend_hostname1 = 'localhost'
    backend_port1 = 5433
    backend_weight1 = 1
    backend_hostname2 = 'localhost'
    backend_port2 = 5434
    backend_weight2 = 1
    backend_hostname、backend_port、backend_weight分别设置节点的主机名、端口号、负载平衡比率,每一个参数名字符串的最后必须描述一个从0开始(1、2、3???)的节点ID。
     
    backend_weight参数全部设置为1,意味着SELECT查询将平均分配到三个数据库中。
     
    启动/关闭pgpool-II
    启动pgpool-II,在终端之上使用如下命令:
    $ pgpool
    这个命令会把日志输出在终端上,因此推荐使用如下选项:
    $ pgpool -n -d > /tmp/pgpool.log 2>&1 &
    使用-n选项,pgpool-II作为非deamon进程运行,不会与终端脱离,这个选项需要将日志信息重定向至某个文件中。选项-d指令生成debug信息。
     
    停止pgpool-II,使用如下命令:
    $ pgpool stop
    如果有客户端正在连接,pgpool-II会等待他们断开,然后才停止。如果需要强制终止,使用下边的命令:
    $ pgpool -m fast stop
  • 相关阅读:
    16-高级指针
    15-C语言结构体
    14-C语言宏
    13-C语言字符串函数库
    12-C语言字符串
    11-C语言指针
    10-C语言函数
    POJ 1001 高精度乘法
    POJ 1060 多项式乘法和除法取余
    POJ 1318 字典排序
  • 原文地址:https://www.cnblogs.com/devgis/p/14180890.html
Copyright © 2011-2022 走看看