Postgres-XL 集群具体创立过程51CTO博客 - 乐橙lc8

Postgres-XL 集群具体创立过程51CTO博客

2019年03月05日09时43分28秒 | 作者: 鸿熙 | 标签: 创立,集群,文件 | 浏览: 1260

最近公司事务需求,需求运用Postgres-XL 集群,关于这部分常识,网络材料不多。经过一段时刻的查询,和各种弯路之后,总算完结装置。将具体进程完好记载,以备查阅。也希望能帮到需求的人。

下面就开端吧:

  1. 主机列表和集群装置的人物分配

10.21.13.109  GTM
10.21.13.67  coordinator&datanode
10.21.13.60  datanode

2.创立postgres用户,这部分我运用ansible完结的用户创立,以及相关软件包的运用,节约劳动力(yum其实能够运用ansible自带的方法,所以我ansible写的比较业余)

ansible all -m shell -a  "useradd postgres"
ansible all -m shell -a echo "postgres:postgres" | chpasswd
ansible all -m shell -a "yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl gcc"

3. 在每个节点上下载软件,并解压缩

ansible all -m shell -a "wget https://www.postgres-xl.org/downloads/postgres-xl-9.5r1.6.tar.bz2"
ansible all -m shell -a "mv /root/postgres-xl-9.5r1.6.tar.bz2 /tmp; chown postgres:postgres /tmp/postgres-xl-9.5r1.6.tar.bz2"
ansible all -m shell -a "tar  -jxvf /tmp/postgres-xl-9.5r1.6.tar.bz2 -C /home/postgres"

4. 悉数节点都创立pgxc途径,用来寄存postgres文件

ansible all -m shell -a "su - postgres -c mkdir -p /home/postgres/pgxc/nodes/"

5. 修正每个节点的.bashrc文件,留意:修正/etc/profile是不收效的。

su - postgres
vi .bashrc

增加如下内容:

export PGHOME=/home/postgres/pgxl
export PGUSER=postgres
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH

使之收效:

source ~/.bashrc

6. 封闭防火墙或许铺开相应的端口,这儿我直接封闭了每个虚拟机的防火墙,而且重启它们:

service iptables stop
chkconfig iptables off   重启后收效

7. 封闭SELinux:

检查SELinux状况:

/usr/sbin/sestatus -v    假如SELinux status参数为enabled即为敞开状况
SELinux status:                 enabled

暂时封闭(不必重启机器):

setenforce 0       设置SELinux 成为permissive形式
                           setenforce 1 设置SELinux 成为enforcing形式

永久封闭:

修正/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled

8. 到每一个节点履行下面的软件装置进程,这个进程留意,假如中心有报错,需求处理到。例如的确gcc包之类的,否则后边的编译也不会成功的。

cd postgres-xl
./configure prefix=/home/postgres/pgxl/
make
make install
cd contrib/
make
make instal

9. 履行pgxc_ctl指令来生成装备集群的模板文件:

./pgxc_ctl              -会提示Error说没有装备文件,疏忽即可

PGXC prepare            -履行该指令将会生成一份装备文件模板

10. 依据模板修正对应的主机名,端口等信息,内容如下:

vi ~/pgxc_ctl/pgxc_ctl.conf
pgxcInstallDir=$HOME/pgxc
pgxcOwner=$USER
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=n
configBackupHost=pgxc-linker
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak
gtmName=gtm
gtmMasterServer=10.21.13.109
gtmMasterPort=20001
gtmMasterDir=$HOME/pgxc/nodes/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=n
gtmProxyDir=$HOME/pgxc/nodes/gtm_pxy
gtmProxy=y
gtmProxyNames=(gtm_pxy1 gtm_pxy2)
gtmProxyServers=(10.21.13.67 10.21.13.60)
gtmProxyPorts=(20001 20001)
gtmProxyDirs=($gtmProxyDir $gtmProxyDir)
gtmPxyExtraConfig=none
gtmPxySpecificExtraConfig=(none none)
coordMasterDir=$HOME/pgxc/nodes/coord
coordSlaveDir=$HOME/pgxc/nodes/coord_slave
coordArchLogDir=$HOME/pgxc/nodes/coord_archlog
coordNames=(coord1)
coordPorts=(20004)
poolerPorts=(20010)
coordPgHbaEntries=(10.21.13.0/25)   <<<<<<<<<<<<<<<<<<<<<<<<<非常重要
coordMasterServers=(10.21.13.67)
coordMasterDirs=($coordMasterDir)
coordMaxWALsernder=5
coordMaxWALSenders=($coordMaxWALsernder)
coordSlave=n               <<<<<<<<<<<<<<<<没运用slave
coordSlaveSync=y
coordSlaveServers=(10.21.13.60 10.21.13.67)
coordSlavePorts=(20004 20005 20004 20005)
coordSlavePoolerPorts=(20010 20011 20010 20011)
coordSlaveDirs=($coordSlaveDir $coordSlaveDir)
coordArchLogDirs=($coordArchLogDir $coordArchLogDir)
coordExtraConfig=coordExtraConfig
cat > $coordExtraConfig <<EOF
log_destination = stderr
logging_collector = on
log_directory = pg_log
listen_addresses = *
max_connections = 100
EOF
coordSpecificExtraConfig=(none none)
coordExtraPgHba=none
coordSpecificExtraPgHba=(none none)
coordAdditionalSlaves=n
coordAdditionalSlaveSet=(cad1)
cad1_Sync=n
cad1_Servers=(10.21.13.67 10.21.13.60)
cad1_dir=$HOME/pgxc/nodes/coord_slave_cad1
cad1_Dirs=($cad1_dir $cad1_dir)
cad1_ArchLogDir=$HOME/pgxc/nodes/coord_archlog_cad1
cad1_ArchLogDirs=($cad1_ArchLogDir $cad1_ArchLogDir)
datanodeMasterDir=$HOME/pgxc/nodes/dn_master
datanodeSlaveDir=$HOME/pgxc/nodes/dn_slave
datanodeArchLogDir=$HOME/pgxc/nodes/datanode_archlog
primaryDatanode=datanode1
datanodeNames=(datanode1 datanode2)
datanodePorts=(20008 20008) # Master ports
datanodePoolerPorts=(20012 20012)
datanodePgHbaEntries=(10.21.13.0/25)  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<非常重要
datanodeMasterServers=(10.21.13.67 10.21.13.60)
datanodeMasterDirs=($datanodeMasterDir $datanodeMasterDir)
datanodeMaxWalSender=5
datanodeMaxWALSenders=($datanodeMaxWalSender $datanodeMaxWalSender )
datanodeSlave=n                <<<<<<<<<<<<<<<<没运用slave
datanodeSlaveServers=(10.21.13.60 10.21.13.67)
datanodeSlavePorts=(20008 20008)
datanodeSlavePoolerPorts=(20012 20012)
datanodeSlaveSync=y
datanodeSlaveDirs=($datanodeSlaveDir $datanodeSlaveDir)
datanodeArchLogDirs=( $datanodeArchLogDir $datanodeArchLogDir )
datanodeExtraConfig=none
datanodeSpecificExtraConfig=(none none )
datanodeExtraPgHba=none
datanodeSpecificExtraPgHba=(none none)
datanodeAdditionalSlaves=n
walArchive=n       <<<<<<<<<<<<<<<<不开wal归档
walArchiveSet=(war1 war2)
war1_source=(master)
wal1_source=(slave)
wal1_source=(additiona_coordinator_slave_set additional_datanode_slave_set)
war1_host=node10
war1_backupdir=$HOME/pgxc/backup_war1
wal2_source=(master)
war2_host=node11
war2_backupdir=$HOME/pgxc/backup_war2

11. 初始话指令,假如前面没有任何过错,这儿就是最终一步了,PGXL会把悉数的布置作业完结的。

pgxc_ctl -c pgxc_ctl.conf init all

完好输出如下:

[postgres@ip-10-21-13-109 pgxc_ctl]$ pgxc_ctl -c pgxc_ctl.conf init all 
/bin/bash
Installing pgxc_ctl_bash script as /home/postgres/pgxc_ctl/pgxc_ctl_bash.
Installing pgxc_ctl_bash script as /home/postgres/pgxc_ctl/pgxc_ctl_bash.
Reading configuration using /home/postgres/pgxc_ctl/pgxc_ctl_bash home /home/postgres/pgxc_ctl configuration /home/postgres/pgxc_ctl/pgxc_ctl.conf
Finished reading configuration.
   ******** PGXC_CTL START ***************
Current directory: /home/postgres/pgxc_ctl
Initialize GTM master
ERROR: target directory (/home/postgres/pgxc/nodes/gtm) exists and not empty. Skip GTM initilialization
1:3768231680:2017-11-09 19:35:02.983 CST -FATAL:  lock file "gtm.pid" already exists
2:3768231680:2017-11-09 19:35:02.983 CST -HINT:  Is another GTM (PID 14635) running in data directory "/home/postgres/pgxc/nodes/gtm"?
LOCATION:  CreateLockFile, main.c:2099
waiting for server to shut down... done
server stopped
Done.
Start GTM master
server starting
Initialize all the gtm proxies.
Initializing gtm proxy gtm_pxy1.
Initializing gtm proxy gtm_pxy2.
waiting for server to shut down... done
server stopped
The files belonging to this GTM system will be owned by user "postgres".
This user must also own the server process.
fixing permissions on existing directory /home/postgres/pgxc/nodes/gtm_pxy ... ok
creating configuration files ... ok
Success.
waiting for server to shut down... done
server stopped
The files belonging to this GTM system will be owned by user "postgres".
This user must also own the server process.
fixing permissions on existing directory /home/postgres/pgxc/nodes/gtm_pxy ... ok
creating configuration files ... ok
Success.
Done.
Starting all the gtm proxies.
Starting gtm proxy gtm_pxy1.
Starting gtm proxy gtm_pxy2.
server starting
server starting
Done.
Initialize all the coordinator masters.
Initialize coordinator master coord1.
ERROR: target coordinator master coord1 is running now.   Skip initilialization.
Done.
Starting coordinator master.
Starting coordinator master coord1
ERROR: target coordinator master coord1 is already running now.   Skip initialization.
Done.
Initialize all the datanode masters.
Initialize the datanode master datanode1.
Initialize the datanode master datanode2.
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /home/postgres/pgxc/nodes/dn_master ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
creating template1 database in /home/postgres/pgxc/nodes/dn_master/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
creating cluster information ... ok
loading system objects descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok
freezing database template0 ... ok
freezing database template1 ... ok
freezing database postgres ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
auth-local and auth-host, the next time you run initdb.
Success.
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /home/postgres/pgxc/nodes/dn_master ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
creating template1 database in /home/postgres/pgxc/nodes/dn_master/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
creating cluster information ... ok
loading system objects descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok
freezing database template0 ... ok
freezing database template1 ... ok
freezing database postgres ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
auth-local and auth-host, the next time you run initdb.
Success.
Done.
Starting all the datanode masters.
Starting datanode master datanode1.
Starting datanode master datanode2.
LOG:  redirecting log output to logging collector process
HINT:  Future log output will appear in directory "pg_log".
LOG:  redirecting log output to logging collector process
HINT:  Future log output will appear in directory "pg_log".
Done.
ALTER NODE coord1 WITH (HOST=10.21.13.67, PORT=20004);
ALTER NODE
CREATE NODE datanode1 WITH (TYPE=datanode, HOST=10.21.13.67, PORT=20008, PRIMARY, PREFERRED);
ERROR:  PGXC Node datanode1: object already defined
CREATE NODE datanode2 WITH (TYPE=datanode, HOST=10.21.13.60, PORT=20008);
ERROR:  PGXC Node datanode2: object already defined
SELECT pgxc_pool_reload();
 pgxc_pool_reload 

 t
(1 row)
Done.
EXECUTE DIRECT ON (datanode1) CREATE NODE coord1 WITH (TYPE=coordinator, HOST=10.21.13.67, PORT=20004);
EXECUTE DIRECT
EXECUTE DIRECT ON (datanode1) ALTER NODE datanode1 WITH (TYPE=datanode, HOST=10.21.13.67, PORT=20008, PRIMARY, PREFERRED);
EXECUTE DIRECT
EXECUTE DIRECT ON (datanode1) CREATE NODE datanode2 WITH (TYPE=datanode, HOST=10.21.13.60, PORT=20008);
EXECUTE DIRECT
EXECUTE DIRECT ON (datanode1) SELECT pgxc_pool_reload();
 pgxc_pool_reload 

 t
(1 row)
EXECUTE DIRECT ON (datanode2) CREATE NODE coord1 WITH (TYPE=coordinator, HOST=10.21.13.67, PORT=20004);
EXECUTE DIRECT
EXECUTE DIRECT ON (datanode2) CREATE NODE datanode1 WITH (TYPE=datanode, HOST=10.21.13.67, PORT=20008, PRIMARY, PREFERRED);
EXECUTE DIRECT
EXECUTE DIRECT ON (datanode2) ALTER NODE datanode2 WITH (TYPE=datanode, HOST=10.21.13.60, PORT=20008);
EXECUTE DIRECT
EXECUTE DIRECT ON (datanode2) SELECT pgxc_pool_reload();
 pgxc_pool_reload 

 t
(1 row)
Done.

12. 验证可用性

在coordinator节点上,本地衔接方法

psql -p 20004

长途用户衔接方法

psql -h 10.21.13.67 -p 20004 -U postgres
postgres=# select * from pgxc_node;
node_name | node_type | node_port |  node_host  | nodeis_primary | nodeis_preferred |  node_id
-+-+-+-+++
datanode1 | D         |     20008 | 10.21.13.67 | t              | t                |  888802358
datanode2 | D         |     20008 | 10.21.13.60 | f              | f                | -905831925
coord1    | C         |     20004 | 10.21.13.67 | f              | f                | 1885696643

13. 建表测验

postgres=#  create table test(id integer,name varchar(10));

postgres=#  insert into test(id,name) values(1,test);

postgres=#  insert into test(id,name) values(2,test);

查询成果

postgres=# select * from test;
id | name
+
1 | test
2 | test
(2 rows)

问题汇总:

1. 假如登陆到数据库中,履行下面句子,发现只要coord的信息,阐明并没有创立成功,

postgres=# select * from pgxc_node;
node_name | node_type | node_port | node_host | nodeis_primary | nodeis_preferred |  node_id
-+-+-+-+++
coord3    | C         |      20004 | localhost | f              | f          | 1638403545
(1 row)

而问题是出在coordPgHbaEntries=(10.21.13.0/25)和datanodePgHbaEntries=(10.21.13.0/25)的拜访权限操控上,必定要和实践的子网掩码匹配,否则各个datanode节点和coord节点间是无法正常通讯的。

因为没有留意各个细节,让这个问题困扰我一周时刻。一直在找为什么datanode之间不能彼此辨认的原因,其实就是很小的一个点。

[postgres@ip-10-21-13-109 pgxc_ctl]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 02:57:E7:56:4C:70
inet addr:10.21.13.109  Bcast:10.21.13.127  Mask:255.255.255.128<<<<<<10.21.13.0/25
inet6 addr: fe80::57:e7ff:fe56:4c70/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
RX packets:29500 errors:0 dropped:0 overruns:0 frame:0
TX packets:28538 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3113614 (2.9 MiB)  TX bytes:4653853 (4.4 MiB)
Interrupt:160

2. 假如遇到建表,建库失利,也是遇到上面的拜访操控权限问题。在布置完结之后,这个参数是在/home/postgres/pgxc/nodes/dn_master/pg_hba.conf和/home/postgres/pgxc/nodes/coord/pg_hba.conf中设置的。可是从头init,会覆盖掉这些文件的。

postgres=# create database test;
ERROR:  Failed to get pooled connections
HINT:  This may happen because one or more nodes are currently unreachable, either because of node or network failure.
Its also possible that the target node may have hit the connection limit or the pooler is configured with low connections.
Please check if all nodes are running fine and also review max_connections and max_pool_size configuration parameters

3. 有许多人的装置方法,是最终经过手动履行下面指令,增加coord和datanode,其实前面的pgxc_ctl.conf装备正确的话,脚本都是主动帮你完结的,没有必要人工干预

create node coord1 with (type=coordinator,host=c6702, port=20004);
create node coord2 with (type=coordinator,host=c6703, port=20005);
alter node coord3 with (type=coordinator,host=c6704, port=20004);
create node datanode1 with (type=datanode, host=c6702,port=20008);
create node datanode2 with (type=datanode, host=c6703,port=20008);
alter  node datanode3 with (type=datanode, host=c6704,port=20008);

4. 第8步,make PGXL软件进程中,必定要细心检查输出,有过错必定要纠正。否则后续会发现,有许多指令软件,都没有装置成功。


5.假如你在长途登陆postgres sql遇到如下问题

[root@c6703 ~]# psql -h 10.21.13.67 -p 20004 -U postgres
psql: FATAL:  no pg_hba.conf entry for host "172.16.32.116", user "postgres", database "postgres"

修正/home/postgres/pgxc/nodes/dn_master/pg_hba.conf和/home/postgres/pgxc/nodes/coord/pg_hba.conf中的拜访操控权答应对应的IP有拜访权限,就能够登陆了。留意,要修正悉数的coordinator和datanode的pg_hba.conf装备文件才行。然后经过postgres用户履行reload指令,使装备文件收效。或许重启使装备收效。

[root@c6703 ~]# psql -h 10.21.13.67 -p 20004 -U test
postgres=# SELECT pg_reload_conf();
[root@c6703 ~]# psql -h 10.21.13.67 -p 20004 -U test
Password for user test: 
psql (PGXL 9.5r1.6, based on PG 9.5.8 (Postgres-XL 9.5r1.6))
Type "help" for help.

下面三篇是我首要参阅的blog,协助很大,可是每一个都有“坑”。所以,只要自己着手试验过,才会记住,你掉过和越过的“坑”

http://blog.csdn.net/yeruby/article/details/48996027

https://www.cnblogs.com/songyuejie/archive/2015/08/23/4752124.html

http://blog.csdn.net/freeland1/article/details/52346669?ref=myread


附件是第10和11步的文本文件,能够下载修正并运用。

附件:http://down.51cto.com/data/2368732
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章