Pra*_*h M 7 postgresql postgres-xl postgresql-9.5
我想创建一个postgres-xl集群.该集群包括5个节点,1个GTM,2个协调器和2个Datanode.以下是节点的详细信息
GTM:
hostname=localhost
nodename=gtm
IP=127.0.0.1
port=20001
Coordinator1?
hostname=localhost
nodename=coord1
IP=127.0.0.1
pooler_port=30011?port=30001
Coordinator2?
hostname=host2
nodename=coord2
IP=10.4.6.36
pooler_port=30012?port=30002
Datanode1?
hostname=localhost
nodename=dn1
IP=127.0.0.1
pooler_port=40011, port=40001
Datanode2?
hostname=host2
nodename=dn2
IP=10.4.6.36
pooler_port=40012, port=40002
Run Code Online (Sandbox Code Playgroud)
我已经安装了pgxc_ctl并将/ usr/local/pgsql/bin添加到PATH for postgres.我已配置ssh身份验证以避免输入pgxc_ctl的密码.我在两个节点上编辑了postgresql.conf和pg_hba.conf.
然后我按如下方式构建了集群:
$ pgxc_ctl
PGXC$ add gtm master gtm localhost 20001 $dataDirRoot/gtm
PGXC$ add coordinator master coord1 localhost 30001 30011
$dataDirRoot/coord_master.1 none none
PGXC$ add coordinator master coord2 10.4.6.36 30002 30012
$dataDirRoot/coord_master.2 none none
Run Code Online (Sandbox Code Playgroud)
添加coord2后,我得到以下内容
psql:致命:无法从GTM获取事务ID.GTM可能已失败或丢失连接
PGXC$ add datanode master dn1 localhost 40001 40011
$dataDirRoot/dn_master.1 none none none
PGXC$ add datanode master dn2 10.4.6.36 40002 40012
$dataDirRoot/dn_master.2 none none none
Run Code Online (Sandbox Code Playgroud)
添加dn2后,我收到以下错误
错误:无法获得池化连接提示:这可能是因为一个或多个节点当前无法访问,原因可能是节点或网络故障.目标节点也可能已经达到连接限制,或者池中的连接配置较低.请检查所有节点是否正常运行,还要检查max_connections和max_pool_size配置参数
但是,当我监控所有节点时,它会显示出来
PGXC$ monitor all
Running: gtm master
Running: coordinator master coord1
Running: coordinator master coord2
Running: datanode master dn1
Running: datanode master dn2
Run Code Online (Sandbox Code Playgroud)
我无法通过运行连接到coord2
psql -h 10.4.6.36 -p 30002 -U user -d postgres
Run Code Online (Sandbox Code Playgroud)
表明
psql:致命:无法从GTM获取事务ID.GTM可能已失败或丢失连接
但我可以通过运行连接到coord1
psql -p 30001 -U user -d postgres
Run Code Online (Sandbox Code Playgroud)
我可以在没有密码的情况下从我的localhost ping host2.我需要解决上述错误.有帮助吗?添加配置:
pgxcInstallDir=$HOME/pgxc
pgxcOwner=$USER
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=n
configBackupHost=pgxc-linker
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak
dataDirRoot=$HOME/DATA/pgxl/nodes
#---- Coordinators ----------------------------------------------------------------------------------------------------
coordMasterDir=$dataDirRoot/coord_master
coordSlaveDir=$HOME/coord_slave
coordArchLogDir=$HOME/coord_archlog
coordExtraConfig=coordExtraConfig
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_pool_size=300
max_connections=200
hot_standby = off
EOF
#---- Datanodes -------------------------------------------------------------------------------------------------------
datanodeMasterDir=$dataDirRoot/dn_master
datanodeSlaveDir=$dataDirRoot/dn_slave
datanodeArchLogDir=$dataDirRoot/datanode_archlog
datanodeExtraConfig=datanodeExtraConfig
cat > $datanodeExtraConfig <<EOF
#================================================
# Added to all the datanode postgresql.conf
# Original: $datanodeExtraConfig
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
listen_addresses = '*'
max_pool_size=300
max_connections=200
hot_standby = off
EOF
#---- GTM ------------------------------------------------------------------------------------
gtmName=gtm
gtmMasterServer=localhost
gtmMasterPort=20001
gtmMasterDir=$dataDirRoot/gtm
coordNames=( coord1 coord2 )
coordMasterServers=( localhost 10.4.6.36 )
coordPorts=( 30001 30002 )
poolerPorts=( 30011 30012 )
coordMasterDirs=( $dataDirRoot/coord_master.1 $dataDirRoot/coord_master.2 )
coordMaxWALSenders=( 5 5 )
coordSlave=n
coordSlaveServers=( none none )
coordSlavePorts=( none none )
coordSlavePoolerPorts=( none none )
coordSlaveDirs=( none none )
coordArchLogDirs=( none none )
coordSpecificExtraConfig=( coordExtraConfig coordExtraConfig )
coordSpecificExtraPgHba=( none none )
datanodeNames=( dn1 dn2 )
datanodeMasterServers=( localhost 10.4.6.36 )
datanodePorts=( 40001 40002 )
datanodePoolerPorts=( 40011 40012 )
datanodeMasterDirs=( $dataDirRoot/dn_master.1 $dataDirRoot/dn_master.2 )
datanodeMasterWALDirs=( none none )
datanodeMaxWALSenders=( 5 5 )
datanodeSpecificExtraConfig=( datanodeExtraConfig datanodeExtraConfig )
datanodeSpecificExtraPgHba=( none none )
Run Code Online (Sandbox Code Playgroud)
您能向我们展示您的配置吗?
max_connections你的和是什么max_pool_size?initdb你的内核显示了什么?我的猜测是,当您添加 datanode2 (dn2) 时,您没有足够的连接。
你有:
集群包括5个节点,1个GTM,2个Coordinator和2个Datanode。以下是节点的详细信息。
Postgres-xl 特定:
max_pool_size=300
max_coordinators=2
max_datanodes=2
如果是协调器(最小设置):
max_connections=100# 从应用程序接受的连接数
max_prepared_transactions = 100# 与连接数相同
如果是Datanode(最小设置):
max_connections=200 # 2 个协调器
max_prepared_transactions=2#指定集群中至少有协调器总数。
摘自 Postgres(-xl) 文档
确定与数据库服务器的最大并发连接数。默认值通常为 100 个连接,但如果您的内核设置不支持它(在 initdb 期间确定),则可能会更少。该参数只能在服务器启动时设置。
当运行备用服务器时,必须将此参数设置为与主服务器上相同或更高的值。否则,备用服务器将不允许查询。
对于Coordinator来说,该参数决定每个 Coordinator 可以接受多少个连接。
在Datanode的情况下,每个 Datanode 的连接数量可能会变得与 max_connections 乘以协调器数量一样大。
指定Coordinator到Datanodes的最大连接池。由于每个事务都可以涉及所有 Datanode,因此该参数至少应为 max_connections 乘以 Datanode 数量。
编辑- 用于更新问题配置
尝试这个:
协调员
max_connections=100
max_pool_size=300
Run Code Online (Sandbox Code Playgroud)数据节点(您定义了 2 个数据节点)
max_connections=200
max_pool_size=500
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |