[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 startnode2初始化:[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:
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 trustnode2节点配置(修改项):[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:682node1节点:[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 connectionsnode2节点:[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