2016-07-01 3 views
4

Ich richte einen MySQL-Server, und ich wurde aufgefordert, die ulimit für die Anzahl der offenen Prozesse zu erhöhen.Wie Limit für offene Prozesse und Dateien mit ansible erhöhen

lief ich

- 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" 

auf den ansible-playbook, aber nicht nur sie Fehler „Illegal Option -u“ werfen, sondern auch offene Dateien Grenze (n) scheint nicht geändert werden. (Ich lief ulimit -n auf dem Server, aber es bleibt gleich)

Was ist die empfohlene Möglichkeit, diese Grenzen zu erhöhen, und wie sollte ich es in Ansible tun?

Ich sah pam_limits Modul. Sollte ich dieses Modul verwenden, um nproc und nofile zu ändern? Wenn ja, welche Domain?

Vielen Dank.

Antwort

13

Es gibt mehrere Dinge, die Sie tun müssen, um die Anzahl der Dateihandles permanent zu erhöhen. Was Sie hier versuchen, ist eine temporäre Maßnahme und existiert nur so lange wie die Shell es tut, wird es nicht tun.

Ich habe festgestellt, dass Sie drei Dinge beheben müssen, damit dies korrekt angewendet wird.

Die ersten beiden beziehen sich auf sysctl und die PAM limits.d Konfiguration:

- 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 

Die 50-fs.conf Datei sieht wie folgt aus:

fs.file-max=262144 

Die 91-nofiles.conf Datei sieht wie folgt aus:

*  soft nofile 262144 
*  hard nofile 262144 

Th at kümmert sich um die systemweite Konfiguration. Wenn Sie eine Verteilung mit systemd haben, müssen Sie das auch justieren:

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

Dies erfordert systemctl Nachladen, so können Sie eine handler dafür hinzufügen müssen:

- name: Reload systemctl 
    shell: systemctl daemon-reload 

Die Datei‘ Das Kopieren sieht folgendermaßen aus:

[Service] 
LimitNOFILE=infinity 
LimitMEMLOCK=infinity 

Das ist aus dem Beispiel in der Standard-Service-Konfigurationsdatei übernommen.

Das letzte, was zu tun ist, sicher my.cnf machen oder was auch immer speichert Ihre Konfiguration dieser Anweisung in sich hat:

open_files_limit=16384 

Sie diese vielleicht auch hinzufügen:

open_files_limit=16384 
max_connections=16384 

Sie verwenden können Welche Werte auch immer Sie für angemessen halten.

+4

Beachten Sie, dass Systemgrenzen jetzt mit dem Modul pam_limits in ansible gesetzt werden können. http://docs.ansible.com/ansible/pam_limits_module.html – Adil

+0

Wäre toll, wenn diese Antwort auf Ansible 2.0 verweist, die dies unterstützt, wie in einer anderen Antwort erwähnt. – idjaw

+1

@idjaw Es gibt vier Ebenen von Limits: System, PAM und der Prozess-Launcher (z.B. 'systemd'), plus die' my.cnf'-Anwendung selbst. Ich habe versucht, sie alle hier anzusprechen. Die Ansible-Lösung ist nur ein Teil des Puzzles. – tadman

Verwandte Themen