PostgreSQL-XL安装部署

近期在学习PostgreSQL-XL,现在把PostgreSQL-XL的安装部署步骤简单记录一下。

机器准备:

3台虚拟机信息:
                gtm:a. 版本信息:Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
                        b. IP:192.168.100.199   

                node1:a. 版本信息:Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
                            b. IP:192.168.100.201

                node2:a. 版本信息:Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux
                            b. IP:192.168.100.202

安装(三台虚机同时按下面步骤安装):

        1、下载源码:官方下载网盘下载
        2、解压源码

tar xvf postgres-xl-v9.2-src.tar.gz

        3、编译安装

./configure --prefix=/opt/pgxl
make
make install

'/usr/bin/perl' /bin/collateindex.pl -f -g -i 'bookindex' -o bookindex.sgml HTML.index
Can't open perl script "/bin/collateindex.pl": No such file or directory
make[4]: *** [bookindex.sgml] Error 2
make[4]: Leaving directory `/root/postgres-xl/doc-xc/src/sgml'
make[3]: *** [sql_help.h] Error 2
make[3]: Leaving directory `/root/postgres-xl/src/bin/psql'
make[2]: *** [all-psql-recurse] Error 2
make[2]: Leaving directory `/root/postgres-xl/src/bin'
make[1]: *** [all-bin-recurse] Error 2
make[1]: Leaving directory `/root/postgres-xl/src'
make: *** [all-src-recurse] Error 2

解决方法:

#yum install docbook-style-dsssl
#find / -name collateindex.pl
/usr/bin/collateindex.pl
#cp /usr/bin/collateindex.pl /bin/

节点部署:

新建用户(三台虚机依次操作,注意:一定要用相同的用户,否则会发生用户找不到的问题):

[root@localhost opt]# useradd pgxl
[root@localhost opt]# chown -R pgxl pgxl/
[root@localhost opt]# su pgxl
[pgxl@localhost pgxl]$ ls
bin  data_gtm  include  lib  share
[pgxl@localhost pgxl]$ cd bin/
[pgxl@localhost bin]$ ls
clusterdb  createuser  dropuser  gtm_ctl    initgtm        pg_config      pg_dump        pg_resetxlog  postmaster  vacuumdb
createdb    dropdb      ecpg      gtm_proxy  makesgml      pg_controldata  pg_dumpall      pg_restore    psql
createlang  droplang    gtm      initdb    pg_basebackup  pg_ctl          pg_receivexlog  postgres      reindexdb
[pgxl@localhost bin]$

初始化:

gtm初始化:

[pgxl@localhost bin]$ ./initgtm -D /opt/pgxl/data_gtm/ -Z gtm
The files belonging to this GTM system will be owned by user "pgxl".
This user must also own the server process.
 
 
creating directory /opt/pgxl/data_gtm ... ok
creating configuration files ... ok
 
Success. You can now start the GTM server using:
 
    ./gtm -D /opt/pgxl/data_gtm
or
    ./gtm_ctl -Z gtm -D /opt/pgxl/data_gtm -l logfile start
 
[pgxl@localhost bin]$

node1初始化(initdb初始化过程和pg初始化过程一致,这里就不多赘述了):

[pgxl@localhost bin]$ ./initdb -D /opt/pgxl/data/coordinator1/ --nodename coordinator1
[pgxl@localhost bin]$ ./initdb -D /opt/pgxl/data/datanode1/ --nodename datanode1
[pgxl@localhost bin]$ ./initgtm -D /opt/pgxl/data/gtm_proxy1/ -Z gtm_proxy
The files belonging to this GTM system will be owned by user "pgxl".
This user must also own the server process.
 
creating directory /opt/pgxl/data/gtm_proxy1 ... ok
creating configuration files ... ok
 
Success. You can now start the GTM proxy server using:
 
    ./gtm_proxy -D /opt/pgxl/data/gtm_proxy1
or
    ./gtm_ctl -Z gtm_proxy -D /opt/pgxl/data/gtm_proxy1 -l logfile start

node2初始化:

[pgxl@localhost bin]$ ./initdb -D /opt/pgxl/data/coordinator2/ --nodename coordinator2
[pgxl@localhost bin]$ ./initdb -D /opt/pgxl/data/datanode2/ --nodename datanode2
[pgxl@localhost bin]$ ./initgtm -D /opt/pgxl/data/gtm_proxy2/ -Z gtm_proxy
The files belonging to this GTM system will be owned by user "pgxl".
This user must also own the server process.
 
creating directory /opt/pgxl/data/gtm_proxy2 ... ok
creating configuration files ... ok
 
Success. You can now start the GTM proxy server using:
 
    ./gtm_proxy -D /opt/pgxl/data/gtm_proxy2
or
    ./gtm_ctl -Z gtm_proxy -D /opt/pgxl/data/gtm_proxy2 -l logfile start

配置信息:

gtm节点配置(修改项):

[pgxl@localhost data_gtm]$ vi gtm.conf
nodename = 'gtm'                 
listen_addresses = '*'
keepalives_idle = 60       
keepalives_interval = 10   
keepalives_count = 10

node1节点配置(修改项):

[pgxl@localhost gtm_proxy1]$ vi gtm_proxy.conf
nodename = 'gtm_proxy1'                               
                                                               
listen_addresses = '*'               
port = 6661                                   
gtm_host = '192.168.100.199'                               
gtm_port = 6666
keepalives_idle = 60
keepalives_interval = 10
keepalives_count = 10

[pgxl@localhost coordinator1]$ vi postgresql.conf
listen_addresses = '*'
#gtm_host = 'localhost'               
gtm_port = 6661             
pgxc_node_name = 'coordinator1' <span></span> pooler_port = 6667

[pgxl@localhost coordinator1]$ vi pg_hba.conf
host    all            all            192.168.100.0/24            trust

[pgxl@localhost datanode1]$ vi postgresql.conf
listen_addresses = '*'
port = 15432
#gtm_host = 'localhost'
gtm_port = 6661           
pgxc_node_name = 'datanode1'
pooler_port = 6668

[pgxl@localhost datanode1]$ vi pg_hba.conf
host    all            all            192.168.100.0/24            trust

node2节点配置(修改项):

[pgxl@localhost gtm_proxy2]$ vi gtm_proxy.conf
nodename = 'gtm_proxy2'                               
                                                               
listen_addresses = '*'               
port = 6662                                   
gtm_host = '192.168.100.199'                               
gtm_port = 6666
keepalives_idle = 60
keepalives_interval = 10
keepalives_count = 10

[pgxl@localhost coordinator2]$ vi postgresql.conf
listen_addresses = '*'
#gtm_host = 'localhost'               
gtm_port = 6662             
pgxc_node_name = 'coordinator2'
pooler_port = 6667

[pgxl@localhost coordinator2]$ vi pg_hba.conf
host    all            all            192.168.100.0/24            trust

[pgxl@localhost datanode2]$ vi postgresql.conf
listen_addresses = '*'
port = 15432
#gtm_host = 'localhost'
gtm_port = 6662           
pgxc_node_name = 'datanode2'
pooler_port = 6668

[pgxl@localhost datanode2]$ vi pg_hba.conf
host    all            all            192.168.100.0/24            trust

服务启动:

gtm节点:

[pgxl@localhost bin]$ export PGHOME=/opt/pgxl/
[pgxl@localhost bin]$ export PATH=$PGHOME/bin:$PATH
[pgxl@localhost bin]$ ./gtm_ctl start -Z gtm -D /opt/pgxl/data_gtm/
server starting

[pgxl@localhost bin]$ tail ../data_gtm/gtm.log
1:139738148718336:2015-06-09 14:23:08.247 CST -LOG:  Starting GTM server at (*:6666) -- control file /opt/pgxl/data_gtm/gtm.control
LOCATION:  main, main.c:601
1:139738148718336:2015-06-09 14:23:08.247 CST -LOG:  Restoring last GXID to 10000
   
LOCATION:  GTM_RestoreTxnInfo, gtm_txn.c:2673
1:139738148718336:2015-06-09 14:23:08.247 CST -LOG:  Started to run as GTM-Active.
LOCATION:  main, main.c:682

node1节点:

[pgxl@localhost bin]$ export PGHOME=/opt/pgxl/
[pgxl@localhost bin]$ export PATH=$PGHOME/bin:$PATH
[pgxl@localhost bin]$ ./gtm_ctl start -Z gtm_proxy -D ../data/gtm_proxy1/
server starting
[pgxl@localhost bin]$ tail ../data/gtm_proxy1/gtm_proxy.log
1:47078985160944:2015-06-08 23:27:22.567 PDT -LOG:  Starting GTM proxy at (*:6661)
LOCATION:  main, proxy_main.c:805
[pgxl@localhost bin]$ ./pg_ctl start -Z datanode -D ../data/datanode1/
[pgxl@localhost bin]$ LOG:  database system was shut down at 2015-06-08 22:35:18 PDT
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
 
[pgxl@localhost bin]$ ./pg_ctl start -Z coordinator -D ../data/coordinator1/
[pgxl@localhost bin]$ LOG:  database system was shut down at 2015-06-08 22:34:46 PDT
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections

node2节点:

[pgxl@localhost bin]$ export PGHOME=/opt/pgxl/
[pgxl@localhost bin]$ export PATH=$PGHOME/bin:$PATH
[pgxl@localhost bin]$ ./gtm_ctl start -Z gtm_proxy -D ../data/gtm_proxy2/
server starting
[pgxl@localhost bin]$ tail ../data/gtm_proxy2/gtm_proxy.log
1:47078985160944:2015-06-08 23:27:22.567 PDT -LOG:  Starting GTM proxy at (*:6662)
LOCATION:  main, proxy_main.c:805
[pgxl@localhost bin]$ ./pg_ctl start -Z datanode -D ../data/datanode2/
[pgxl@localhost bin]$ LOG:  database system was shut down at 2015-06-08 22:35:18 PDT
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
 
[pgxl@localhost bin]$ ./pg_ctl start -Z coordinator -D ../data/coordinator2/
[pgxl@localhost bin]$ LOG:  database system was shut down at 2015-06-08 22:34:46 PDT
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections

注册:

node1:

协调节点:

[pgxl@localhost bin]$ ./psql -p 5432 -d postgres
psql (PGXL 9.2.0, based on PG 9.2.4 (Postgres-XL 9.2.0))
Type "help" for help.
 
postgres=# CREATE NODE <span></span>coordinator2<span></span> WITH (TYPE='coordinator',HOST='192.168.100.202',PORT=5432);
CREATE NODE
postgres=# CREATE NODE datanode1 WITH (TYPE='datanode',HOST='192.168.100.201',PORT=15432);
CREATE NODE
postgres=# CREATE NODE datanode2 WITH (TYPE='datanode',HOST='192.168.100.202',PORT=15432);
CREATE NODE
 
postgres=# select * from pgxc_node;
  node_name  | node_type | node_port |    node_host    | nodeis_primary | nodeis_preferred |  node_id 
--------------+-----------+-----------+-----------------+----------------+------------------+-------------
 coordinator1 | C        |      5432 | localhost      | f              | f                |  1938253334
 coordinator2 | C        |      5432 | 192.168.100.202 | f              | f                | -2089598990
 datanode1    | D        |    15432 | 192.168.100.201 | f              | f                |  888802358
 datanode2    | D        |    15432 | 192.168.100.202 | f              | f                |  -905831925
 
select pgxc_pool_reload();
 pgxc_pool_reload
------------------
 t
(1 row)
 
[pgxl@localhost bin]$

数据节点:

[pgxl@localhost bin]$ ./psql -p 15432 -d postgres
psql (PGXL 9.2.0, based on PG 9.2.4 (Postgres-XL 9.2.0))
Type "help" for help.
 
postgres=# CREATE NODE coordinator1 WITH (TYPE='coordinator',HOST='192.168.100.201',PORT=5432);
CREATE NODE
postgres=# CREATE NODE coordinator2 WITH (TYPE='coordinator',HOST='192.168.100.202',PORT=5432);
CREATE NODE
postgres=# ALTER NODE datanode1 WITH (TYPE='datanode',HOST='localhost',PORT=15432);
ALTER NODE
postgres=# CREATE NODE datanode2 WITH (TYPE='datanode',HOST='192.168.100.202',PORT=15432);
CREATE NODE
 
postgres=# select * from pgxc_node;
  node_name  | node_type | node_port |    node_host    | nodeis_primary | nodeis_preferred |  node_id 
--------------+-----------+-----------+-----------------+----------------+------------------+-------------
 coordinator1 | C        |      5432 | 192.168.100.201 | f              | f                |  1938253334
 coordinator2 | C        |      5432 | 192.168.100.202 | f              | f                | -2089598990
 datanode1    | D        |    15432 | localhost      | f              | f                |  888802358
 datanode2    | D        |    15432 | 192.168.100.202 | f              | f                |  -905831925
(4 rows)
 
select pgxc_pool_reload();
 pgxc_pool_reload
------------------
 t
(1 row)
 
[pgxl@localhost bin]$

node2:

协调节点:

[pgxl@localhost bin]$ ./psql -p 5432 -d postgres
psql (PGXL 9.2.0, based on PG 9.2.4 (Postgres-XL 9.2.0))
Type "help" for help.
 
postgres=# CREATE NODE coordinator1 WITH (TYPE='coordinator',HOST='192.168.100.201',PORT=5432);
CREATE NODE
postgres=# CREATE NODE datanode1 WITH (TYPE='datanode',HOST='192.168.100.201',PORT=15432);
CREATE NODE
postgres=# CREATE NODE datanode2 WITH (TYPE='datanode',HOST='192.168.100.202',PORT=15432);
CREATE NODE
 
postgres=# select * from pgxc_node;
  node_name  | node_type | node_port |    node_host    | nodeis_primary | nodeis_preferred |  node_id 
--------------+-----------+-----------+-----------------+----------------+------------------+-------------
 coordinator2 | C        |      5432 | localhost      | f              | f                | -2089598990
 coordinator1 | C        |      5432 | 192.168.100.201 | f              | f                | 1938253334
 datanode1    | D        |    15432 | 192.168.100.201 | f              | f                |  888802358
 datanode2    | D        |    15432 | 192.168.100.202 | f              | f                |  -905831925
 
select pgxc_pool_reload();
 pgxc_pool_reload
------------------
 t
(1 row)
 
[pgxl@localhost bin]$

数据节点:

[pgxl@localhost bin]$ ./psql -p 15432 -d postgres
psql (PGXL 9.2.0, based on PG 9.2.4 (Postgres-XL 9.2.0))
Type "help" for help.
 
postgres=# CREATE NODE coordinator1 WITH (TYPE='coordinator',HOST='192.168.100.201',PORT=5432);
CREATE NODE
postgres=# CREATE NODE coordinator2 WITH (TYPE='coordinator',HOST='192.168.100.202',PORT=5432);
CREATE NODE
postgres=# ALTER NODE datanode2 WITH (TYPE='datanode',HOST='localhost',PORT=15432);
ALTER NODE
postgres=# CREATE NODE datanode1 WITH (TYPE='datanode',HOST='192.168.100.202',PORT=15432);
CREATE NODE
 
postgres=# select * from pgxc_node;
  node_name  | node_type | node_port |    node_host    | nodeis_primary | nodeis_preferred |  node_id 
--------------+-----------+-----------+-----------------+----------------+------------------+-------------
 coordinator1 | C        |      5432 | 192.168.100.201 | f              | f                |  1938253334
 coordinator2 | C        |      5432 | 192.168.100.202 | f              | f                | -2089598990
 datanode2    | D        |    15432 | localhost      | f              | f                |  -905831925
 datanode1    | D        |    15432 | 192.168.100.201 | f              | f                |  888802358
(4 rows)
 
select pgxc_pool_reload();
 pgxc_pool_reload
------------------
 t
(1 row)
 
[pgxl@localhost bin]$

搭建后效果:

 node1:
postgres=# create table test(t1 int, t2 text);
LOG:  Will fall back to local snapshot for XID = 16757, source = 0, gxmin = 0, autovac launch = 0, autovac = 0, normProcMode = 0, postEnv = 1
CREATE TABLE
postgres=# insert into test values (1,'a');
INSERT 0 1
postgres=# insert into test values (2,'b');
INSERT 0 1
postgres=# execute direct on (datanode1) $$ select * from test $$;
 t1 | t2
----+----
  1 | a
  2 | b
(2 rows)
 
postgres=# select * from test ;
 t1 | t2
----+----
  1 | a
  2 | b
(2 rows)
 
postgres=#
 
node2:
postgres=# select * from test ;
LOG:  Will fall back to local snapshot for XID = 16789, source = 0, gxmin = 0, autovac launch = 0, autovac = 0, normProcMode = 0, postEnv = 1
 t1 | t2
----+----
  1 | a
  2 | b
(2 rows)
 
postgres=# execute direct on (datanode2) $$ select * from test $$;
 t1 | t2
----+----
(0 rows)
 
postgres=# insert into test values (3,'c');
INSERT 0 1
postgres=# execute direct on (datanode2) $$ select * from test $$;
 t1 | t2
----+----
  3 | c
(1 row)
 
postgres=# select * from test ;
 t1 | t2
----+----
  1 | a
  2 | b
  3 | c
(3 rows)
 
postgres=#
 
node1:
postgres=# select * from test ;
 t1 | t2
----+----
  1 | a
  2 | b
  3 | c
(3 rows)
 
postgres=# execute direct on (datanode1) $$ select * from test $$;
 t1 | t2
----+----
  1 | a
  2 | b
(2 rows)
 
postgres=# execute direct on (datanode2) $$ select * from test $$;
 t1 | t2
----+----
  3 | c
(1 row)
 
postgres=#

发现bug(最新代码没有,官网发布的tar包有bug,通过git下载暂时没有问题):

postgres=# alter node datanode2 with(TYPE='datanode', HOST='localhost', PORT=15432);
The connection to the server was lost. Attempting reset: LOG:  server process (PID 14999) was terminated by signal 11: Segmentation fault
DETAIL:  Failed process was running: alter node datanode2 with(TYPE='datanode', HOST='localhost', PORT=15432);
LOG:  terminating any other active server processes
WARNING:  terminating connection because of crash of another server process
DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
HINT:  In a moment you should be able to reconnect to the database and repeat your command.
FATAL:  the database system is in recovery mode
Failed.
!> LOG:  all server processes terminated; reinitializing
LOG:  database system was interrupted; last known up at 2015-06-10 20:09:24 PDT
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/18A6C40
LOG:  redo is not required
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
 
!>
!>
!>
!>

------------------------------------华丽丽的分割线------------------------------------

------------------------------------华丽丽的分割线------------------------------------

PostgreSQL 的详细介绍请点这里
PostgreSQL 的下载地址请点这里

猜你喜欢

转载自www.linuxidc.com/Linux/2015-11/125624.htm