`

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.html
        mof_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.INFO

    if (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 OK
        return

    msg = (
        '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 crashed
        msg += 'salt-master will crash pretty soon! '
        level = logging.CRITICAL
    elif (accepted_count * 2) >= mof_s:
        # This is way too low, CRITICAL
        level = logging.CRITICAL
    elif (accepted_count * 3) >= mof_s:
        level = logging.WARNING
        # The accepted count is more than 3 time, WARN
    elif (accepted_count * 4) >= mof_s:
        level = logging.INFO

    if 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-2018.3.0.tar.gz

    在给定的压缩包文件“salt-2018.3.0.tar.gz”中,我们找到了盐栈的源码,这使得我们可以深入了解其内部工作原理,并根据需要自定义或扩展功能。 盐栈的核心组件包括: 1. **Master**: 盐主(Master)是盐栈系统中...

    salt-stack简明教程

    - `max_open_files`: 控制`salt-master`能够同时处理的最大连接数。每个TCP连接需要两个文件描述符,因此最大连接数为`max_open_files`除以2。如果需要增加连接数,需要修改`/etc/security/limits.conf`文件中的...

    docker-salt:在Docker中运行Salt-Master,Salt-Minion和Halite

    在Docker内部运行Salt-Master,Salt-Minion和Halite还可以在自己的容器内部运行Kibana / Logstash和Graphite。 #### Halite / Salt UI ####基巴纳 ####石墨 ###指示 通过更改master_ip以反映主IP地址来...

    salt-bootstrap

    盐靴(Salt-Bootstrap)是 SaltStack 的一个关键组件,主要用于在各种操作系统上快速、方便地安装 Salt Master 或 Salt Minion。它是一个自动化脚本,能够处理安装过程中的所有细节,包括下载、安装依赖和配置 Salt ...

    salt-2014.7.0.tar.gz

    6. **启动服务**:在主从节点上启动 Salt 服务,如`sudo service salt-master start`和`sudo service salt-minion start`。 7. **验证安装**:在Master上,你可以使用`salt '*' test.ping`命令来测试所有Minions...

    openEuler22.03LTS操作系统用pip安装saltstack3003.1所需的文件包

    安装完成后,可以通过`salt-master`和`salt-minion`命令来启动和管理SaltStack服务。在openEuler22.03LTS系统中,确保所有依赖都正确安装并配置,可以确保SaltStack3003.1高效、稳定地工作。记得在生产环境中配置...

    SaltStack 自动化运维技术文档-配置PXE服务器自动安装.docx

    接下来, SaltStack 的 Salt-Master 节点会根据新服务器的IP地址、MAC地址、主机名和所需服务信息,自动化执行以下步骤: 1. 在 Salt-Master 上,为新服务器绑定DHCP host主机地址。 2. 根据操作系统信息,配置PXE...

    SaltStack安装配置

    1. 使用yum安装salt-master:`yum -y install salt-master` 2. 编辑 `/etc/salt/master` 文件,设置interface为 `0.0.0.0`,监听所有IP,记录主控端运行日志到 `/var/log/salt/master`,记录认证证书日志到 `/var/...

    saltstack-salt-formula:Salt Stack公式,用于设置和配置中央系统以及配置管理器Salt Stack本身

    盐堆盐配方 SaltStack公式,用于设置和配置中央系统以及配置管理器SaltStack本身指示请参考以了解如何使用此公式,如何构建该公式以及如何添加更改。 注意:此公式可能使用formhelper模块,这是一个非常有用的Salt...

    saltstack部署和使用手册

    - 设置开机启动:`# systemctl enable salt-master.service` - 查看状态:`# systemctl status salt-master.service` ##### 3.2 Minion端部署 **安装SaltMinion** - 使用外网YUM安装: ``` # yum install epel-...

    salt-2019.2.0.tar.gz

    SaltStack is the company that created and maintains the Salt Open project and develops and sells SaltStack Enterprise software, services and support. Easy enough to get running in minutes, scalable ...

    saltstack-2013-linux

    模块是SaltStack的核心组件之一,它们定义了可以远程执行的函数。这些函数可以执行各种任务,如系统管理、网络操作或服务控制等。通过模块,管理员可以在多台机器上执行相同的命令,实现高效的批量操作。 #### 返回...

    saltconf-2014-using-saltstack-in-highavailability-environments

    - 例如,在搭建新的服务器时,可以利用SaltStack的State系统来自动完成软件包的安装、配置文件的设置等步骤,确保每台服务器的配置一致。 2. **自动化日常运维任务**: - SaltStack提供了强大的自动化功能,可以...

    SaltStack工作原理及安装配置实例详解.docx

    sudo apt-get install salt-master ``` 然后,需要在 Minion 端安装 SaltStack 软件。 ``` sudo apt-get install salt-minion ``` 接下来,需要配置 SaltStack,以便 Master 端可以连接到 Minion 端。 ``` sudo ...

    salt-master-3005.5-2.el8.x86-64

    Salt是一个基于Python的配置管理平台,旨在从单个主服务器控制许多从服务器(用Salt的术语叫Minions)。本指南将指导您配置Salt Master和Minion,并支持任何linux发行版。 安装于主节点

    Docker-Salt-Minion:Salt-Minion docker镜像,仅用于开发目的

    Docker Salt-Minion Salt Minion的Docker...docker run --rm -it --link salt-master:salt soon/salt-minion 环境变量 可以设置以下环境变量: LOG_LEVEL :要登录的级别,默认为error 例如: docker run --rm -

    Saltstack-应用指南1

    $ sudo chkconfig --level 3 salt-master on $ sudo /etc/init.d/salt-minion start $ sudo chkconfig --level 3 salt-minion on ``` 5. 在其他机器上安装 Minion 并连接到 Master: ``` $ sudo rpm -ivh ...

    Python库 | salt-sproxy-2019.6.0b2.tar.gz

    通常,这涉及到将`salt-sproxy`添加到盐的插件路径,然后在salt master配置文件中启用它。一旦设置完成,你就可以通过salt CLI或API来调用`salt-sproxy`并执行各种操作。 总结来说,`salt-sproxy`是Python的一个库...

    PyPI 官网下载 | salt-ssh-2016.3.7.tar.gz

    在"salt-ssh-2016.3.7.tar.gz"压缩包中,包含了盐SSH组件的源代码和其他相关文件。解压后,用户可以查看文档、配置文件、模块和脚本,了解其工作原理,甚至根据需要自定义或扩展功能。安装此版本的步骤通常包括使用...

Global site tag (gtag.js) - Google Analytics