KingbaseES V8R3集群运维案例---进程内核参数配置集群启动故障

案例说明:
KingbaseES V8R3集群在部署时需要配置与进程间通讯(IPC)相关的内核参数,如果缺失配置或配置错误,kingbasecluster服务在启动过程中将因为内核参数配置错误导致启动失败。
适用版本:
KingbaseES V8R3

一、官方部署建议配置

  • 共享内存
    共享存储区(Share Memory)是Linux系统中通信速度最高的通信机制,因为数据不需要在客户机和服务器端之间复制,数据直接写到内存,不用若干次数据拷贝,所以这是最快的一种IPC。
    系统内核相关配置:
kernel.shmmax :定义了共享内存段的最大尺寸(以字节为单位)
kernel.shmall :表示系统一次可以使用的共享内存总量(以页为单位))
kernel.shmmni:设置系统范围内共享内存段的最大数量,默认4096
  • 信号量
    信号量是一个计数器,可以用来控制多个线程对共享资源的访问。它不是用于交换大批数据,而用于多线程之间的同步。它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源。因此,主要作为进程间以及同一个进程内不同线程之间的同步手段。
    系统内核相关配置:
SEMMNI:系统中信号量的总数最大值
SEMMSL:每个信号量中信号量元素的最大值
SEMMNS:系统中所有信号量中的信号量元素的最大值
SEMOPM: 定义了每个semop系统调用能够操作的最大信号量数

建议配置:

二、shm相关案例

1、集群启动故障:“failed system call shmget(xxx,xxx,xxx)”错误。

shmget()函数,该函数用来创建共享内存。如上图所示,shmget函数无法获取到共享的内存空间,进程启动失败,经检查配置shmmax和shmmni参数后,重新启动集群问题解决。

2、集群启动故障:“could not create shared memory segment: No space left on device”错误。

检查发现重新配置kernel.sem参数后,重启系统后问题解决。

3、集群启动故障“could not create shared memory for request size”错误

检查配置kernel.shmmax = 128000000,重启服务器后,kingbasecluster进程启动成功。(物理内存16G)

4、集群启动故障: “shared memory creation failed with error "Invalid argument"错误。

如下图所示,调整shmmax参数后,kingbasecluster进程启动成功。

5、数据库启动故障: “could not open shared memory segment“错误

问题分析:

# 查看数据库进程
[kingbase@node202 bin]$ ps -ef |grep "kingbase -D"
kingbase  4537     1  0 10:03 ?        00:00:00 /home/kingbase/cluster/R6C8/HAC8/kingbase/bin/kingbase -D /home/kingbase/cluster/R6C8/HAC8/kingbase/data

# 查看数据库进程访问文件
[kingbase@node202 bin]$ lsof -p 4537|grep shm
kingbase 4537 kingbase  mem    REG               0,17      8464     34985 /dev/shm/kingbase.499787157

# 查看共享内存对应的临时文件
[kingbase@node202 bin]$ ls -lh /dev/shm
total 96K
-rw------- 1 kingbase kingbase 8.3K Oct 31 10:03 kingbase.499787157

# 查看共享内存目录属性
[kingbase@node202 bin]$ ls -lhd /dev/shm
drwxrwxrwt 2 root root 160 Oct 31 10:03 /dev/shm

问题解决:
从故障现象看,是没有权限访问/dev/shm下的共享内存段对应的文件及/dev/shm目录权限,检查权限,赋予合适的权限。

三、问题总结
对于共享内存配置所导致的故障,可以通过ipcs命令获取共享内存和信号量的应用情况,分析问题产生的原因。

正常内核资源限制和使用:

[root@node101 ~]# ipcs -l

------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 256
max semaphores per array = 5010
max semaphores system wide = 641280
max ops per semop call = 5010
semaphore max value = 32767

查看当前系统共享内存和信号量使用:

posted @ 2023-10-30 17:28  天涯客1224  阅读(12)  评论(0编辑  收藏  举报