pgpool-II常见错误

2023-11-19

持续更新中…

1 pg_hba中的项不匹配

假设您的pgpool集群中有2个节点,您更新了其中一个节点中的pg_hba.conf条目,但忘记在其他节点上应用相同的条目,您会看到如下错误:

psql -d postgres -U postgres -h 127.0.0.1 -p 5432 -c "show pool_nodes" ;
psql: error: could not connect to server: ERROR:  unable to read message kind
DETAIL:  kind does not match between master(52) slot[1] (45)

解决方案:

  • 上面的错误消息很难理解,因为它没有在任何地方说明是pg_hba.conf文件导致的错误.
  • 此类错误请检查2个节点中的pg_hba.conf是否完全一致.

2 pgpool流式复制检查错误

2.1 连接参数配置错误

在pgpool.conf文件中,您需要确保具有正确的参数来设置流式传输复制运行状况检查,否则您会看到类似于下面所述的错误:

pgpool find_primary_node: make_persistent_db_connection_noerror failed on node+

解决方案:

请检查以下参数(其中最后一个字符x表示0,1,…台主机):

backend_hostnamex
backend_portx

#流复制检查的数据库
sr_check_database
#流复制检查使用的用户,注意此用户为连接至数据库的用户,不能是replication类型的用户
sr_check_user
#流复制检查使用的用户密码
sr_check_password

2.2 pg_hba.conf配置问题

2022-09-22 18:19:18.301: main pid 1304: LOG:  find_primary_node: make_persistent_db_connection_noerror failed on node 0

错误原因:检查流复制延迟时,连接数据库失败

解决方案:

检查的配置

sr_check_user = 'postgres'
sr_check_password = ''
sr_check_database = 'test'
psql -h 随机一台数据库主机 -U  sr_check_user -d sr_check_database
#然后输入sr_check_password中设置的密码可得到详细的错误信息

#示例
psql -h pgser02 -U postgres -d test

示例报告的错误

psql: error: connection to server at "pgser02" (192.168.1.68), port 5432 failed: FATAL:  no pg_hba.conf entry for host "192.168.1.67", user "postgres", database "test", no encryption

示例出错的原因是pg_hba.conf不允许postgres用户登录test数据库.只需要重新配置 pg_hba.conf即可

 vim ${PGDATA}/pg_hba.conf

修改postgres用户可以本地或本网段登录所有数据库

host    all             postgres        127.0.0.1/32            trust
host    all             postgres        192.168.1.0/24          trust

测试

psql -h pgser01 -U postgres -d test -c "\q" && \
psql -h pgser02 -U postgres -d test -c "\q" && \
psql -h pgser03 -U postgres -d test -c "\q" && \
psql -h pgser04 -U postgres -d test -c "\q"

3 SCRAM方法错误

当您使用scram身份验证时,您可能会看到如下错误:

psql: error: could not connect to server: ERROR:  failed to authenticate with backend using SCRAM
DETAIL:  valid password not found

解决方案:
您需要在pgpool.conf中的pool_passwd参数指定的文件中定义密码

pool_passwd = 'pool_passwd'

pool_passwd文件的创建方法

自Pgpool-II 4.0起支持scram-sha-256、证书和明文密码

su - postgres

#将pgpoolkey保存至 ~/.pgpoolkey
echo '123' > ~/.pgpoolkey
chmod 600 ~/.pgpoolkey 

sudo rm /usr/local/pgpool/etc/pool_passwd
sudo /usr/local/pgpool/bin/pg_enc -m -k ~/.pgpoolkey -u test -p

cat /usr/local/pgpool/etc/pool_passwd

/usr/local/pgpool/bin/pg_md5 test

4 pgpool_node_id

Pgpool-II 4.1或更早版本,因为需要指定自己的pgpool节点信息和目标pgpool节点信息,因此每个pgpool节点的设置是不同的.
从Pgpool-II 4.2开始,所有主机上的所有配置参数都是相同的.如果启用了监视程序功能,为了区分哪个主机需要创建pgpool_node_id文件.pgpool_node_id文件并指定 pgpool(看门狗)节点号来标识pgpool(看门狗)主机。

必须手动创建pgpool_node_id文件,否则报异常:

FATAL:  Pgpool node id file /usr/local/pgpool/etc/pgpool_node_id does not exist

解决方案:创建pgpool_node_id

su postgres

vim /usr/local/pgpool/etc/pgpool_node_id
0
cat</usr/local/pgpool/etc/pgpool_node_id

5 Connection refused

ERROR: connection to host "pgser01" failed with error "Connection refused"

解决方案:

pcp进程未启动或正在启动中.

  • 请检查pgpool日志,如pcp进程未启动,请检查不能启动的原因.
  • 稍等片刻等待pcp进程启动后再执行命令.

6 find_primary_node_repeatedly: waiting for finding a primary node

2022-09-20 14:48:32.393: main pid 9958: LOG:  find_primary_node_repeatedly: waiting for finding a primary node
2022-09-20 14:48:32.471: main pid 9958: LOG:  find_primary_node: standby node is 1
2022-09-20 14:48:32.473: main pid 9958: LOG:  find_primary_node: standby node is 2

解决方案:

可能的原因为启动顺序不正确.查看pgpool.conf中logdir的配置,假设为/pfast,那么执行

rm /pfast/pgpool_status

7 failed to acquire the delegate IP address

2022-09-22 19:09:59.598: watchdog_utility pid 1712: LOG:  failed to acquire the delegate IP address
2022-09-22 19:09:59.599: watchdog_utility pid 1712: DETAIL:  'if_up_cmd' failed
2022-09-22 19:09:59.599: watchdog_utility pid 1712: WARNING:  watchdog escalation failed to acquire delegate IP

错误原因:添加虚拟ip后执行arping命令,arping在本机执行会发生错误

src\watchdog\wd_if.c

rtn = exec_if_cmd(path, pool_config->arping_cmd); 调用arping失败

int
wd_IP_up(void)
{
	int			rtn = WD_OK;
	char		path[WD_MAX_PATH_LEN];
	char	   *command;
	int			i;

	if (strlen(pool_config->delegate_IP) == 0)
	{
		ereport(LOG,
				(errmsg("trying to acquire the delegate IP address, but delegate IP is not configured")));
		return WD_OK;
	}

	command = wd_get_cmd(pool_config->if_up_cmd);
	if (command)
	{

		/* If if_up_cmd starts with "/", the setting specified in "if_cmd_path" will be ignored */
		if (command[0] == '/')
			snprintf(path, sizeof(path), "%s", command);
		else
			snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);

		rtn = exec_if_cmd(path, pool_config->if_up_cmd);
		pfree(command);
	}
	else
	{
		ereport(LOG,
				(errmsg("failed to acquire the delegate IP address"),
				 errdetail("unable to parse the if_up_cmd:\"%s\"", pool_config->if_up_cmd)));
		return WD_NG;
	}

    //添加虚拟ip已经成功
	if (rtn == WD_OK)
	{
		command = wd_get_cmd(pool_config->arping_cmd);
		if (command)
		{
			/* If arping_cmd starts with "/", the setting specified in "arping_path" will be ignored */
			if (command[0] == '/')
				snprintf(path, sizeof(path), "%s", command);
			else
				snprintf(path, sizeof(path), "%s/%s", pool_config->arping_path, command);

			rtn = exec_if_cmd(path, pool_config->arping_cmd); //在本机执行arping肯定失败,return的返回值为arping的返回值
			pfree(command);
		}
		else
		{
			rtn = WD_NG;
			ereport(LOG,
					(errmsg("failed to acquire the delegate IP address"),
					 errdetail("unable to parse the arping_cmd:\"%s\"", pool_config->arping_cmd)));
		}
	}

	if (rtn == WD_OK)
	{
		for (i = 0; i < WD_TRY_PING_AT_IPUP; i++)
		{
			if (wd_is_ip_exists(pool_config->delegate_IP) == true)
				break;
			ereport(LOG,
					(errmsg("waiting for the delegate IP address to become active"),
					 errdetail("waiting... count: %d", i + 1)));
		}

		if (i >= WD_TRY_PING_AT_IPUP)
			rtn = WD_NG;
	}

	if (rtn == WD_OK)
		ereport(LOG,
				(errmsg("successfully acquired the delegate IP:\"%s\"", pool_config->delegate_IP),
				 errdetail("'if_up_cmd' returned with success")));
	else
		ereport(LOG,
				(errmsg("failed to acquire the delegate IP address"),
				 errdetail("'if_up_cmd' failed")));
	return rtn;
}

解决方案:
忽略这个错误或修改pgpool.conf
将原来的

if_up_cmd =   '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev ens32 label ens32:0'
if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev ens32'

修改为

# $_IP_$修改为delegate_IP设置的ip
if_up_cmd =   '/usr/bin/sudo /sbin/ip addr add 192.168.1.65/24 dev ens32 label ens32:0'
if_down_cmd = '/usr/bin/sudo /sbin/ip addr del 192.168.1.65/24 dev ens32'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pgpool-II常见错误 的相关文章

随机推荐

  • AngularJS API

    AngularJS提供了如下的一下常用函数 API名称 描述 anguler lowercase 转换为小写字母 anguler uppercase 转换为大写字母 angular isString 是否为字符串 isNumber 是否为数
  • 常用的转义字符 C语言

    转义字符 转义字符是一种特殊的字符常量 以反斜线 开头 后跟字符 具有特定的含义 不同于字符原有的含义 故称 转义 字符 上表 转义字符 含义 n 回车换行 光标移到下一行的行首 r 回车 光标移到当前行的行首 把当前行前面全部删掉 t 制
  • 【pyqt5学习】——菜单栏(QMenu())、工具栏QToolBar学习

    目录 1 菜单栏 QMenu 一般在窗口顶部 1 创建菜单栏步骤 2 信号与方法 3 实操 2 工具栏 一般在菜单栏下方 1 创建步骤 2 方法与信号 信号 方法 3 实操示例 3 状态栏QStateBar 用于显示状态信息 一般在窗口底部
  • 微信开放平台接入问题

    1 errcode 40163 errmsg code been used rid xxxxx 原因 获取token时 使用的code码被二次使用 2 errcode 40249 errmsg this template msg has b
  • python中的unicode

    Python s Unicode string type stores characters from the Unicode character set In this set each distinct character has it
  • 怎么样不使用python做到图片爬虫呢?试试这个神奇软件吧

    1 首先在 主题 选项 选择你需要搜索的内容 2 填写需要下载的文件数量 这个需要留意 如果没有更改保存地址 那么会覆盖以前的文件 3 任意选择一个你想保存的地址 链接 https pan baidu com s 16yKPdUEC355j
  • Eureka迁移到Nacos之服务名称大小问题解决

    我们应用往Eureka中注册使用的名称以及应用内部通过Feign调用 使用的服务名称都是小写 如user service 但是注册到Eureka中后 应用的名称全部都是以大写的形式存储及展现 由于Eureka客户端对大小写的支持都是一样的
  • 前端工程化:模块化、包管理工具、打包工具(Webpack基本使用和优化)、前端性能监控

    目录 1 模块化 1 CommonJS AMD CMD 1 1 背景 1 2 CommonJS规范的核心变量 1 3 exports module exports 和require本质 1 4 exports和module exports的
  • 为什么有些Buck-Boost芯片没有输出负压?

    大家好 这里是大话硬件 今天分享一篇和Buck Boost拓扑相关的问题 也是在最开始接触Buck Boost芯片时 就在内心产生了疑问 在开始学习DC DC拓扑时 很多资料都说 非隔离型的DC DC拓扑常见的有3种 分别是Buck Boo
  • 破解sqlyog 30天试用限制

    安装sqlyog后 进入注册表编辑器 进入 HEYK CURRENT USER Software 找到以 括起来的那项 最新10 XX版本的是 8E919370 318F 4E5E 9EbE 9147B1DB66C9 不用去关注里面的值 右
  • ‘Web\xxx\node_modules\.bin\‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。internal/modules/cjs/loader.js:905throw err

    运行 npm run serve 报上面的错误 错误原因 文件夹名称中不能有
  • Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示

    一 当我们用Python matplot时作图时 一些数据需要以百分比显示 以更方便地对比模型的性能提升百分比 二 借助matplotlib ticker FuncFormatter 将坐标轴格式化 例子 encoding utf 8 im
  • C语言:整型在内存中的存储及表示形式(附习题)

    我们都知道 一个变量的创建是要在内存中开辟空间的 而空间的大小是根据不同的类型而决定的 那么数据在开辟空间中是如何存储的呢 首先我们先了解以下概念 一 整数的表示形式 原码 反码 补码 计算机中的整数有三种表示方法 即原码 反码和补码 三种
  • Unity 使用LineRenderer连接2个物体

    1 在Hierarchy面板中创建2个GameObject A和B 这就是希望连接的2个物体 2 同理创建1个EmptyObject C 挂上LineRenderer组件 记得给Materials赋值 3 创建1个新的C 脚本LineMan
  • jenkins解决不能打印springboot启动日志问题

    背景 已经可以在jenkins打包部署 但不能显示springboot启动日志 导致springboot启动报错时 并不知道具体原因 还需要登录linux系统去查看原因 主要步骤 1 开启远程服务器日志 2 利用sed命令 结束tail命令
  • String类

    下面是关于String类1相关的知识点 关于Java JDK 中内置的一个类 java lang String 1 String表示字符串类型 属于引用数据类型 不属于基本数据类型 2 在java 中随便使用双引号括起来的都是String对
  • 计算机领域中随处可见的抽象

    想要管理多种具体的东西 那么需要遵守每种东西的规范 如果想要提供一种通用模式来对这些具体的东西统一管理 需要使用一种古老的技术 抽象 抽象是将多种具体的东西 管理时需要遵守的规范 的共同点抽取出来 放入到更高一层的抽象层 在抽象层不定义或少
  • unix环境高级编程——文件IO

    本期主题 unix环境高级编程 文件IO 文件IO 0 引言 1 文件描述符 2 IO编程中常用的API接口 1 open函数 2 close函数 3 read函数 4 write函数 5 lseek函数 3 函数sync fsync和fd
  • 51单片机中断详解(上)

    一 中断的概念 中断发生 CPU在处理某一事件A时 发生了另一事件B请求CPU迅速去处理 中断响应和中断服务 CPU暂时中断当前的工作 转去处理事件B 中断返回 待CPU将事件B处理完毕后 再回到原来事件A被中断的地方继续处理事件A 这一过
  • pgpool-II常见错误

    持续更新中 1 pg hba中的项不匹配 假设您的pgpool集群中有2个节点 您更新了其中一个节点中的pg hba conf条目 但忘记在其他节点上应用相同的条目 您会看到如下错误 psql d postgres U postgres h