前言
最近在學習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