最可靠的postgres-xl集群部署指南-上

前言

postgres-xl集群的各种安装部署文档网上有很多,但纵观各种手册和指南,尽然没有一个完全可靠的。趁着本次部署,完整记录了部署过程。
参考网上的资料非常多,百度搜索postgres-xl部署的前5页基本上都看过了,我会在文末做详细说明!

环境说明

本次部署环境一共使用了三台虚拟机。详细内容如下:

IP地址 hostname 角色
172.20.5.99 pg1 gtmproxy,coordinator,datanode
172.20.5.100 pg2 gtmproxy,coordinator,datanode
172.20.5.101 pg3 gtm master

###本来是要拿pg1做gtm master的,结果我先在172.20.5.101上做了各种准备工作,所以就拿pg3做gtm master了。
操作系统:CentOS 6.8;
CPU: 2个vCPU
内存:16GB
硬盘:200GB
###三个虚拟机硬件配置都一样。虚拟机不是运行在笔记本或台式机上的,是硬件服务器做了虚拟化之后新建的。
postgres-xl版本:postgres-xl-9.5r1.6.tar.bz2
linux远程连接工具:xshell 5
多说一句:9.5r1.6的发布时间是2017年8月24号,根据求稳定不追最新版的游戏规则。
格式约定:以3个###开头的句子,代表我的解释说明或者是注释。

正式开始部署

1,环境准备

1.1 操作系统准备
我的习惯,先改主机名。在linux和windows上都有这样的习惯。
0,登录虚拟机
使用自己熟悉的Linux远程连接工具登录服务器,这里我用的是xshell
1,修改主机名

#vi /etc/sysconfig/network

修改HOSTNAME所在行的内容

HOSTNAME=pg3

###pg3就是主机名,IP是172.20.5.99的服务器这里写的是pg1,IP是172.20.5.100的服务器这里写的是pg2
2,vi /etc/hosts文件,追加写入一下内容:

172.20.5.99 pg1
172.20.5.100 pg2
172.20.5.101 pg3

3,关闭selinux

#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

###执行完之后先不重启。
4,关闭防火墙并且使防火墙开机也不启动

#service iptables stop
#chkconfig iptables off

5,现在重启系统

#reboot

###注意:第1-5步需要在3台服务器上都操作一遍。重启后可以用getenforce命令检查selinux的状态就已经变成disabled了
6,继续登录pg3的服务器,上传当前操作系统版本的ISO文件到服务器上,上传的目录是/mnt,上传过程略。这一步仅在pg3上操作。
7,将ISO文件利用scp命令拷贝到pg1和pg2的/mnt目录下。这一步仅在pg3上操作。

#scp -r /mnt/CentOS-6.5-x86_64-bin-DVD1.iso root@pg1:/mnt/

###敲下回车后会要求确认是否进行传输,输入yes;之后要输入pg1服务器的root用户密码,之后就开始复制了。

#scp -r /mnt/CentOS-6.8-x86_64-bin-DVD1.iso root@pg2:/mnt/

###敲下回车后会要求确认是否进行传输,输入yes;之后要输入pg2服务器的root用户密码,之后就开始复制了。
8,上传ISO文件的目的在于制作本地yum源。这一步需要在三台服务器都进行操作。
###注意:如果你的环境里可以直接使用互联网进行安装,可以忽略第7、8步。

#cd /mnt
#mv CentOS-6.8-x86_64-bin-DVD1.iso cent.iso
#mkdir /mnt/dvd
#vi /etc/fstab 
提示:在这里可按下大写字母G,小写字母o,直接跳转至可编辑的最后一行,非常好用
/mnt/cent.iso   /mnt/dvd        iso9660 loop    0 0
提示:修改完之后保存退出
#mount -a
#df -Th    
###这个命令可以查看iso是否挂载成功
#cd /etc/yum.repos.d/
#mv CentOS-Base.repo CentOS-Base.repo_bak
#mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo_bak
#vi CentOS-Media.repo

###请参照以下内容编辑CentOS-Media.repo内容,之后保存退出

[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/dvd
gpgcheck=0
enabled=1

继续执行

#yum clean all

9,使用yum安装相关软件包。这一步需要在三台服务器都执行。

#yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl gcc

10,上传postgres-xl-9.5r1.6.tar.bz2的安装包到服务器的/tmp目录下,上传过程略。这一步需要在三台服务器都执行。也可以只上传到一台服务器上,用scp复制到另两台服务器上。第二种更快。

2,安装postgres-xl-9.5r1.6

11,创建用户并设置密码。这一步需要在三台服务器都执行。

#useradd postgres
#passwd postgres

12,配置免密登陆,使pg3可以免密登录pg1和pg2。这一步仅在pg3上执行。

# su - postgres
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa

###ssh-keygen -t rsa会生成密钥文件,为便于理解,特别截个图。
ssh-keygen -t rsa的命令截图
继续操作:

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ scp ~/.ssh/authorized_keys postgres@pg1:~/.ssh/
$ scp ~/.ssh/authorized_keys postgres@pg2:~/.ssh/
$ scp ~/.ssh/authorized_keys postgres@pg3:~/.ssh/

13,配置用户环境变量,这一步需要在三台服务器都执行。

$ cd ~
$ vi .bashrc

###为便于理解,直接上图。写好之后保存退出。
用户环境变量图
继续操作

$ source .bashrc

###这里没有细究为什么不编辑.bash_profile文件而只编辑.bashrc文件。只是看到有说编辑.bash_profile不生效的,因此我也只编辑.bashrc文件。
14,安装postgres-xl。在三台服务器上都执行。

$ su - root

###切换成root用户,需要输入root用户的密码

#mkdir /opt/pgxl
#mv /tmp/postgres-xl-9.5r1.6.tar.bz2 /opt/pgxl
#chown postgres:postgres /opt/pgxl/ -R
# su - postgres
$ tar -jxvf postgres-xl-9.5r1.6.tar.bz2
$ cd postgres-xl-9.5r1.6
$ ./configure --prefix=/opt/pgxl/
$ make 

###看了这个就代表make成功了:All of Postgres-XL successfully made. Ready to install.

$ make install

###看到这个就代表make install成功了:Postgres-XL installation complete.

3,配置集群

###配置集群最重要的配置pgxc_ctl工具,并使用其工具的配置文件进行快速部署集群。但是这个工具默认不安装,需要先安装。
15,安装pgxc_ctl并生成配置文件。仅在pg3上执行

$ cd /opt/pgxl/postgres-xl-9.5r1.6/contrib
$ ./configure
$ make
$ make install
$ cd /opt/pgxl/bin/
$ ./pgxc_ctl

###下面的截图非常重要,也是各种安装手册/指南描述最不清楚的地方。因为当执行./pgxc_ctl之后,进入的是PGXC命令模式,这一点必须理解。
PGXC解释图
16,编辑pgxc_ctl.conf文件,仅在pg3上执行

$ /vi /home/postgres/pgxc_ctl/pgxc_ctl.conf

###详细配置参考如下,很长,看完一遍什么都不懂,配完一遍思路就清楚了

pgxcInstallDir=/home/postgres/pgxc
#---- OVERALL -----------------------------------------------------------------------------
pgxcOwner=postgres		# owner of the Postgres-XC databaseo cluster.  
pgxcUser=$pgxcOwner		# OS user of Postgres-XC owner
tmpDir=/tmp					# temporary dir used in XC servers
localTmpDir=$tmpDir			# temporary dir used here locally
configBackup=n					# If you want config file backup, specify y to this value.
#configBackupHost=pgxc-linker	# host to backup config file
#configBackupDir=$HOME/pgxc		# Backup directory
#configBackupFile=pgxc_ctl.bak	# Backup file name --> Need to synchronize when original changed.
#---- GTM ------------------------------------------------------------------------------------
gtmName=gtm
gtmMasterServer=pg3
gtmMasterPort=20001
gtmMasterDir=/home/postgres/pgxc/node/gtm
#---- Configuration ---
gtmExtraConfig=none			# Will be added gtm.conf for both Master and Slave (done at initilization only)
gtmMasterSpecificExtraConfig=none	# Will be added to Master's gtm.conf (done at initialization only)
#---- GTM Slave -----------------------------------------------
#---- Overall ------
gtmSlave=n					# Specify y if you configure GTM Slave.  
#gtmSlaveName=gtmSlave
#gtmSlaveServer=node12		# value none means GTM slave is not available.  Give none if you don't configure GTM Slave.
#gtmSlavePort=20001			# Not used if you don't configure GTM slave.
#gtmSlaveDir=$HOME/pgxc/nodes/gtm	# Not used if you don't configure GTM slave.
#---- Configuration ----
#gtmSlaveSpecificExtraConfig=none 
#---- GTM Proxy -------------------------------------------------------------------------------------------------------
gtmProxyDir=/home/postgres/pgxc/node/gtm_pxy
gtmProxy=y				
gtmProxyNames=(gtm_pxy1 gtm_pxy2)	        # No used if it is not configured
gtmProxyServers=(pg1 pg2)			        # Specify none if you dont' configure it.
gtmProxyPorts=(20001 20001)				    # Not used if it is not configured.
gtmProxyDirs=($gtmProxyDir $gtmProxyDir)	# Not used if it is not configured.
#---- Configuration ----
gtmPxyExtraConfig=none		                # Extra configuration parameter for gtm_proxy.  Coordinator section has an example.
gtmPxySpecificExtraConfig=(none none)
#---- Coordinators ----------------------------------------------------------------------------------------------------
coordMasterDir=/home/postgres/pgxc/node/coord
coordSlaveDir=/home/postgres/pgxc/node/coord_slave
coordArchLogDir=/home/postgres/pgxc/node/coord_archlog
#---- Overall ------------
coordNames=(coord1 coord2)		    # Master and slave use the same name
coordPorts=(20004 20005)			# Master ports
poolerPorts=(20010 20011)			# Master pooler ports
coordPgHbaEntries=(172.20.5.0/24)				
#coordPgHbaEntries=(::1/128)	# Same as above but for IPv6 addresses
#---- Master -------------
coordMasterServers=(172.20.5.99 172.20.5.100)		# none means this master is not available
coordMasterDirs=($coordMasterDir $coordMasterDir)
coordMaxWALsernder=5
coordMaxWALSenders=($coordMaxWALsernder $coordMaxWALsernder)  # max_wal_senders configuration for each coordinator.
#---- Slave -------------
coordSlave=y
coordSlaveSync=y		# Specify to connect with synchronized mode.
coordSlaveServers=(172.20.5.100 172.20.5.99)			# none means this slave is not available
coordSlavePorts=(20004 20005)			                # Master ports
coordSlavePoolerPorts=(20010 20011)			            # Master pooler ports
coordSlaveDirs=($coordSlaveDir $coordSlaveDir)
coordArchLogDirs=($coordArchLogDir $coordArchLogDir)
#---- Configuration files---
coordExtraConfig=coordExtraConfig	# Extra configuration file for coordinators.This file will be added to all the coordinators' postgresql.conf
# Pleae note that the following sets up minimum parameters which you may want to change.
# You can put your postgresql.conf lines here.
cat > $coordExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $coordExtraConfig
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
listen_addresses = '*'
max_connections = 100
EOF
# Additional Configuration file for specific coordinator master.
# You can define each setting by similar means as above.
coordSpecificExtraConfig=(none none)
coordExtraPgHba=none	# Extra entry for pg_hba.conf.  This file will be added to all the coordinators' pg_hba.conf
coordSpecificExtraPgHba=(none none)
#----- Additional Slaves -----
coordAdditionalSlaves=n		        # Additional slave can be specified as follows: where you
#---- Datanodes -------------------------------------------------------------------------------------------------------
#---- Shortcuts --------------
datanodeMasterDir=/home/postgres/pgxc/node/dn_master
datanodeSlaveDir=/home/postgres/pgxc/node/dn_slave
datanodeArchLogDir=/home/postgres/pgxc/node/datanode_archlog
#---- Overall ---------------
#primaryDatanode=datanode1				# Primary Node.
# At present, xc has a priblem to issue ALTER NODE against the primay node.  Until it is fixed, the test will be done without this feature.
primaryDatanode=datanode1				# Primary Node.
datanodeNames=(datanode1 datanode2)
datanodePorts=(20008 20009)	# Master ports
datanodePoolerPorts=(20012 20013)	# Master pooler ports
datanodePgHbaEntries=(172.20.5.0/24)
#datanodePgHbaEntries=(::1/128)	# Same as above but for IPv6 addresses
#---- Master ----------------
datanodeMasterServers=(172.20.5.99 172.20.5.100)	
datanodeMasterDirs=($datanodeMasterDir $datanodeMasterDir)
datanodeMaxWalSender=5
datanodeMaxWALSenders=($datanodeMaxWalSender $datanodeMaxWalSender)
#---- Slave -----------------
datanodeSlave=y
datanodeSlaveServers=(172.20.5.100 172.20.5.99)	# value none means this slave is not available
datanodeSlavePorts=(20008 20009)	# value none means this slave is not available
datanodeSlavePoolerPorts=(20012 20013)	# value none means this slave is not available
datanodeSlaveSync=y		# If datanode slave is connected in synchronized mode
datanodeSlaveDirs=($datanodeSlaveDir $datanodeSlaveDir)
datanodeArchLogDirs=( $datanodeArchLogDir $datanodeArchLogDir )
# ---- Configuration files ---
datanodeExtraConfig=none	# Extra configuration file for datanodes.  This file will be added to all the datanodes' postgresql.conf
datanodeSpecificExtraConfig=(none none)
datanodeExtraPgHba=none		# Extra entry for pg_hba.conf.  This file will be added to all the datanodes' postgresql.conf
datanodeSpecificExtraPgHba=(none none)
#----- Additional Slaves -----
datanodeAdditionalSlaves=n	# Additional slave can be specified as follows: where you
#---- WAL archives -------------------------------------------------------------------------------------------------
#=============<< End of future extension demonistration >> ========================================================
walArchive=n

17,创建目录。根据pgxc_ctl.conf文件中提到各种未注释的目录都必须得有。因此需要根据文件内容和服务器的角色来创建相应目录。
###以下命令仅在pg3上执行

$ cd ~
$ .mkdir -p /home/postgres/pgxc/node/gtm

###以下命令要在pg1和pg2上执行

$ mkdir -p /home/postgres/pgxc/node/gtm_pxy
$ mkdir -p /home/postgres/pgxc/node/coord
$ mkdir -p /home/postgres/pgxc/node/coord_slave
$ mkdir -p /home/postgres/pgxc/node/coord_archlog
$ mkdir -p /home/postgres/pgxc/node/dn_master
$ mkdir -p /home/postgres/pgxc/node/dn_slave
$ mkdir -p /home/postgres/pgxc/node/datanode_archlog

18,初始化postgres-xl集群

$ cd /opt/pgxl/bin/
$ pgxc_ctl -c /home/postgres/pgxc_ctl/pgxc_ctl.conf init all

###只要是严格按照以上步骤来的,初始化过程不会报错。

至此,安装完成,可以用psql命令在pg1和pg2上登录了。
在这里插入图片描述
在这里插入图片描述
###后面计划后面再写个下,记录一下常见问题的处理,以及最重要的安装过程中踩过的坑!!!

发布了1 篇原创文章 · 获赞 1 · 访问量 232
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览