From: Shweta Bhosale Date: Mon, 16 Feb 2026 17:27:47 +0000 (+0530) Subject: mgr/cephadm: Update haproxy.cfg template to support nfs active active deployment X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2a6d9f44abddcfd6d8ce1301635f38868bc70b70;p=ceph.git mgr/cephadm: Update haproxy.cfg template to support nfs active active deployment Fixes: https://tracker.ceph.com/issues/74970 Signed-off-by: Shweta Bhosale --- diff --git a/src/pybind/mgr/cephadm/templates/services/ingress/haproxy.cfg.j2 b/src/pybind/mgr/cephadm/templates/services/ingress/haproxy.cfg.j2 index d06a8ff74817..eb506436da32 100644 --- a/src/pybind/mgr/cephadm/templates/services/ingress/haproxy.cfg.j2 +++ b/src/pybind/mgr/cephadm/templates/services/ingress/haproxy.cfg.j2 @@ -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 %} diff --git a/src/pybind/mgr/cephadm/tests/services/test_ingress.py b/src/pybind/mgr/cephadm/tests/services/test_ingress.py index 4c2d7a960500..869bb160079f 100644 --- a/src/pybind/mgr/cephadm/tests/services/test_ingress.py +++ b/src/pybind/mgr/cephadm/tests/services/test_ingress.py @@ -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(