postgresql多个实例

    最近要做一些有关PostgreSQL多实例运行的例子,一般都普遍需要在不同的机器上安装上PostgreSQL Server,然后在不同的机器上进行配置,比如通过plproxy进行一些demo的设置。当然这样的需求可以通过多个虚拟机的方式实现,比如创建多个vmware的虚拟机,大家一起跑就是了。不过这样有点资源浪费,而且需要维护不同的机器。尝试着在同一台机器上运行多个PostgreSQL Server实例来完成需要。

    目标: 在一台机器上运行多个PostgreSQL Server实例.
    运行环境:Ubnntu 8.04.1(vmware中运行)

    1. 首先通过sudo apt-get install postgresql安装上PostgreSQL Server。在安装的过程中会建议安装其它有关的pkg,可以都装上,最后安装完成后最好有以下包列表:
        postgresql
        postgresql-8.3
        postgresql-client-8.3
        postgresql-client-common
        postgresql-common
      安装完成后,apt-get会自动根据安装脚本完成PostgreSQL的数据库初始化工作,并启动一个PostgreSQL实例(称为一个cluster),且该实例的名称是:main. 请记住main,我们在后面还会用到。
    2. 修改文件
       2.1 修改/usr/bin/pg_ctlcluster
       /usr/bin/pg_ctlcluster是用以控制PostgreSQL Server启动、停止、重启的脚本,便于完成对PostgreSQL Server的控制。默认的PostgreSQL cluster只能通过本地访问,不能通过TCP/IP以网络方式进行。修改/usr/bin/pg_ctlcluster文件,把253行修改为以下内容:
  1. 253     my $postmaster_opts = '-i';
  2. 254     if (!(PgCommon::get_conf_value $version, $cluster, 'postgresql.conf''unix_socket_directory')) {
  3. 255     $postmaster_opts .= '-c unix_socket_directory="' . $info{'socketdir'} . '"';
  4. 256     }
        通过加上 -i 参数,使得通过pg_ctlcluster启动的PostgreSQL Cluster能够接受网络访问。
       2.2 修改/etc/postgresql/8.3/main/pg_hba.conf文件
       该文件是PostgreSQL Server完成对客户身份鉴别的配置文件,详细内容可参见 这里。在此文件内容中添加一行如下的内容(如果是线上的机器,千万别这么做,太危险了。):
  1. host    all         all         0.0.0.0 0.0.0.0           trust
       然后运行sudo -u postgres /usr/bin/pg_ctlcluster 8.3 main restart 重新启动。
       启动完成后,运行 ps -ef | grep postgres 可在console中看到如下内容:
  1. postgres  4890     1  0 10:38 ?        00:00:01 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/postgresql/8.3/main -i -c config_file=/etc/postgresql/8.3/main/postgresql.conf
  2. postgres  4897  4890  0 10:38 ?        00:00:00 postgres: writer process                                                      
  3. postgres  4898  4890  0 10:38 ?        00:00:00 postgres: wal writer process                                                  
  4. postgres  4899  4890  0 10:38 ?        00:00:00 postgres: autovacuum launcher process                                         
  5. postgres  4900  4890  0 10:38 ?        00:00:00 postgres: stats collector process                                             
  6. xuepeng   6068  5940  0 11:01 pts/0    00:00:00 grep postgres
       我们的第一个pgcluster(名称为main)已经正常运行。

    3. 创建第二个pg cluster
       默认的pg cluster的名称为main,我们创建的第二个cluster名称为pgD1(当然你可以随意命名,完全是自由的)。首先我们能想到的是main和pgD1应该运行在不同的端口号上。main使用默认的5432,为便于记忆,那我们让pgD1使用5433。其次,不同的cluster还必须使用不同数据文件目录,也就是ps结果中 -D /var/lib/postgresql/8.3/main 所代表的值。每一个运行的cluster都需要使用自己私有的数据文件,保存表、视图、函数、触发器等等一切的东西。因此我们需要一个不同的数据文件目录。以上两个方面是最重要的。
      其实,在安装PostgreSQL的过程中已经安装了几个对pgcluster的维护脚本,上面的/usr/bin/pg_ctlcluster只是其中的一个。创建新的cluster可以使用/usr/bin/pg_createcluster来完成,非常方便。
      在创建之前,为便于概念的理解,我们使用useradd pgD1完成ubuntu的帐号创建,并使用该帐号作为pgD1的默认owner和superuser。  
  1. sudo /usr/bin/pg_createcluster -u 1001 -g 1001 -d /var/lib/postgresql /8.3/D1 -s /var/run/pgD1 --local zh_CN.UTF-8 -e utf8 -p 5433 --start --start-conf auto 8.3 pgD1
      上述命令执行完成后即完成了名为pgD1的cluster的创建。-u 和-g 参数指明该cluster的默认owner和group,其它参数可参见pg_createcluster的help,很容易理解。

       完成创建后,pgD1的配置文件都在/etc/postgresql/8.3/pgD1/目录下。为了同样的原因,我们需要在/etc/postgresql/8.3/pgD1/pg_hba.conf中增加下述内容:
  1. host    all         all         0.0.0.0 0.0.0.0           trust
      最后,运行 sudo -u pgD1 /usr/bin/pg_ctlcluster 8.3 pgD1 restart 完成重启, 名称为pgD1的cluster创建完成。

    4. 按照上述步骤,可以继续创建新的pgcluster,pgD2, pgD3.....
  1. $ ps -ef | grep postgres
  2. postgres  4890     1  0 10:38 ?        00:00:01 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/postgresql/8.3/main -i -c config_file=/etc/postgresql/8.3/main/postgresql.conf
  3. postgres  4897  4890  0 10:38 ?        00:00:01 postgres: writer process                                                      
  4. postgres  4898  4890  0 10:38 ?        00:00:01 postgres: wal writer process                                                  
  5. postgres  4899  4890  0 10:38 ?        00:00:00 postgres: autovacuum launcher process                                         
  6. postgres  4900  4890  0 10:38 ?        00:00:00 postgres: stats collector process                                             
  7. pgD1      6304     1  0 11:38 ?        00:00:00 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/postgresql/8.3/D1 -i -c config_file=/etc/postgresql/8.3/pgD1/postgresql.conf
  8. pgD1      6311  6304  0 11:38 ?        00:00:00 postgres: writer process                                                      
  9. pgD1      6312  6304  0 11:38 ?        00:00:00 postgres: wal writer process                                                  
  10. pgD1      6313  6304  0 11:38 ?        00:00:00 postgres: autovacuum launcher process                                         
  11. pgD1      6314  6304  0 11:38 ?        00:00:00 postgres: stats collector process                                             
  12. pgD2      6570     1  3 11:47 ?        00:00:00 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/postgresql/8.3/D2 -i -c config_file=/etc/postgresql/8.3/pgD2/postgresql.conf
  13. pgD2      6576  6570  0 11:47 ?        00:00:00 postgres: writer process                                                      
  14. pgD2      6577  6570  0 11:47 ?        00:00:00 postgres: wal writer process                                                  
  15. pgD2      6578  6570  0 11:47 ?        00:00:00 postgres: autovacuum launcher process                                         
  16. pgD2      6579  6570  0 11:47 ?        00:00:00 postgres: stats collector process                                             

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL多中心部署是指在不同地理位置或数据中心中设置多个独立的PostgreSQL数据库,通过网络专线进行连接和数据复制的一种架构部署方式。 为了实现PostgreSQL多中心部署,首先需要在每个数据中心内部配置和部署独立的PostgreSQL数据库实例。每个数据库实例都可以独立地进行数据读写操作和查询。然后,在不同的数据中心之间建立网络专线连接,以确保数据的有效传输和同步。 网络专线是一种专门用于连接远程数据中心的高速、低延迟的网络连接方式。它可以提供更高的带宽和更稳定的连接,以确保数据在多个数据中心之间的可靠传输。网络专线能够减少数据传输时的网络延迟和丢包现象,提高系统的性能和稳定性。 通过网络专线连接的多个PostgreSQL数据库之间可以进行数据的同步和复制。一般采用主从复制的方式,其中一个数据库作为主节点(master),负责接收和处理所有的写操作,而其他数据库作为从节点(slave),负责复制主节点的数据变更。通过设置适当的配置和参数,可以确保数据在多个数据中心之间的一致性和可靠性。 综上所述,PostgreSQL多中心部署网络专线是一种将多个独立的PostgreSQL数据库连接起来,在不同数据中心之间进行数据的同步和复制的部署方式。通过网络专线连接,可以实现高速、低延迟的数据传输,提高系统的可用性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值