最近公司业务需求,需要使用Postgres-XL 集群,关于这部分知识,网络资料不多。经过一段时间的查询,和各种弯路之后,终于完成安装。将详细步骤完整记录,以备查阅。也希望能帮到需要的人。
下面就开始吧:
主机列表和集群安装的角色分配
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文件
1 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)
coordMas