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
注:编译过程中出现的问题(centos5会出现此问题,6则不会):
'/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'  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 coordinator2 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,XL)