]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: Update haproxy.cfg template to support nfs active active deployment
authorShweta Bhosale <Shweta.Bhosale1@ibm.com>
Mon, 16 Feb 2026 17:27:47 +0000 (22:57 +0530)
committerShweta Bhosale <Shweta.Bhosale1@ibm.com>
Mon, 27 Apr 2026 12:25:14 +0000 (17:55 +0530)
Fixes: https://tracker.ceph.com/issues/74970
Signed-off-by: Shweta Bhosale <Shweta.Bhosale1@ibm.com>
src/pybind/mgr/cephadm/templates/services/ingress/haproxy.cfg.j2
src/pybind/mgr/cephadm/tests/services/test_ingress.py

index d06a8ff74817486549ddf41e0610c6bde38610d1..eb506436da3276afdacdad851c423f453786d513 100644 (file)
@@ -37,6 +37,7 @@ defaults
     timeout check           5s
 {% endif %}
 {% if mode == 'tcp' %}
+    option tcplog
     timeout queue           1m
     timeout connect         10s
     timeout client          1m
@@ -95,8 +96,13 @@ backend backend
     mode        tcp
     balance     roundrobin
     {% if backend_spec.service_type == 'nfs' %}
-    stick-table type ip size 200k expire 30m peers haproxy_peers
-    stick on src
+    stick-table type ip size 1m expire 2h store server_id peers haproxy_peers
+    stick match src
+    stick store-request src
+    option tcp-check
+    retries 3
+    retry-on all-retryable-errors
+    timeout connect 2s
     {% endif %}
     hash-type   consistent
 {% if spec.use_tcp_mode_over_rgw %}
@@ -105,7 +111,7 @@ backend backend
 {% endif %}
 {% endif %}
 {% if default_server_opts %}
-    default-server {{ default_server_opts|join(" ") }}
+    default-server {{ default_server_opts|join(" ") }} fall 2 inter 5000 rise 1 on-marked-down shutdown-sessions
 {% endif %}
 {% endif %}
 {% if backend_spec.service_type == 'rgw' %}
@@ -114,6 +120,6 @@ backend backend
     {% endfor %}
 {% else %}
     {% for server in servers %}
-    server {{ server.name }} {{ server.ip }}:{{ server.port }} check inter {{ health_check_interval }}
+    server {{ server.name }} {{ server.ip }}:{{ server.port }} id {{ server.name.split('.')[-1] | int + 1 }} check inter {{ health_check_interval }} rise 2 fall 3
     {% endfor %}
 {% endif %}
index 4c2d7a9605009030589215c66304c75ae95f612f..869bb160079f6f5ec4a59a813f009bdbd784ec8d 100644 (file)
@@ -100,6 +100,7 @@ class TestIngressService:
             'defaults\n'
             '    mode                    tcp\n'
             '    log                     global\n'
+            '    option tcplog\n'
             '    timeout queue           1m\n'
             '    timeout connect         10s\n'
             '    timeout client          1m\n'
@@ -125,13 +126,18 @@ class TestIngressService:
             'backend backend\n'
             '    mode        tcp\n'
             '    balance     roundrobin\n'
-            '    stick-table type ip size 200k expire 30m peers haproxy_peers\n'
-            '    stick on src\n'
+            '    stick-table type ip size 1m expire 2h store server_id peers haproxy_peers\n'
+            '    stick match src\n'
+            '    stick store-request src\n'
+            '    option tcp-check\n'
+            '    retries 3\n'
+            '    retry-on all-retryable-errors\n'
+            '    timeout connect 2s\n'
             '    hash-type   consistent\n'
         )
         if enable_haproxy_protocol:
-            haproxy_txt += '    default-server send-proxy-v2\n'
-        haproxy_txt += '    server nfs.foo.0 192.168.122.111:12049 check inter 30s\n'
+            haproxy_txt += '    default-server send-proxy-v2 fall 2 inter 5000 rise 1 on-marked-down shutdown-sessions\n'
+        haproxy_txt += '    server nfs.foo.0 192.168.122.111:12049 id 1 check inter 30s rise 2 fall 3\n'
         haproxy_expected_conf = {
             'files': {'haproxy.cfg': haproxy_txt}
         }
@@ -245,6 +251,7 @@ class TestIngressService:
             'defaults\n'
             '    mode                    tcp\n'
             '    log                     global\n'
+            '    option tcplog\n'
             '    timeout queue           1m\n'
             '    timeout connect         10s\n'
             '    timeout client          1m\n'
@@ -270,10 +277,15 @@ class TestIngressService:
             'backend backend\n'
             '    mode        tcp\n'
             '    balance     roundrobin\n'
-            '    stick-table type ip size 200k expire 30m peers haproxy_peers\n'
-            '    stick on src\n'
+            '    stick-table type ip size 1m store server_id peers haproxy_peers\n'
+            '    stick match src\n'
+            '    stick store-request src\n'
+            '    option tcp-check\n'
+            '    retries 3\n'
+            '    retry-on all-retryable-errors\n'
+            '    timeout connect 2s\n'
             '    hash-type   consistent\n'
-            '    server nfs.foo.0 192.168.122.111:12049 check inter 30s\n'
+            '    server nfs.foo.0 192.168.122.111:12049 id 1 check inter 30s rise 2 fall 3\n'
         )
         haproxy_expected_conf = {
             'files': {'haproxy.cfg': haproxy_txt}
@@ -604,6 +616,7 @@ class TestIngressService:
                                 '\ndefaults\n    '
                                 'mode                    tcp\n    '
                                 'log                     global\n    '
+                                'option tcplog\n    '
                                 'timeout queue           1m\n    '
                                 'timeout connect         10s\n    '
                                 'timeout client          1m\n    '
@@ -1128,6 +1141,7 @@ class TestIngressService:
             'defaults\n'
             '    mode                    tcp\n'
             '    log                     global\n'
+            '    option tcplog\n'
             '    timeout queue           1m\n'
             '    timeout connect         10s\n'
             '    timeout client          1m\n'
@@ -1154,11 +1168,16 @@ class TestIngressService:
             'backend backend\n'
             '    mode        tcp\n'
             '    balance     roundrobin\n'
-            '    stick-table type ip size 200k expire 30m peers haproxy_peers\n'
-            '    stick on src\n'
+            '    stick-table type ip size 1m expire 2h store server_id peers haproxy_peers\n'
+            '    stick match src\n'
+            '    stick store-request src\n'
+            '    option tcp-check\n'
+            '    retries 3\n'
+            '    retry-on all-retryable-errors\n'
+            '    timeout connect 2s\n'
             '    hash-type   consistent\n'
-            '    default-server send-proxy-v2\n'
-            '    server nfs.foo.0 192.168.122.111:12049 check inter 30s\n'
+            '    default-server send-proxy-v2 fall 2 inter 5000 rise 1 on-marked-down shutdown-sessions\n'
+            '    server nfs.foo.0 192.168.122.111:12049 id 1 check inter 30s rise 2 fall 3\n'
         )
         haproxy_expected_conf = {
             'files': {'haproxy.cfg': haproxy_txt}
@@ -1412,7 +1431,7 @@ class TestIngressService:
             ),
         )
         gen_config_lines = haproxy_generated_conf['files']['haproxy.cfg']
-        assert 'server nfs.foo.0 10.10.2.20:12049 check inter 30s' in gen_config_lines
+        assert 'server nfs.foo.0 10.10.2.20:12049 id 1 check inter 30s rise 2 fall 3' in gen_config_lines
 
         nfs_generated_conf, _ = nfs_svc.generate_config(
             CephadmDaemonDeploySpec(