在Centos7环境下进行搭建postgresql-xl集群环境

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 在Centos7环境下进行搭建postgresql-xl集群环境
本次使用环境centos7,
共3台服务器,基础配置采用4核4G内存200G机械硬盘

在初装系统机器中开始进行以下操作

使用root账号开始进行以下操作
目前安装的xl兼容版本为postgresql10版本。
第一步:所有集群中的服务器均进行初始修改/etc/hosts,增加内容如下:
10.228.0.45 gtm
10.228.0.46 datanode1
10.228.0.47 datanode2
第二步关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
第三步 关闭selinux
vim /etc/selinux/config
SELINUX=disabled
第四步基础依赖包安装
yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl git gcc
第五步重启使其之前配置生效
reboot
第六步: 创建postgres用户
useradd postgres
passwd postgres
第七步:设置ssh免密,这里注意要每个节点均创建.ssh目录和其权限设置,免密的公钥私钥可以不进行创建
su - postgres
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
第八步:将gtm节点的ssh免密文件复制到datanode存储节点
scp ~/.ssh/authorized_keys postgres@datanode1:~/.ssh/
scp ~/.ssh/authorized_keys postgres@datanode2:~/.ssh/
第九步:开始安装postgresql-xl
su root
cd /opt
git clone git://git.postgresql.org/git/postgres-xl.git
cd postgres-xl/
./configure --prefix=/home/postgres/pgxl/
make
make install
cd contrib
make
make install
第十步:配置基础环境变量
su - postgres
vim .bashrc
文件最后增加以下内容:
export PGHOME=/home/postgres/pgxl
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH
第十一步:使环境变量生效并测试是否配置成功
source .bashrc
echo $PGHOME
mkdir pgxc
mkdir pgxc_bak

基础环境安装完成,以下步骤为集群配置,集群发起从GTM所在服务器进行执行即可

第一步:在postgres用户根目录下生成pgxc_ctl配置文件,创建集群文件存放目录和备份目录
pgxc_ctl
PGXC prepare
PGXG exit

image.png

第二步:修改pgxc_ctl.conf文件配置
cd pgxc_ctl/
vim pgxc_ctl.conf
#!/usr/bin/env bash
#
# Postgres-XC Configuration file for pgxc_ctl utility. 
#
# Configuration file can be specified as -c option from pgxc_ctl command.   Default is
# $PGXC_CTL_HOME/pgxc_ctl.org.
#
# This is bash script so you can make any addition for your convenience to configure
# your Postgres-XC cluster.
#
# Please understand that pgxc_ctl provides only a subset of configuration which pgxc_ctl
# provide.  Here's several several assumptions/restrictions pgxc_ctl depends on.
#
# 1) All the resources of pgxc nodes has to be owned by the same user.   Same user means
#    user with the same user name.  User ID may be different from server to server.
#    This must be specified as a variable $pgxcOwner.
#
# 2) All the servers must be reacheable via ssh without password.   It is highly recommended
#    to setup key-based authentication among all the servers.
#
# 3) All the databases in coordinator/datanode has at least one same superuser.  Pgxc_ctl
#    uses this user to connect to coordinators and datanodes.   Again, no password should
#    be used to connect.  You have many options to do this, pg_hba.conf, pg_ident.conf and
#    others.  Pgxc_ctl provides a way to configure pg_hba.conf but not pg_ident.conf.   This
#    will be implemented in the later releases.
#
# 4) Gtm master and slave can have different port to listen, while coordinator and datanode
#    slave should be assigned the same port number as master.
#
# 5) Port nuber of a coordinator slave must be the same as its master.
#
# 6) Master and slave are connected using synchronous replication.  Asynchronous replication
#    have slight (almost none) chance to bring total cluster into inconsistent state.
#    This chance is very low and may be negligible.  Support of asynchronous replication
#    may be supported in the later release.
#
# 7) Each coordinator and datanode can have only one slave each.  Cascaded replication and
#    multiple slave are not supported in the current pgxc_ctl.
#
# 8) Killing nodes may end up with IPC resource leak, such as semafor and shared memory.
#    Only listening port (socket) will be cleaned with clean command.
#
# 9) Backup and restore are not supported in pgxc_ctl at present.   This is a big task and
#    may need considerable resource.
#
#========================================================================================
#
#
#使用pgxc_ctl部署时创建的基础目录,这里采用的是当前postgres用户根目录下的pgxc文件夹。
pgxcInstallDir=$HOME/pgxc
#---- OVERALL -----------------------------------------------------------------------------
#
pgxcOwner=$USER            # 用来操作Postgres-XC集群的服务器账号和数据库账号,数据库账号需要具有超级管理员权限,同时该用户还应是coordinator节点和datanode节点的超级管理员。这里我们直接采用的是postgres用户。
pgxcUser=$pgxcOwner        # 设置Postgres-XC 集群的超级管理员,直接使用刚预设的用户就行。

tmpDir=/tmp                    # xc集群使用的临时文件存放目录
localTmpDir=$tmpDir            # 本地使用的临时目录

configBackup=y                # 是否开启文件备份策略,n为关闭,y为开启
configBackupHost=pgxc-linker    #主备份配置文件 host to backup config file
configBackupDir=$HOME/pgxc_bak        # 备份目录
configBackupFile=pgxc_ctl.bak    # 备份文件名称

#---------------------------------------------------------------------------------------
#---- GTM配置 ------------------------------------------------------------------------------------

# GTM 配置是不可以缺少的,Postgres-XC集群中GTM至少具有一个,通常结构是一个GTM和一个备份GTM,如果GTM崩溃了,可以使用pgxc_update_gtm命令更新,同时也可以使用pgxc_remove_gtm进行删除它,删除命令不会直接停止当前的GTM,需要管理员先预先断开其与GTM的连接。


#---- GTM master 主节点配置-----------------------------------------------

#---- Overall ----
gtmName=gtm #gtm的名字
gtmMasterServer=gtm #gtm所属服务器,之前已经配置了/etc/hosts中的主机名与IP的关系了,所以这里可以直接使用gtm,也可以使用IP 10.228.0.45
gtmMasterPort=20001 #gtm交互使用的端口号
gtmMasterDir=$HOME/pgxc/nodes/gtm #gtm所在目录

#---- Configuration ---
gtmExtraConfig=none            # master节点和slave节点使用的gtm.conf文件,只做初始化使用。默认设置为无
gtmMasterSpecificExtraConfig=none    # 主GTM的初始化配置文件,默认设置为无,上面已经配置了基础参数了,如果有自定义配置GTM,可以创建gtm.conf文件并配置到此处即可。

#---- GTM Slave -----------------------------------------------

# GTM的从节点,用于GTM备份,在GTM主节点出现问题时,可以由该从节点进行支撑处理。生产中配置该节点可以有效避免单点故障。

#---- Overall ------
gtmSlave=n                    # 开启GTM从节点配置,y开启,n关闭
#gtmSlaveName=gtmSlave              #GTM从节点名称
#gtmSlaveServer=node12        #GTM从节点部署服务器IP地址,如果在服务端已经配置了hosts的映射关系,则可以直接使用名称,否则需要配置为IP地址。
#gtmSlavePort=20001            # GTM从节点交互端口号
#gtmSlaveDir=$HOME/pgxc/nodes/gtm    # GTM从节点部署目录。
# 如果不配置GTM从节点,则GTM主节点发生故障时无法有效进行切换。管理员可以通过pgxc_add_gtm_slave进行添加处理。

#---- Configuration ----
#gtmSlaveSpecificExtraConfig=none #GTM从节点初始化安装时使用的配置文件,gtm.conf文件。

#---- GTM Proxy -------------------------------------------------------------------------------------------------------
# GTM Proxy将根据每个组件在哪个服务器上运行来选择
# 当GTM从节点接替主节点时,主节点的 gtm proxy需要指向到GTM从节点。因此GTM proxy应该配置到一个新的位置,从而防止因为主节点出现问题时,proxy也同时出现问题无法指向到GTM从节点。
#
# GTM从节点重启时,更改pg_ctl的基础文件,postgresql.conf和recovery.conf配置文件,再进行执行pg_ctl restart进行重启服务
#
# 如果不使用GTM slave,或者由GTM主节点直接管理各个节点,则不需要进行配置Proxy节点,但配置了GTM slave,则必须配置Proxy节点。Proxy节点可以分担GTM主节点的工作量,因此我们通常在配置时都将该Proxy节点进行配置。
#---- Shortcuts ------
gtmProxyDir=$HOME/pgxc/nodes/gtm_pxy #Proxy的存放路径。

#---- Overall -------
gtmProxy=y                # 是否开启proxy节点配置,y开启,n关闭,关闭时相关的配置信息将被设置为空值。
gtmProxyNames=(gtm_pxy1 gtm_pxy2)    # proxy节点名称
gtmProxyServers=(datanode1 datanode2)            # 存放的服务器,可以配置多个,这里配置在各个存储节点服务器上,因其已经在/etc/hosts中配置了映射关系,因此这里直接写的主机名,如果没有配置,则需要写IP地址。
gtmProxyPorts=(20001 20001)                # 交互使用的端口号,上面配置了几台服务器,这里就需要配置几个端口号,每个端口号的所在位置和上面的服务器所在位置对应。
gtmProxyDirs=($gtmProxyDir $gtmProxyDir)    # 各服务器中proxy的存放路径,这里直接统一使用一样的,方便各个存储节点中查找。

#---- Configuration ----
gtmPxyExtraConfig=none        # proxy节点使用的 gtm_proxy配置文件
gtmPxySpecificExtraConfig=(none none)  #各节点服务器中的具体配置文件

#------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------
#---- Coordinators 配置----------------------------------------------------------------------------------------------------

#---- shortcuts ----------
coordMasterDir=$HOME/pgxc/nodes/coord
coordSlaveDir=$HOME/pgxc/nodes/coord_slave
coordArchLogDir=$HOME/pgxc/nodes/coord_archlog

#---- Overall ------------
coordNames=(coord1)        # master和slave节点使用相同的名称
coordPorts=(20004)            # 主节点端口号
poolerPorts=(20010)            # Master pooler ports
coordPgHbaEntries=(10.228.0.0/25)                # 所有的coordinator (master/slave) 节点均接受的服务端IP段,该配置只接受 $pgxcOwner连接。如果不想放开指定段,可以使用coordExtraPgHba或 coordSpecificExtraPgHba参数进行设置,只需要在()中填写指定的IP即可。
#coordPgHbaEntries=(::1/128)    # IPv6地址段。

#---- Master -------------
coordMasterServers=(gtm)        # 主节点所在服务器,同样的使用的是主机名映射,可以设置IP
coordMasterDirs=($coordMasterDir) #Coordinators 主节点存放地址
coordMaxWALsernder=5    # 配置从节点最大数量,如果配置0,则按照下面配置的外部文件进行查找该参数,如果不配置从节点,可以将该值设置为0.
coordMaxWALSenders=($coordMaxWALsernder)
                        # 每个 coordinator节点的最大协调数量,即从节点在交互时需要和各个节点进行交互,因此这里直接配置和上面从节点最大数量一致即可。

#---- Slave -------------
coordSlave=n            # 凡是具有 coordiantor slave节点,则该配置必须设置为y,否则设置为n,当设置为n时,以下关于slave节点的配置将被设置为none.  
coordSlaveSync=y        # 开启同步模式连接。
coordSlaveServers=(datanode1 datanode2)            #从节点所在服务器,同上设置一样,使用主机名或者IP的方式进行设置。
coordSlavePorts=(20004 20005 20004 20005)            # 各节点主要交互端口
coordSlavePoolerPorts=(20010 20011 20010 20011)            #主交互池端口 pooler ports
coordSlaveDirs=($coordSlaveDir $coordSlaveDir)
coordArchLogDirs=($coordArchLogDir $coordArchLogDir)

#---- Configuration files---
# 设置特定的非默认配置,可以通过bash脚本或者额外的pg_hba.conf提供。
coordExtraConfig=coordExtraConfig    #coordinators的额外配置文件,即上面提到的外部配置文件,额外的配置将应用到所有的coordinators节点的postgresql.conf配置文件中。以下为设置的最小参数,这里可以将自己的postgresql.conf配置增加到下面。
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


#针对coordinator master节点附加的配置文件。
# You can define each setting by similar means as above.
coordSpecificExtraConfig=(none none)
coordExtraPgHba=none    # 设置 pg_hba.conf文件,该配置将应用到所有的coordinator节点的 pg_hba.conf文件中。
coordSpecificExtraPgHba=(none none)

#----- Additional Slaves -----
#
# 以下配置为额外的多重级联复制配置,该配置不在当前使用的版本中使用。
#
coordAdditionalSlaves=n        # Additional slave can be specified as follows: where you
coordAdditionalSlaveSet=(cad1)        # Each specifies set of slaves.   This case, two set of slaves are
                                            # configured
cad1_Sync=n                  # All the slaves at "cad1" are connected with asynchronous mode.
                            # If not, specify "y"
                            # The following lines specifies detailed configuration for each
                            # slave tag, cad1.  You can define cad2 similarly.
cad1_Servers=(datanode1 datanode2)    # Hosts
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)

#---------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------
#---- Datanodes 配置-------------------------------------------------------------------------------

#---- Shortcuts --------------
datanodeMasterDir=$HOME/pgxc/nodes/dn_master
datanodeSlaveDir=$HOME/pgxc/nodes/dn_slave
datanodeArchLogDir=$HOME/pgxc/nodes/datanode_archlog

#---- Overall ---------------
#primaryDatanode=datanode1
# 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                # 主节点
datanodeNames=(datanode1 datanode2) #所有节点名称
datanodePorts=(20008 20008)    #主交互端口
datanodePoolerPorts=(20012 20012)    # 主交互池端口
datanodePgHbaEntries=(10.228.0.0/25)    # 所有 coordinator (master/slave) 节点可接受的连接IP段,该通讯只允许pg_hba.conf中的$pgxcOwner 用户通过。如果要设置其他的策略,需通过下面配置的额外配置文件进行制定。如果要设置指定的IP通过,可以通过datanodeExtraPgHba 和 datanodeSpecificExtraPgHba 参数进行设置。
#datanodePgHbaEntries=(::1/128)    # 和上面一样的策略,但过滤的IP为IPv6协议。

#---- Master ----------------
datanodeMasterServers=(datanode1 datanode2)    # 所有节点的服务器IP地址,可以设置hosts中映射的值或IP地址。不可设置为无,否则集群将不能运行。
datanodeMasterDirs=($datanodeMasterDir $datanodeMasterDir)
datanodeMaxWalSender=5                                # 最大配置从节点,如果为0则需要在外部配置文件中进行设置,如果不配置从节点,则此值可以设置为0。
datanodeMaxWALSenders=($datanodeMaxWalSender $datanodeMaxWalSender)
                        # 每个节点发起数量。

#---- Slave -----------------
datanodeSlave=n            # 存储从节点是否开启,设置y开启,则每个节点至少配置一个Coordinator从节点。如果没有有效的服务器名称,则以下相关参数值将采用none。
datanodeSlaveServers=(datanode1 datanode2)    # 各存储从节点服务器地址,可用映射名或IP
datanodeSlavePorts=(20008 20008)    # 各存储从节点主交互端口
datanodeSlavePoolerPorts=(20012 20012)    # 各存储从节点主交互池端口
datanodeSlaveSync=y        # 是否开启存储从节点同步模式
datanodeSlaveDirs=($datanodeSlaveDir $datanodeSlaveDir)
datanodeArchLogDirs=( $datanodeArchLogDir $datanodeArchLogDir)

# ---- Configuration files ---
# 以下设置为配置自定义外部bash脚本或外部pg_hba.conf文件
datanodeExtraConfig=none    # 额外的datanodes配置文件. 该文件中的配置将添加到所有存储节点的postgresql.conf中。
datanodeSpecificExtraConfig=(none none)
datanodeExtraPgHba=none        # 额外的 pg_hba.conf。
datanodeSpecificExtraPgHba=(none none)

#----- Additional Slaves -----
datanodeAdditionalSlaves=n    # 是否开启额外的slave节点配置
# datanodeAdditionalSlaveSet=(dad1 dad2)        # 各节点名称
# dad1_Sync=n                  # 所有节点都以异步的方式进行连接,如果不采用异步,则设置为y。
# dad1_Servers=(node08 node09 node06 node07)    # 各节点所在服务器地址,映射名或IP地址
# dad1_dir=$HOME/pgxc/nodes/coord_slave_cad1
# dad1_Dirs=($cad1_dir $cad1_dir $cad1_dir $cad1_dir)
# dad1_ArchLogDir=$HOME/pgxc/nodes/coord_archlog_cad1
# dad1_ArchLogDirs=($cad1_ArchLogDir $cad1_ArchLogDir $cad1_ArchLogDir $cad1_ArchLogDir)

#---- WAL archives -------------------------------------------------------------------------------------------------
walArchive=n    # wal日志记录,开启则设置y
#
#        基础配置完成
#
#==========================================================================================================================

#========================================================================================================================
# The following is for extension.  Just demonstrate how to write such extension.  There's no code
# which takes care of them so please ignore the following lines.  They are simply ignored by pgxc_ctl.
# No side effects.
#=============<< Beginning of future extension demonistration >> ========================================================
# You can setup more than one backup set for various purposes, such as disaster recovery.
walArchiveSet=(war1 war2)
war1_source=(master)    # you can specify master, slave or ano other additional slaves as a source of WAL archive.
                    # Default is the master
wal1_source=(slave)
wal1_source=(additiona_coordinator_slave_set additional_datanode_slave_set)
war1_host=node10    # All the nodes are backed up at the same host for a given archive set
war1_backupdir=$HOME/pgxc/backup_war1
wal2_source=(master)
war2_host=node11
war2_backupdir=$HOME/pgxc/backup_war2
#=============<< End of future extension demonistration >> ========================================================

更多参数参考:http://postgres-xc.sourceforge.net/docs/1_1/pgxc-ctl.html

第三步:执行初始化
pgxc_ctl -c /home/postgres/pgxc_ctl/pgxc_ctl.conf init all 
第四步:启动集群

默认初始化完成后已经启动了集群了,平常进行开启关闭使用以下语句

pgxc_ctl -c /home/postgres/pgxc_ctl/pgxc_ctl.conf start all
pgxc_ctl -c /home/postgres/pgxc_ctl/pgxc_ctl.conf stop all 
第五步:进入psql
psql -p 20004
进入其他远程节点
psql -h datanode2 -p 20008 -U postgres
查询集群状态
select * from pgxc_node;

9.png

至此整个集群环境搭建完成。
本文声明:

5330898-d1c72b6c90e378f3.png
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
关系型数据库 MySQL Linux
centos7.0环境下安装MySql_8.0.12
centos7.0环境下安装MySql_8.0.12
|
2月前
|
JavaScript Java 应用服务中间件
centos部署vue项目(java,tomcat环境的搭建)
centos部署vue项目(java,tomcat环境的搭建)
43 0
|
1月前
|
存储 JavaScript Linux
Linux环境下安装nmp(Centos环境)保姆级教学 一步到位
Linux环境下安装nmp(Centos环境)保姆级教学 一步到位
|
2月前
|
关系型数据库 MySQL Linux
CentOS7环境下安装MySQL5.6
CentOS7环境下安装MySQL5.6
197 0
|
1天前
|
负载均衡 监控 Linux
CentOS6.5高可用集群LVS+Keepalived(DR模式)
CentOS6.5高可用集群LVS+Keepalived(DR模式)
|
15天前
|
分布式计算 Hadoop Java
centos 部署Hadoop-3.0-高性能集群(一)安装
centos 部署Hadoop-3.0-高性能集群(一)安装
16 0
|
15天前
|
Linux Apache
CentOS 7 源码安装LAMP环境源 和apache监听别的端口
CentOS 7 源码安装LAMP环境源 和apache监听别的端口
12 0
|
2月前
|
Java Linux 开发工具
Centos7搭建minio分布式集群
Centos7搭建minio分布式集群
|
2月前
|
Java Linux 开发工具
Azkaban【部署 01】Linux环境 CentOS Linux release 7.5.1804安装配置azkaban-3.70.0编译阶段(附安装包及gradle-4.6资源)
【2月更文挑战第4天】Linux环境 CentOS Linux release 7.5.1804安装配置azkaban-3.70.0编译阶段(附安装包及gradle-4.6资源)
34 1
|
2月前
|
关系型数据库 Linux Shell
Centos系统上安装PostgreSQL和常用PostgreSQL功能
Centos系统上安装PostgreSQL和常用PostgreSQL功能