20610: Fixes balancer nginx's request queue config depending on # of backends
authorLucas Di Pentima <lucas.dipentima@curii.com>
Thu, 3 Aug 2023 19:58:18 +0000 (16:58 -0300)
committerLucas Di Pentima <lucas.dipentima@curii.com>
Thu, 3 Aug 2023 19:58:18 +0000 (16:58 -0300)
Also, fixes templating issue on arvados' config.yml file related to this
setting.

Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima@curii.com>

tools/salt-install/config_examples/multi_host/aws/pillars/arvados.sls
tools/salt-install/config_examples/multi_host/aws/pillars/nginx_balancer_configuration.sls
tools/salt-install/local.params.example.multiple_hosts
tools/salt-install/provision.sh

index 3b7089d3043ea416e7890f952cefecbcd195206c..fadf4098678e4e3b862d9c62014dc91954007be9 100644 (file)
@@ -3,6 +3,8 @@
 #
 # SPDX-License-Identifier: AGPL-3.0
 
+{%- set max_reqs = "__CONTROLLER_MAX_CONCURRENT_REQUESTS__" %}
+
 # The variables commented out are the default values that the formula uses.
 # The uncommented values are REQUIRED values. If you don't set them, running
 # this formula will fail.
@@ -108,10 +110,9 @@ arvados:
             Password: __INITIAL_USER_PASSWORD__
 
     ### API
-    {%- set max_reqs = "__CONTROLLER_MAX_CONCURRENT_REQUESTS__" %}
-    {%- if max_reqs != "" and max_reqs is number %}
+    {%- if max_reqs != "" %}
     API:
-      MaxConcurrentRequests: {{ max_reqs }}
+      MaxConcurrentRequests: {{ max_reqs|int }}
     {%- endif %}
 
     ### CONTAINERS
index 73ae9ca3096aca6d597c0d135f56ed3e564e0594..f7e104f25ca4ffcb653606455ef0fc57c96d9648 100644 (file)
@@ -6,13 +6,27 @@
 {%- import_yaml "ssl_key_encrypted.sls" as ssl_key_encrypted_pillar %}
 {%- set domain = "__DOMAIN__" %}
 {%- set balancer_backends = "__CONTROLLER_NODES__".split(",") %}
+{%- set controller_nr = balancer_backends|length %}
 {%- set disabled_controller = "__DISABLED_CONTROLLER__" %}
+{%- if disabled_controller != "" %}
+  {%- set controller_nr = controller_nr - 1 %}
+{%- endif %}
+{%- set max_reqs = "__CONTROLLER_MAX_CONCURRENT_REQUESTS__" %}
 
 ### NGINX
 nginx:
   ### SERVER
   server:
     config:
+      {%- if max_reqs != "" %}
+      worker_rlimit_nofile: {{ (max_reqs|int * 3 * controller_nr)|round|int }}
+      events:
+        worker_connections: {{ (max_reqs|int * 3 * controller_nr)|round|int }}
+      {%- else %}
+      worker_rlimit_nofile: 4096
+      events:
+        worker_connections: 1024
+      {%- endif %}
       ### STREAMS
       http:
         'geo $external_client':
index 1d69267971e55a8415855a7acda5b1e3752f314c..fced799622cd0aea8fa7b4fa2b959db68a13cfe0 100644 (file)
@@ -141,7 +141,7 @@ DISABLED_CONTROLLER=""
 
 # Performance tuning parameters
 #CONTROLLER_NGINX_WORKERS=
-#CONTROLLER_MAX_CONCURRENT_REQUESTS=
+CONTROLLER_MAX_CONCURRENT_REQUESTS=64
 
 # The directory to check for the config files (pillars, states) you want to use.
 # There are a few examples under 'config_examples'.
index 9f622f8c7268321bb0f1520c9e5a592c7bc7765c..eefd0572aa067690631cd8b6c303f025fc44594c 100755 (executable)
@@ -202,7 +202,7 @@ apply_var_substitutions() {
        s#__SSL_KEY_AWS_REGION__#${SSL_KEY_AWS_REGION}#g;
        s#__SSL_KEY_AWS_SECRET_NAME__#${SSL_KEY_AWS_SECRET_NAME}#g;
        s#__CONTROLLER_NGINX_WORKERS__#${CONTROLLER_NGINX_WORKERS:-}#g;
-       s#__CONTROLLER_MAX_CONCURRENT_REQUESTS__#${CONTROLLER_MAX_CONCURRENT_REQUESTS:-}#g;
+       s#__CONTROLLER_MAX_CONCURRENT_REQUESTS__#${CONTROLLER_MAX_CONCURRENT_REQUESTS:-64}#g;
        s#__MONITORING_USERNAME__#${MONITORING_USERNAME}#g;
        s#__MONITORING_EMAIL__#${MONITORING_EMAIL}#g;
        s#__MONITORING_PASSWORD__#${MONITORING_PASSWORD}#g;