首批通过分布式安全可靠测评,为关键业务系统打造
升级 liboblog 版本后与 observer 无法建连
更新时间:2024-02-14 09:01
适用版本
OceanBase 数据库 V3.2.4 (oceanbase-3.2.4.0-100000072022102819) 及以后版本。
问题原因
OceanBase 数据库 V3.2.4 以及之后支持 RPC 安全认证的版本,鉴于后台认证线程的实现,是通过创建 pipe 并修改 pipe 的 size 来当作队列使用的。对于数据迁移服务,会创建很多 liboblog 相关进程,因此每创建一次都会创建 pipe 并修改 pipe 的 size,多个进程创建 pipe 并修改大小会达到系统对于 pipe 的上限,系统调用会返回 EPERM,RPC 安全认证线程会初始化失败且不工作,会导致连接异常。
OS 对于 pipe 相关的限制有以下三个系统参数控制。
fs.pipe-max-size
可以设置的单个管道的最大大小(以字节为单位),默认值为 1048576 (1 MB)。
fs.pipe-user-pages-hard
由单个非特权用户(即既没有 CAP_SYS_RESOURCE 也没有 CAP_SYS_ADMIN 功能的用户)创建或设置的所有管道的总大小(以页为单位)的硬性限制。只要为此用户分配给管道缓冲区的页面总数达到此限制,就将拒绝创建新管道的尝试,并且拒绝增加管道容量的尝试。默认值为 0,不应用硬限制。
fs.pipe-user-pages-soft
由单个非特权用户(即既没有 CAP_SYS_RESOURCE 也没有 CAP_SYS_ADMIN 功能的用户)创建或设置的所有管道的总大小(以页为单位)的软限制。只要为此用户分配给管道缓冲区的页面总数达到此限制,用户创建的各个管道将被限制为一页,并且增加管道容量的尝试将被拒绝。默认值为 16384,允许创建多达 1024 个具有默认容量的管道。此值为 0 时,不应用软限制。
问题影响
导致 OBServer 无法建连接。
解决方法
修改 pipe-user-pages-soft 为 0,取消软限制。
编辑
sysctl.conf配置文件。sudo vim /etc/sysctl.conf增加一行参数:
fs.pipe-user-pages-soft = 0使
sysctl.conf配置生效。sudo sysctl -p /etc/sysctl.conf重启对应服务进程。