Set redis file descriptor limit when run via pacemaker
authorMichele Baldessari <michele@acksyn.org>
Fri, 21 Oct 2016 08:02:39 +0000 (10:02 +0200)
committerMichele Baldessari <michele@acksyn.org>
Tue, 25 Oct 2016 13:46:10 +0000 (15:46 +0200)
The current redis file descriptor limit is 4096 because of two reasons:
- It is run via the redis user
- It is not started via systemd which has explicit LimitNOFILE set to
  10240 (which matches the default configuration of maximum 10000
  clients)

Create an /etc/security/limits.d/redis.conf file in order to increase
the fd limit value  With this change we correctly get the following
limits:
[root@overcloud-controller-0 ~]# pcs status |grep -A2 redis
 Master/Slave Set: redis-master [redis]
     Masters: [ overcloud-controller-2 ]
     Slaves: [ overcloud-controller-0 overcloud-controller-1 ]

[root@overcloud-controller-0 ~]# cat /proc/`pgrep redis`/limits | grep open
Max open files            10240                10240   files

Previously this limit was set to 4096.

Change-Id: I7691581bad92ad9442cecd82cf44f5ac78ed169f
Closes-Bug: #1635334

manifests/profile/pacemaker/database/redis.pp

index 261df30..37c36aa 100644 (file)
 #   for more details.
 #   Defaults to hiera('step')
 #
+# [*redis_file_limit*]
+#   (Optional) The file limit to put in /etc/security/limits.d/redis.conf
+#   for when redis is managed by pacemaker. Defaults to hiera('redis_file_limit')
+#   or 10240 (default in redis systemd limits)
+#
 class tripleo::profile::pacemaker::database::redis (
   $bootstrap_node       = hiera('bootstrap_nodeid'),
   $enable_load_balancer = hiera('enable_load_balancer', true),
   $step                 = hiera('step'),
+  $redis_file_limit     = hiera('redis_file_limit', 10240),
 ) {
   if $::hostname == downcase($bootstrap_node) {
     $pacemaker_master = true
@@ -44,6 +50,17 @@ class tripleo::profile::pacemaker::database::redis (
 
   if $step >= 1 {
     include ::redis
+    # Until puppet-redis grows support for /etc/security/limits.conf/redis.conf
+    # https://github.com/arioch/puppet-redis/issues/130
+    # we best explicitely set the file limit only in the pacemaker profile
+    # (the base profile does not need it as it is using systemd which has
+    # the limits set there)
+    file { '/etc/security/limits.d/redis.conf':
+      content => inline_template("redis soft nofile <%= @redis_file_limit %>\nredis hard nofile <%= @redis_file_limit %>\n"),
+      owner   => '0',
+      group   => '0',
+      mode    => '0644',
+    }
 
     if $pacemaker_master and hiera('stack_action') == 'UPDATE' {
       tripleo::pacemaker::resource_restart_flag { 'redis-master':