在一台機器上運行多個PostgreSQL執行個體

來源:互聯網
上載者:User
    最近要做一些有關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                                             

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.