Postgre-XC搭建

本文档详细介绍了如何在五台机器上搭建PostgreSQL-XC集群,包括安装依赖、配置环境变量、创建数据目录、初始化GTM、GTM备库、GTM Proxy、Coordinator和Data Nodes,以及启动和测试集群的步骤。

1.安装依赖包
yum -y install zliblg-dev libreadine6-dev bison flex libperl-devel  gcc perl-ExtUtils-Embed readline-devel zlib-devel  python python-devel

2.安装  
./configure --prefix=/usr/local/pgxc --with-perl --with-python
make 
make install


3.环境变量:
export PATH=/usr/local/pgxc/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgxc/lib:LD_LIBRARY_PATH

4. 配置 postgres-XC集群
主机名ip角色端口nodename数据目录
gtm56.56.56.95Gtm6666one/data/gtm
gtm_standby56.56.56.96
Gtm备库6666two/data/gtm_standby
cd156.56.56.97
Coordinator5432co1/data/coordinator
Datanode5433dn1/data/pgdata
Gtm Proxy6666gtmpoxy01/data/gtm_proxy
cd256.56.56.98
Coordinator5432co2/data/coordinator
Datanode5433dn2/data/pgdata
Gtm Proxy6666gtmpoxy02/data/gtm_proxy
cd356.56.56.99
Coordinator5432co3/data/coordinator
Datanode5433dn3/data/pgdata
Gtm Proxy6666gtmpoxy03/data/gtm_proxy

5. 5安装 Postgres-XC,五台机器都要安装

6. 5台机器上都配置hosts
56.56.56.95  gtm
56.56.56.96  gtm_standby
56.56.56.97  cd1
56.56.56.98  cd2
56.56.56.99  cd3

7.95 和 96 GTM 机器 创建对应的数据目录
mkdir  -p  /data/gtm
mkdir -p /data/gtm_standby

97 、98 、99 机器创建对应的数据目录
mkdir -p /data/coordinator
mkdir -p /data/pgdata
mkdir -p /data/gtm_proxy

8. 创建用户和配置环境变量(5台机器都要执行)
groupadd pgxc
useradd pgxc -g pgxc
passwd pgxc

[root@gtm gtm]# chown -R pgxc:pgxc /data/gtm
[root@gtm gtm]# chown -R pgxc:pgxc /usr/local/pgxc

9.环境变量:
su - pgxc
export PATH=/usr/local/pgxc/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgxc/lib:LD_LIBRARY_PATH


10 . 初始化gtm

10.1 在56.56.56.95机器上初始化
su - gtm
initgtm -Z gtm -D /data/gtm

10.2 编辑/data/gtm/gtm.conf文件
nodename = 'one'     #节点名称,可以指定为任意名称,不能与其他节点名重复                          
isten_addresses = '*'# GTM监听的ip地址,"*" 表示在所有的ip地址上监听              
port = 6666          # GTM监控的端口                    
startup = ACT        #主库设置为 ACT,如果是 Standby,则设置为 STANDBY

11.初始化GTM的备库

96机器上初始化
su - pgxc
initgtm -Z gtm -D  /data/gtm_standby

11.1 编辑 /data/gtm_standby/gtm.conf
nodename = 'two'           节点名称      
listen_addresses = '*'    active_host:指定连接GTM的IP地址            
port = 6666               active_port:指定连接GTM备库的端口                       
startup = STANDBY         startup: 因为是GTM的备库,所以要设置为STANDBY 
active_port = 6666        GTM监控的端口

12. 初始化 gtm proxy

在56.56.56.97  98 99 三台机器上分别执行以下命令
chown -R pgxc:pgxc /data/gtm_proxy
su - pgxc
initgtm -Z gtm_proxy -D /data/gtm_proxy

13.在97机器配置文件:/data/gtm_proxy/gtm_proxy.conf

nodename = 'gtmproxy01'  
port = 6666    
gtm_host = 'gtm' 
gtm_port = 6666 

在98机器配置文件:/data/gtm_proxy/gtm_proxy.conf
nodename = 'gtmproxy02'  
port = 6666    
gtm_host = 'gtm' 
gtm_port = 6666 

在99机器配置文件 /data/gtm_proxy/gtm_proxy.conf
nodename = 'gtmproxy03'  
port = 6666    
gtm_host = 'gtm' 
gtm_port = 6666 

19.初始化Coordinator 和数据节点

在 97 、 98、 99 三台机器上分别执行以下命令
initdb --nodename co1 -D  /data/coordinator
initdb --nodename dn1 -D /data/pgdata

initdb --nodename co2 -D  /data/coordinator
initdb --nodename dn2 -D /data/pgdata

initdb --nodename co3 -D  /data/coordinator
initdb --nodename dn3 -D /data/pgdata

20.修改3台机器的 coordinator配置文件/data/coordinator/postgresql.conf
listen_addresses = '*'          # what IP address(es) to listen on;
port = 5432                     # (change requires restart)
log_connections = on
gtm_host = 'gtm'                # Host name or address of GTM
gtm_port = 6666                 # Port of GTM
pgxc_node_name = 'co1~coN'      # 根据实际的节点配置为co1、co2、... coN

21.修改3台机器的datanode的配置文件/data/pgdata/postgresql.conf
listen_addresses = '*'          # what IP address(es) to listen on;
port = 5433                     # (change requires restart)
log_connections = on
gtm_host = 'gtm'                # Host name or address of GTM
gtm_port = 6666                 # Port of GTM
pgxc_node_name = 'dn1~dnN'      # 根据实际的节点配置为dn1、dn2、... dnN

注意:datanode 和 Coordinator  的三个节点都要修改
pg_hba.conf 
host    all            all            0.0.0.0/0            trust


22.启动集群

启动集群的顺序:
GTM
GTM standy
gtm-proxy
datanodes
coordinators



22.1.启动95机器gtm
gtm_ctl -Z gtm start -D /data/gtm

22.2.启动96机器standby
gtm_ctl -Z gtm_standby start -D /data/gtm_standby

注意:要先启动 gtm 再启动gtm_standby,否则gtm standby会因为无法连接到gtm而失败

22.3 用下面的命令查看gtm和standby启动状态
gtm_ctl -Z gtm status -D /data/gtm
gtm_ctl -Z gtm_standby status -D /data/gtm_standby

22.4.在 97 98 99 三台机器上启动proxy
gtm_ctl -Z gtm_proxy start -D /data/gtm_proxy

22.5 .在 97 98 99 三台机器上启动 datanodes
pg_ctl start -D /data/pgdata -Z datanode

22.6. ps -ef|grep pgxc 查看启动信息

22.7.在 97 98 99 三台机器上启动coordinator
pg_ctl start -D /data/coordinator -Z coordinator

23. 注册集群节点信息,登录到 97 98 99  coordinator上执行
[[pgxl@cd1 coordinator]$ psql -p 5432 postgres
2018-03-14 16:04:49.826 CST [23830] LOG:  connection received: host=[local]
2018-03-14 16:04:49.829 CST [23830] LOG:  connection authorized: user=pgxl database=postgres
psql (PGXL 10alpha2, based on PG 10beta3 (Postgres-XL 10alpha2))
Type "help" for help.
create node co1 with(type='coordinator',host='cd1',port=5432);
create node co2 with(type='coordinator',host='cd2',port=5432);
create node co3 with(type='coordinator',host='cd3',port=5432);

create node dn1 with(type='datanode',host='cd1',port=5433);
create node dn2 with(type='datanode',host='cd2',port=5433);
create node dn3 with(type='datanode',host='cd3',port=5433);

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
co2       | C         |      5432 | cd2       | f              | f                |  474101254
co3       | C         |      5432 | cd3       | f              | f                | -1046823559
dn1       | D         |      5433 | cd1       | f              | f                |  -560021589
dn2       | D         |      5433 | cd2       | f              | f                |  352366662
dn3       | D         |      5433 | cd3       | f              | f                |  -700122826

不管是修改还是删除重建完成后你都需要重新加载文件 select pgxc_pool_reload()
postgres=#  select pgxc_pool_reload(); #以上操作三个节点最好都要执行一下
pgxc_pool_reload 
------------------
t
(1 row)


24. 测试:

24.1. coordinator1上验证
[pgxc@cd1 coordinator]$ psql -p 5432 postgres
LOG:  connection received: host=[local]
LOG:  connection authorized: user=pgxc database=postgres
psql (PGXC 1.0.4, based on PG 9.1.13)
Type "help" for help.

postgres=# create table t (id int);
LOG:  connection received: host=56.56.56.97 port=41712
LOG:  connection authorized: user=pgxc database=postgres
CREATE TABLE
postgres=# 

postgres=# insert into t select generate_series(1,100);
INSERT 0 100

postgres=# select count(*) from t;
count 
-------
  100
(1 row)

24.2. coordinator2 上验证
[pgxc@cd2 coordinator]$ psql -p 5432 postgres
LOG:  connection received: host=[local]
LOG:  connection authorized: user=pgxc database=postgres
psql (PGXC 1.0.4, based on PG 9.1.13)
Type "help" for help.

postgres=# select count(*) from t;
LOG:  connection received: host=56.56.56.98 port=34162
LOG:  connection authorized: user=pgxc database=postgres
count 
-------
  100
(1 row)

24.3. coordinator23上验证
[pgxc@cd3 coordinator]$ psql -p 5432 postgres
LOG:  connection received: host=[local]
LOG:  connection authorized: user=pgxc database=postgres
psql (PGXC 1.0.4, based on PG 9.1.13)
Type "help" for help.

postgres=# select count(*) from t;
LOG:  connection received: host=56.56.56.99 port=45888
LOG:  connection authorized: user=pgxc database=postgres
count 
-------
  100
(1 row)

24.4.数据节点1验证
[pgxc@cd1 coordinator]$ psql -p 5433 postgres
LOG:  connection received: host=[local]
LOG:  connection authorized: user=pgxc database=postgres
psql (PGXC 1.0.4, based on PG 9.1.13)
Type "help" for help.

postgres=# select count(*) from t;
count 
-------
    37
(1 row)

postgres=# select * from t;
id 
----
  7
14
15
20
21
22
24
25
27
30
........

24.5数据节点2
[pgxc@cd2 coordinator]$ psql -p 5433 postgres
LOG:  connection received: host=[local]
LOG:  connection authorized: user=pgxc database=postgres
psql (PGXC 1.0.4, based on PG 9.1.13)
Type "help" for help.

postgres=# select count(*) from t;
count 
-------
    31
(1 row)

postgres=# select * from t;
id  
-----
  2
  3
  5
  6
  11
  12
  17
  18
  19
  26
......

24.6. 数据节点3
[pgxc@cd3 coordinator]$ psql -p 5433 postgres
LOG:  connection received: host=[local]
LOG:  connection authorized: user=pgxc database=postgres
psql (PGXC 1.0.4, based on PG 9.1.13)
Type "help" for help.

postgres=# select count(*) from t;
count 
-------
    32
(1 row)

postgres=# select * from t;
id 
----
 1
 4
 8
 9
10
13
16
23
28
29
31
......

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值