可能SSDB的重点在PHP/CPP/Java/Go,python的库不是很好用。
原生的库不支持python 3,第三方库又很久没有更新过,很多功能不支持,最终选择使用自己patch了一下的ssdb.py(https://github.com/oldcai/ssdb.py)。
ssdb的社区不太活跃,Server端和文档也有一些待提升的地方,特别是打开文件数,比较扑朔迷离,解决了问题也不知道怎么Pull Request到官方。
官方文档:
『禁止使用 CentOS 7』,『你无法搞定 CentOS 7』
实际使用中发现,可能是作者被相关问题问的太多,有些反应过度。
同类数据库大概率也会遇到类似问题,结果果然发现,在riak的文档中就有CentOS 7如何调整软硬连接数的说明:
第一步,修改系统打开文件限制
# 修改/etc/security/limits.conf
# 加入
* soft nofile 1020000
* hard nofile 1020000
将*替换成运行ssdb的用户名更佳。
系统全局文件大小也有相应办法调整
# 修改/etc/sysctl.conf
# 加入
fs.file-max = 1020000
第二步,增加进程打开文件限制
调整硬限制后,如果Max open files还是没有增加,可以通过在启动脚本中加入一行ulimit -n 1020000来实现。
修改配置后,记得重启进程,如果还是不行就重启一下系统。
然而怎么证明已经将进程的文件打开限制调整到了1020000呢,命令如下:
grep 'open files' /proc/$(cat /var/run/ssdb.pid)/limits
Max open files 1020000 1020000 files
第三步,配置leveldb模块的max_open_files【可忽略】
作者说,该参数几乎不可能导致问题,所以第三步一般来说可以忽略,但是既然官方文档并没有相关描述,就在此写一下。
它是限制leveldb模块的打开文件数的。
SSDB的leveldb的max_open_files
我们检测一下ssdb的日志
grep max_open_files /var/log/ssdb/log.txt
[INFO ] ssdb-server.cpp(57): max_open_files : 500
发现日志中的最大文件打开数max_open_files还是500,离我们预期的还远。
好吧,没办法,只有读一下源码,发现是可配置的,在配置文件中,相应位置配置如下:
leveldb:
max_open_files: 1020000
再次重启进程,问题得到解决。