无法连接到虚拟机中的PGpool

时间:2015-07-14 19:00:42

标签: postgresql virtualbox ubuntu-14.04 database-replication pgpool

我想在两个PostgreSQL实例之间建立一个简单的主/从复制,每个实例都运行在两个不同主机的虚拟机中。

两个虚拟机都具有NAT配置,具有以下端口转发规则:

PROTO    HOST    GUEST
TCP      40022   22
TCP      45432   5432
TCP      9999    9999

我可以使用来自主机和来宾操作系统的PGAdmin III连接到两个PostgreSQL实例。 pgpool2服务也启动没有错误,但我无法使用pgAdmin或psql连接到它。

当我尝试使用psql连接到pgpool时会发生这种情况:

psql -p 9999 -U postgres -h localhost dbname
psql: server closed the connection unexpectedly
        This probably means the server terminated abnormally before or while processing the request.

两个后端都在pgpool.conf中定义:

backend_hostname0 = 'localhost'
backend_port0 = '5432'
backend_data_directory0 = '/var/lib/postgresql/9.3/main'
backend_weight0 = 1
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '192.168.7.25'
backend_port1 = '45432'
backend_data_directory1 = '/var/lib/postgresql/9.3/main'
backend_weight1 = 1
backend_flag1 = 'ALLOW_TO_FAILOVER'

在同一文件中,replication_mode和load_balance_mode都设置为true。

我相信pgpool可能存在一些配置问题,因为在启用调试标志的情况下手动运行时,我可以看到后端被选中:

2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_hostname0
2015-07-14 15:10:45 DEBUG: pid 4386: value: 'localhost' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_port0
2015-07-14 15:10:45 DEBUG: pid 4386: value: '5432' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: port slot number 0
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_data_directory0
2015-07-14 15:10:45 DEBUG: pid 4386: value: '/var/lib/postgresql/9.3/main' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_weight0
2015-07-14 15:10:45 DEBUG: pid 4386: value: 1 kind: 2
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: weight slot number 0 weight: 1.000000
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_flag0
2015-07-14 15:10:45 DEBUG: pid 4386: value: 'ALLOW_TO_FAILOVER' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: extract_string_tokens: token: ALLOW_TO_FAILOVER
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: allow_to_failover on
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: slot number 0 flag: 0000
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_hostname1
2015-07-14 15:10:45 DEBUG: pid 4386: value: '192.168.7.25' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_port1
2015-07-14 15:10:45 DEBUG: pid 4386: value: '45432' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: port slot number 1
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_data_directory1
2015-07-14 15:10:45 DEBUG: pid 4386: value: '/var/lib/postgresql/9.3/main' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_weight1
2015-07-14 15:10:45 DEBUG: pid 4386: value: 1 kind: 2
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: weight slot number 1 weight: 1.000000
2015-07-14 15:10:45 DEBUG: pid 4386: key: backend_flag1
2015-07-14 15:10:45 DEBUG: pid 4386: value: 'ALLOW_TO_FAILOVER' kind: 4
2015-07-14 15:10:45 DEBUG: pid 4386: extract_string_tokens: token: ALLOW_TO_FAILOVER
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: allow_to_failover on
2015-07-14 15:10:45 DEBUG: pid 4386: pool_config: slot number 1 flag: 0000

然而,在日志的下方,找到以下行:

2015-07-14 15:10:45 DEBUG: pid 4386: num_backends: 0 total_weight: 0.000000

我在这里做错了吗?我已经关注了pgpool的几个教程,而且我主要使用默认设置,但我还是无法让它运行。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

设置listen_addresses是什么?

在我的pgpool.conf listen_addresses = '*'

答案 1 :(得分:0)

这很可能是Ubuntu的pgpool2版本库和postgresql无法正常工作的问题。

在提高日志级别以获取更多详细信息并检查我尝试连接时发生的情况后,我发现了以下消息:

Cannot accept() new connection. all backends are down.

在Google上搜索此错误消息会将我带到this link

我决定采用相同的方法,从源代码下载并构建pgpool。经过一些调整后,被迫使用pool_hba.conf而不是仅依靠pg_hba.conf进行访问授权,我按预期工作了。

编辑:错字。