我想创建一个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
我已安装 pgxc_ctl 并将 / usr / local / pgsql / bin 添加到 PATH 以获取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
添加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
添加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
我无法通过
连接到 coord2 psql -h 10.4.6.36 -p 30002 -U user -d postgres
显示
psql:致命:无法从GTM获取交易ID。 GTM可能已失败或丢失连接
但是我可以通过运行
连接到 coord1psql -p 30001 -U user -d postgres
我可以在没有密码的情况下从我的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 )
答案 0 :(得分:1)
你能告诉我们你的配置吗?
您的max_connections
和max_pool_size
是什么? initdb
为你的内核显示了什么?我的猜测是,当你添加datanode2(dn2)时,你没有足够的连接。
你有:
集群包括5个节点,1个GTM,2个协调器和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期间)。此参数只能在服务器启动时设置。
运行备用服务器时,必须将此参数设置为与主服务器上相同或更高的值。否则,查询 将不允许在备用服务器中使用。
对于协调员,此参数确定每个协调员可以接受的连接数。
对于 Datanode ,每个Datanode的连接数可能会变得与max_connections一样大,再乘以数量 协调。
指定协调器到Datanode的最大连接池。因为所有的交易都可以参与 Datanodes ,此参数至少应为max_connections 乘以Datanodes的数量。
修改 - 了解更新问题配置
试试这个:
协调员
max_connections=100
max_pool_size=300
Datanode(您定义了2个数据节点)
max_connections=200
max_pool_size=500