Saltstack之salt-master的打开文件数问题

2023-10-14 15:38

本文主要是介绍Saltstack之salt-master的打开文件数问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      一、引言:

单个salt-master下的minion数已经达到2101个了,所以在master日志有如下的提示:

2016-09-09 11:36:22,221 [salt.utils.verify][CRITICAL][10919] The number of accepted minion keys(2101) should be lower than 1/4 of the max open files soft setting(4096). Please consider raising this value.

如果不能解决这个问题将无数加入新节点。从日志中可以看出max open files的值是4096,很奇怪!

通过ulimit -a看到open files是65535,从这里联想到是不是salt得问题?

二、解决问题:

在度娘和G哥上一顿搜索,该github上saltstack有一个issues:

salt-master not recognizing max files increase #5323

在/usr/lib/python2.7/site-packages/salt/utils/verify.py脚本check_max_open_files的函数,具体如下:

复制代码
def check_max_open_files(opts):'''Check the number of max allowed open files and adjust if needed'''mof_c = opts.get('max_open_files', 100000)if sys.platform.startswith('win'):# Check the Windows API for more detail on this# http://msdn.microsoft.com/en-us/library/xt874334(v=vs.71).aspx# and the python binding http://timgolden.me.uk/pywin32-docs/win32file.htmlmof_s = mof_h = win32file._getmaxstdio()else:mof_s, mof_h = resource.getrlimit(resource.RLIMIT_NOFILE)accepted_keys_dir = os.path.join(opts.get('pki_dir'), 'minions')accepted_count = len(os.listdir(accepted_keys_dir))log.debug('This salt-master instance has accepted {0} minion keys.'.format(accepted_count))level = logging.INFOif (accepted_count * 4) <= mof_s:# We check for the soft value of max open files here because that's the# value the user chose to raise to.#
        # The number of accepted keys multiplied by four(4) is lower than the# soft value, everything should be OKreturnmsg = ('The number of accepted minion keys({0}) should be lower than 1/4 ''of the max open files soft setting({1}). '.format(accepted_count, mof_s))with open("/tmp/openfile.txt","a") as f:f.write("mof_s-->%s\n"%mof_s)f.write("accepted_count-->%s\n"%accepted_count)if accepted_count >= mof_s:# This should never occur, it might have already crashedmsg += 'salt-master will crash pretty soon! 'level = logging.CRITICALelif (accepted_count * 2) >= mof_s:# This is way too low, CRITICALlevel = logging.CRITICALelif (accepted_count * 3) >= mof_s:level = logging.WARNING# The accepted count is more than 3 time, WARNelif (accepted_count * 4) >= mof_s:level = logging.INFOif mof_c < mof_h:msg += ('According to the system\'s hard limit, there\'s still a ''margin of {0} to raise the salt\'s max_open_files ''setting. ').format(mof_h - mof_c)msg += 'Please consider raising this value.'log.log(level=level, msg=msg)
复制代码

通过resource.getrlimit(resource.RLIMIT_NOFILE)得到软和硬的两种打开最大文件数,单独执行该方法:

>>> import resource
>>> resource.getrlimit(resource.RLIMIT_NOFILE)
(65535, 65535)

很奇怪,为什么单独执行是65535,而salt执行出来的是4096。

线上有多个salt-master,正好操作系统的版本是不一样的,经过检查发现只有centos7 以上的才会出现这种情况,那就是系统的问题了。

在centos5/6等版本中,资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。当然,/etc/security/limits.d/中可以配置,系统是先加载limits.conf然后按照英文字母顺序加载limits.d目录下的配置文件,后加载配置覆盖之前的配置。

不过在centos7/rhel7的系统中,使用Systemd替代了之前的SysV,因此/etc/security/limits.conf文件的配置作用域缩小了一些。limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。登录用户的限制,与上面讲的一样,通过/etc/security/limits.conf和limits.d来配置即可。

对于systemd services的资源限制,如何配置呢?

全局的配置,放在文件/etc/systemd/system.conf和/etc/systemd/user.conf。同时,也会加载两个对应的目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf和/etc/systemd/user.conf.d/*.conf。其中,system.conf是系统实例使用的,user.conf是用户实例使用的。一般的service使用system.conf中的配置即可。system.conf.d/*.conf中的配置会覆盖system.conf。

但是如果修改/etc/systemd/system.conf的话需要重启系统才会生效。

针对单个service,可以直接设置它自己的:

 然后运行如下命令,才能生效:

sudo systemctl daemon-reload
sudo systemctl restart salt-master.service

这篇关于Saltstack之salt-master的打开文件数问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211444

相关文章

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf