【greenplum】ERROR: Interconnect error writing an outgoing packet: Operation not permitted

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/you_xian/article/details/78549504

作者:lianghc

Greenplum查询失败,并在pg_log中返回以下错误

- SQL - ERROR: Interconnect error writing an outgoing packet: Operation not permitted
- SQL -   Detail: 
- SQL - error during sendto() call (error:1).
- SQL - For Remote Connection: contentId=1

看着像socket 通信错误。检查了机器网络和负载后发现网络没问题,负载很高。后面查找了一些资料,总结如下

原因

到目前为止,有两种类型的已知问题可以触发这类问题:

1.   在段或主节点上启用iptables,并且ip_conntrack模块中的缓冲区已满。

2.服务器上的连接太多。


原因1 ,基本排查,安装gp时都会开启互信并关闭防火墙。不过也说不定某位不知情的运维同事突然开启了某节点的防火墙,检查如下:

iptables使用连接跟踪表来跟踪ip_conntrack模块中的连接ip_conntrack模块使用系统内存的一部分,如果跟踪的连接数量不断增长,则内存缓冲区可能已满。

要确认这是问题,你可以验证iptables是否正在运行:

service iptables status
以下消息也可以在 / var / log / messages中找到:


kernel: printk: 5 messages suppressed.
kernel: ip_conntrack: table full, dropping packet.
kernel: printk: 13 messages suppressed
kernel: ip_conntrack: table full, dropping packet.
会话数量(可由内核内存中的netfilter同时处理的连接跟踪条目)超过 net.ipv4.netfilter.ip_conntrack_max中 配置的限制 要确认这是问题,请检查 / var / log / message是否 包含以下日志消息:
 nf_conntrack: table full, dropping packet.
 nf_conntrack: table full, dropping packet. 
 nf_conntrack: table full, dropping packet.

解决办法:

1.如果问题是由ip_conntrack模块中的内存缓冲区变满引起的,则需要在所有群集节点上禁用iptables禁用iptables是Greenplum群集的先决条件。为此,请在iptable所在的节点上运行以下命令  

服务iptables停止 
chkconfig关闭iptables

2.如果问题是由大量连接引起的,则可以尝试增加net.ipv4.netfilter.ip_conntrack_max的值

sysctl -w net.ip4.netfilter.ip_conntrack_max = 655360 // RHEL 5
sysctl -w net.netfilter.nf_conntrack_max = 655360 // RHEL 6+

要使更改永久化,请在/etc/sysctl.conf中添加以下内容

net.ip4.netfilter.ip_conntrack_max = 655360 // RHEL 5
net.netfilter.nf_conntrack_max = 655360 // RHEL 6+

作为一般的最佳实践,您不应该在服务器上允许太多的连接。跟踪连接消耗在内核(见400个字节的/ proc / slabinfo),这意味着跟踪655360个连接将消耗的RAM 262MB。


备注:ip_conntrack_max 在不同版本的系统上设置不太一样,需要注意一下。将每个节点的ip_conntrack_max 设置成一样的就好了。理论上 这个值没有上限,根据自己机器的内存情况,酌情即可。



猜你喜欢

转载自blog.csdn.net/you_xian/article/details/78549504