如何使用ansible增加打开进程和文件的限制

11

我正在设置一个MySQL服务器,并被告知要增加打开进程数量的ulimit

我运行了

- name: "increase limit for the number of open files"
  shell: "ulimit -n 64000"
- name: "increase limit for the number of open processes"
  shell: "ulimit -u 64000"

ansible-playbook上运行时,不仅会抛出“非法选项-u”错误,而且打开文件限制(-n)似乎没有被修改。(我在服务器上运行了ulimit -n,但它保持不变)

如何推荐增加这些限制,并且应该如何在Ansible中进行操作?

我看到了pam_limits模块。我应该使用此模块来修改nprocnofile吗?如果是,哪个域?

谢谢。

2个回答

27

我能否使用pam_limits Ansible模块将多个值的设置合并为一个单独的任务? - murtaza1983
1
抱歉,链接已损坏,但这个有效:https://docs.ansible.com/ansible/latest/collections/community/general/pam_limits_module.html - RicHincapie

21

实际上,您需要执行几项操作才能永久提高文件句柄数量。您所尝试的是一种临时措施,只存在于 shell 的生命周期中,它不会生效。

我发现您需要解决三个问题才能正确应用此方法。

前两个问题与 sysctl 和 PAM limits.d 配置相关:

- name: Set sysctl File Limits
  copy:
    src: 50-fs.conf
    dest: /etc/sysctl.d

- name: Set Shell File Limits
  copy:
    src: 91-nofiles.conf
    dest: /etc/security/limits.d

50-fs.conf文件如下:

fs.file-max=262144

91-nofiles.conf文件的内容如下:

 *     soft nofile 262144
 *     hard nofile 262144

这样就处理了系统范围的配置。如果您使用的是 systemd 发行版,则还需要进行相应的调整:

- name: Set MariaDB Filehandle Limits
  notify: Reload systemctl
  copy:
    src: limits.conf
    dest: /lib/systemd/system/mariadb.service.d

这需要重新加载systemctl,因此您可能需要为此添加一个handler

- name: Reload systemctl
  shell: systemctl daemon-reload

您要复制的文件看起来像这样:

[Service]
LimitNOFILE=infinity
LimitMEMLOCK=infinity

这是从默认服务配置文件的示例中获取的。

最后要做的事情是确保my.cnf或任何存储您的配置的文件中有这个指令:

open_files_limit=16384

你可能也想添加这个:

open_files_limit=16384
max_connections=16384

您可以使用您认为适当的任何值。


12
请注意,现在可以使用ansible中的pam_limits模块来设置系统限制。http://docs.ansible.com/ansible/pam_limits_module.html - Adil
如果这个答案能提到另一个答案中提到的Ansible 2.0支持这一点,那就太好了。 - idjaw
2
@idjaw 这里有四个限制级别:系统级别、PAM和进程启动器(例如systemd),以及my.cnf应用程序本身。我已经尝试在这里解决它们。Ansible解决方案只是谜题的一部分。 - tadman
1
@tadman 谢谢您抽出时间为我分解这个问题。这是否意味着 PAM Ansible 模块不会将更改变为永久性的? - idjaw
PAM设置是链条中的重要环节,但仅靠它们无法足以配置具有更高限制的MySQL。MySQL受该链条中最低设置的限制,一直到硬系统限制。 - tadman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接