天天看點

centos6.5下postgres-XC叢集安裝與配置(有standby案例)

前言

最近在學習postgresql,工作中需要,買了一本《PostgreSQL 修煉之道》按照上面操作,幾次按照上面的都是失敗。後面檢視很多資料後,才成功。這是根據這本書第十九章内容修改的地方,希望給廣大學習愛好者幫助。最後希望那些作者,把書寫的詳細一些,把自己做成功的案例寫出來。

一、系統環境

系統平台:centos 6.5

postgres-XC版本: pgxc-v1.2.1.tar.gz

防火牆關閉   selinux設定SELINUX=disabled

二、叢集規劃

主機名

IP位址

角色

端口

nodename

資料目錄

gtm

172.16.0.101

Gtm

6666

/home/pgxc/gtm

standby

172.16.0.102

Gtm的備庫

/home/pgxc/gtm_standby

cd1

172.16.0.103

Coordinator

5432

co1

/home/pgxc/coordinator

Datanode

5433

dn1

/home/pgxc/pgdata

Gtm Proxy

gtmproxy01

/home/pgxc/gtm_proxy

cd2

172.16.0.104

co2

dn2

gtmproxy02

cd3

172.16.0.105

co3

dn3

gtmproxy03

三、安裝依賴包(五台操作)

yum install -y bison flex perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++   openssl-devel cmake

四、增加使用者(五台操作)

groupadd pgxc

useradd pgxc -g pgxc

passwd pgxc

五、源碼安裝(五台操作)

tar zxvf pgxc-v1.2.1.tar.gz

cd postgres-xc-1.2.1/

./configure --prefix=/opt/pgxc --with-perl --with-python

gmake

gmake install

六、配置環境變量(五台操作)

su - pgxc

vi .bash_profile

export PGHOME=/opt/pgxc

export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib

export DATE=`date +"%Y%m%d%H%M"`

export PATH=$PGHOME/bin:$PATH:.

export MANPATH=$PGHOME/share/man:$MANPATH

alias rm='rm -i'

alias ll='ls -lh'

source .bash_profile

七、初始化GTM

在172.16.0.101這台機器上運作如下指令:

[root@gtm ~]# su - pgxc

[pgxc@gtm ~]$ initgtm -Z gtm -D /home/pgxc/gtm

編輯/home/pgxc/gtm/gtm.conf檔案,如下:

nodename = 'gtm'

listen_addresses = '*'

port = 6666 

startup = ACT

配置項的說明如下。

nodename:指定節點的名稱,可能指定為任意的一個名稱,不能與其他節點的名稱重複。

listen_address:GTM監聽的IP位址,“*”在所有的IP位址上監聽

port:GTM監控的端口

startup:确定GTM啟動後是主庫還是standby。如果是主庫,設定為“ACT”,如果是standby,則設定為“STANDBY”。

八、初始化GTM的備庫

在172.16.0.102這台機器上運作如下指令:

[root@standby ~]# su - pgxc

[pgxc@standby ~]$ initgtm -Z gtm -D /home/pgxc/gtm_standby

編輯/home/pgxc/gtm_standby/gtm.conf檔案,如下:

nodename = 'standby'

port = 6666

startup = STANDBY

active_host = '172.16.0.101' 

active_port =6666 

startup:因為是GTM的備庫,是以要設定為“STANDBY”。

active_host:指定連接配接GTM主庫的IP位址

active_port:指定連接配接GTM備庫的端口。

九、初始化GTM Proxy

在172.16.0.103,172.16.0.104,172.16.0.105這三台機器pgxc使用者上,分别執行以下指令:

initgtm -Z gtm_proxy -D /home/pgxc/gtm_proxy

172.16.0.103中配置檔案 /home/pgxc/gtm_proxy/gtm_proxy.conf的内容如下:

nodename = 'gtmproxy01'

gtm_host = '172.16.0.101'

gtm_port = 6666

172.16.0.104中配置檔案 /home/pgxc/gtm_proxy/gtm_proxy.conf的内容如下:

nodename = 'gtmproxy02'

172.16.0.105中配置檔案 /home/pgxc/gtm_proxy/gtm_proxy.conf的内容如下:

nodename = 'gtmproxy03'

十、初始化Coordinator 、資料節點

1.在172.16.0.103這台機器上運作如下指令:

initdb -D /home/pgxc/coordinator --nodename co1 -E UTF8 --local=C -U pgxc -W

initdb -D /home/pgxc/pgdata --nodename dn1 -E UTF8 --local=C -U pgxc -W

172.16.0.103這台機器上 coordinator配置檔案/home/pgxc/coordinator/postgresql.conf的内容如下:

# - Connection Settings -

port = 5432

max_connections = 100

# DATA NODES AND CONNECTION POOLING

#-------------------------------------------

pooler_port = 6667

min_pool_size = 1

max_pool_size = 100

# GTM CONNECTION

#----------------------

gtm_port = 6666 

pgxc_node_name = 'co1'

172.16.0.103這台機器上 coordinator配置檔案/home/pgxc/coordinator/pg_hba.conf的内容如下:

# IPv4 local connections:

host    all             all             127.0.0.1/32            trust

host    all             all             172.16.0.0/24           trust

host    all             all             0.0.0.0/0               md5

172.16.0.103這台機器上資料節點配置檔案/home/pgxc/pgdata/postgresql.conf的内容如下:

port = 5433

#----------------------------------------

pooler_port = 6668  

#min_pool_size = 1 

max_pool_size = 100  

#---------------------------

pgxc_node_name = 'dn1'

172.16.0.103這台機器上資料節點配置檔案/home/pgxc/pgdata/pg_hba.conf的内容如下:

2.在172.16.0.104這台機器上運作如下指令:

initdb -D /home/pgxc/coordinator --nodename co2 -E UTF8 --local=C -U pgxc -W

initdb -D /home/pgxc/pgdata --nodename dn2 -E UTF8 --local=C -U pgxc -W

172.16.0.104這台機器上 coordinator配置檔案/home/pgxc/coordinator/postgresql.conf的内容如下:

pgxc_node_name = 'co2'

172.16.0.104這台機器上 coordinator配置檔案/home/pgxc/coordinator/pg_hba.conf的内容如下:

host    all             all             172.16.0.0/24           trust

172.16.0.104這台機器上資料節點配置檔案/home/pgxc/pgdata/postgresql.conf的内容如下:

pgxc_node_name = 'dn2'

172.16.0.104這台機器上資料節點配置檔案/home/pgxc/pgdata/pg_hba.conf的内容如下:

host    all             all             0.0.0.0/0               md5

3. 在172.16.0.105這台機器上運作如下指令:

initdb -D /home/pgxc/coordinator --nodename co3 -E UTF8 --local=C -U pgxc -W

initdb -D /home/pgxc/pgdata --nodename dn3 -E UTF8 --local=C -U pgxc -W

172.16.0.105這台機器上 coordinator配置檔案/home/pgxc/coordinator/postgresql.conf的内容如下:

pgxc_node_name = 'co3'

172.16.0.105這台機器上 coordinator配置檔案/home/pgxc/coordinator/pg_hba.conf的内容如下:

172.16.0.105這台機器上資料節點配置檔案/home/pgxc/pgdata/postgresql.conf的内容如下:

pgxc_node_name = 'dn3'

172.16.0.105這台機器上資料節點配置檔案/home/pgxc/pgdata/pg_hba.conf的内容如下:

十一、啟動叢集

啟動叢集的順序為:

GTM

GTM Standby

GTP-Proxy

Datanodes

Coordinators

啟動上面示例的叢集的方法如下。

在172.16.0.101機器啟動gtm,指令如下:

[pgxc@gtm ~]$ gtm_ctl -Z gtm start -D /home/pgxc/gtm

在172.16.0.102機器啟動gtm standby,指令如下:

[pgxc@standby ~]$ gtm_ctl -Z gtm_standby start -D /home/pgxc/gtm_standby

可以用下面的指令檢視gtm和gtm standby是否啟動:

[pgxc@gtm ~]$ gtm_ctl -Z gtm status -D /home/pgxc/gtm

gtm_ctl: server is running (PID: 2091)

 "-D" "/home/pgxc/gtm"

1 master

[pgxc@standby ~]$ gtm_ctl -Z gtm_standby status -D /home/pgxc/gtm_standby

gtm_ctl: server is running (PID: 2095)

 "-D" "/home/pgxc/gtm_standby"

0 slave

以上說明啟動成功。

啟動完gtm和gtm_standby後,就可以啟動gtm_proxy了。在172.17.0.103,172.16.0.104,172.16.0.105這三台機器上運作如下指令:

gtm_ctl -Z gtm_proxy start -D /home/pgxc/gtm_proxy

啟動完gtm_proxy就可以啟動Datanodes了。在上述三台機器分别運作如下指令來啟動:

pg_ctl start -D /home/pgxc/pgdata -Z datanode

最後啟動Coordinators。在上述三台機器上運作如下指令啟動:

pg_ctl start -D /home/pgxc/coordinator -Z coordinator

十二、配置叢集節點資訊

在各個Coordinator上,執行如下指令:

下面就執行172.16.0.103主機器上的。其它的大家自己操作。

psql -p 5432 postgres

[pgxc@cd1 ~]$ psql -p 5432 postgres

psql (PGXC , based on PG 9.3.2)

Type "help" for help.

postgres=# select * from pgxc_node;

 node_name | node_type | node_port |  node_host   | nodeis_primary | nodeis_preferred |   node_id  

-----------+-----------+-----------+--------------+----------------+------------------+-------------

 co1       | C         |      5432 | localhost    | f              | f    

           |  1344656819

postgres=#create node dn1 with(type='datanode',host='172.16.0.103',port=5433,primary,preferred);

postgres=#create node dn2 with(type='datanode',host='172.16.0.104',port=5433);

postgres=#create node dn3 with(type='datanode',host='172.16.0.105',port=5433);

postgres=#create node co2 with(type='coordinator',host='172.16.0.104',port=5432);

postgres=#create node co3 with(type='coordinator',host='172.16.0.105',port=5432);

 co1       | C         |      5432 | localhost    | f              | f                |  1344656819

 dn1       | D         |      5433 | 172.16.0.103 | t              | t                |  -560021589

 dn2       | D         |      5433 | 172.16.0.104 | f              | f                |   352366662

 dn3       | D         |      5433 | 172.16.0.105 | f              | f                |  -700122826

 co2       | C         |      5432 | 172.16.0.104 | f              | f                |   474101254

 co3       | C         |      5432 | 172.16.0.105 | f              | f                | -1046823559

(6 rows)

postgres=#select pgxc_pool_reload();

十三、測試

 co1       | C         |      5432 | localhost    | f              | f                |  1344656819

 dn2       | D         |      5433 | 172.16.0.104 | f              | f                |   352366662

 dn3       | D         |      5433 | 172.16.0.105 | f              | f                |  -700122826

 co3       | C         |      5432 | 172.16.0.105 | f              | f                | -1046823559

postgres=# create database text;

CREATE DATABASE

postgres=# \l

                         List of databases

   Name    | Owner | Encoding | Collate | Ctype | Access privileges

-----------+-------+----------+---------+-------+-------------------

postgres  | pgxc  | UTF8     | C       | C     |

 template0 | pgxc  | UTF8     | C       | C     | =c/pgxc          +

           |       |          |         |       | pgxc=CTc/pgxc

 template1 | pgxc  | UTF8     | C       | C     | =c/pgxc          +

 text      | pgxc  | UTF8     | C       | C     |

(4 rows)

以上說明全部安裝成功。

本文轉自 jxzhfei  51CTO部落格,原文連結:http://blog.51cto.com/jxzhfei/1679908

繼續閱讀