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
查看当前系统共享内存和信号量使用: