From f7e20c77e1a167fa017034e726a929a7b9cfc86f Mon Sep 17 00:00:00 2001 From: Marcos Dias Date: Mon, 2 Feb 2026 23:24:17 -0300 Subject: [PATCH 1/5] Added NUMA detection and configure mongodb to work correctly --- .../mongodb/tasks/configure-mongodb-numa.yml | 120 ++++++++++++++++++ roles/mongodb/tasks/install-mongodb.yml | 5 + 2 files changed, 125 insertions(+) create mode 100644 roles/mongodb/tasks/configure-mongodb-numa.yml diff --git a/roles/mongodb/tasks/configure-mongodb-numa.yml b/roles/mongodb/tasks/configure-mongodb-numa.yml new file mode 100644 index 00000000..a78ea015 --- /dev/null +++ b/roles/mongodb/tasks/configure-mongodb-numa.yml @@ -0,0 +1,120 @@ +# Copyright (c) 2025, Itential, Inc +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) +--- + +- name: Detect NUMA nodes + ansible.builtin.shell: + cmd: | + if [ -d /sys/devices/system/node ]; then + ls -d /sys/devices/system/node/node[0-9]* 2>/dev/null | wc -l + else + echo 0 + fi + args: + executable: /bin/bash + register: mongodb_numa_nodes + changed_when: false + become: true + +- name: Set NUMA enabled fact + ansible.builtin.set_fact: + mongodb_numa_enabled: "{{ (mongodb_numa_nodes.stdout | int) > 1 }}" + +- name: Ensure numactl is installed when NUMA is enabled + ansible.builtin.package: + name: numactl + state: present + when: mongodb_numa_enabled + become: true + +- name: Discover numactl path + ansible.builtin.shell: + cmd: "command -v numactl || true" + args: + executable: /bin/bash + register: mongodb_numactl_path_result + changed_when: false + when: mongodb_numa_enabled + become: true + +- name: Discover mongod path + ansible.builtin.shell: + cmd: "command -v mongod || true" + args: + executable: /bin/bash + register: mongodb_mongod_path_result + changed_when: false + when: mongodb_numa_enabled + become: true + +- name: Set NUMA helper facts + ansible.builtin.set_fact: + mongodb_numactl_path: "{{ mongodb_numactl_path_result.stdout | default('', true) }}" + mongodb_mongod_path: "{{ mongodb_mongod_path_result.stdout | default('/usr/bin/mongod', true) }}" + mongodb_numactl_present: "{{ (mongodb_numactl_path_result.stdout | default('', true) | length) > 0 }}" + when: mongodb_numa_enabled + +- name: Apply NUMA sysctl settings + ansible.posix.sysctl: + name: vm.zone_reclaim_mode + value: "{{ mongodb_vm_zone_reclaim_mode }}" + state: present + sysctl_file: "{{ mongodb_sysctl_file }}" + reload: true + when: mongodb_numa_enabled + become: true + +- name: Disable kernel NUMA balancing + ansible.posix.sysctl: + name: kernel.numa_balancing + value: "0" + state: present + sysctl_file: "{{ mongodb_sysctl_file }}" + reload: true + when: mongodb_numa_enabled + become: true + +- name: Ensure mongod systemd drop-in directory exists + ansible.builtin.file: + path: /etc/systemd/system/mongod.service.d + state: directory + mode: "0755" + when: + - mongodb_numa_enabled + - mongodb_numactl_present + become: true + +- name: Configure mongod to run with numactl interleave + ansible.builtin.copy: + dest: /etc/systemd/system/mongod.service.d/numa.conf + mode: "0644" + content: | + [Service] + ExecStart= + ExecStart={{ mongodb_numactl_path }} --interleave=all {{ mongodb_mongod_path }} --config {{ mongodb_conf_file }} + register: mongodb_numa_dropin + when: + - mongodb_numa_enabled + - mongodb_numactl_present + become: true + +- name: Reload systemd if NUMA drop-in changed + ansible.builtin.systemd: + daemon_reload: true + when: + - mongodb_numa_enabled + - mongodb_numactl_present + - mongodb_numa_dropin is defined + - mongodb_numa_dropin.changed + become: true + +- name: Restart mongod to apply NUMA settings + ansible.builtin.systemd: + name: mongod + state: restarted + when: + - mongodb_numa_enabled + - mongodb_numactl_present + - mongodb_numa_dropin is defined + - mongodb_numa_dropin.changed + become: true diff --git a/roles/mongodb/tasks/install-mongodb.yml b/roles/mongodb/tasks/install-mongodb.yml index d2d1784b..82ed07cb 100644 --- a/roles/mongodb/tasks/install-mongodb.yml +++ b/roles/mongodb/tasks/install-mongodb.yml @@ -68,6 +68,11 @@ file: configure-mongodb-logrotate.yml tags: configure_logrotate +- name: Configure NUMA for MongoDB + ansible.builtin.include_tasks: + file: configure-mongodb-numa.yml + tags: configure_numa + # Check if firewalld is running, if it is then open the appropriate ports - name: Gather service facts ansible.builtin.service_facts: From 3853805e8da8b3bb4f231d9cd0212bbb4eaaeab1 Mon Sep 17 00:00:00 2001 From: Marcos Dias Date: Tue, 3 Feb 2026 12:43:31 -0300 Subject: [PATCH 2/5] Remove redundant become directives in MongoDB config Removed unnecessary 'become: true' directives from various tasks in the configure-mongodb-numa.yml file. --- roles/mongodb/tasks/configure-mongodb-numa.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/roles/mongodb/tasks/configure-mongodb-numa.yml b/roles/mongodb/tasks/configure-mongodb-numa.yml index a78ea015..0b3ebe2e 100644 --- a/roles/mongodb/tasks/configure-mongodb-numa.yml +++ b/roles/mongodb/tasks/configure-mongodb-numa.yml @@ -14,7 +14,6 @@ executable: /bin/bash register: mongodb_numa_nodes changed_when: false - become: true - name: Set NUMA enabled fact ansible.builtin.set_fact: @@ -25,7 +24,6 @@ name: numactl state: present when: mongodb_numa_enabled - become: true - name: Discover numactl path ansible.builtin.shell: @@ -45,7 +43,6 @@ register: mongodb_mongod_path_result changed_when: false when: mongodb_numa_enabled - become: true - name: Set NUMA helper facts ansible.builtin.set_fact: @@ -62,7 +59,6 @@ sysctl_file: "{{ mongodb_sysctl_file }}" reload: true when: mongodb_numa_enabled - become: true - name: Disable kernel NUMA balancing ansible.posix.sysctl: @@ -72,7 +68,6 @@ sysctl_file: "{{ mongodb_sysctl_file }}" reload: true when: mongodb_numa_enabled - become: true - name: Ensure mongod systemd drop-in directory exists ansible.builtin.file: @@ -82,7 +77,6 @@ when: - mongodb_numa_enabled - mongodb_numactl_present - become: true - name: Configure mongod to run with numactl interleave ansible.builtin.copy: @@ -96,7 +90,6 @@ when: - mongodb_numa_enabled - mongodb_numactl_present - become: true - name: Reload systemd if NUMA drop-in changed ansible.builtin.systemd: @@ -106,7 +99,6 @@ - mongodb_numactl_present - mongodb_numa_dropin is defined - mongodb_numa_dropin.changed - become: true - name: Restart mongod to apply NUMA settings ansible.builtin.systemd: @@ -117,4 +109,4 @@ - mongodb_numactl_present - mongodb_numa_dropin is defined - mongodb_numa_dropin.changed - become: true + From 2d8537abaf46cac1c82f3c78705296e3c8b79fb1 Mon Sep 17 00:00:00 2001 From: Marcos Dias Date: Tue, 3 Feb 2026 14:09:20 -0300 Subject: [PATCH 3/5] Refactor systemd reload and restart tasks for mongod to streamline NUMA configuration --- roles/mongodb/tasks/configure-mongodb-numa.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/roles/mongodb/tasks/configure-mongodb-numa.yml b/roles/mongodb/tasks/configure-mongodb-numa.yml index 0b3ebe2e..320619e6 100644 --- a/roles/mongodb/tasks/configure-mongodb-numa.yml +++ b/roles/mongodb/tasks/configure-mongodb-numa.yml @@ -91,22 +91,14 @@ - mongodb_numa_enabled - mongodb_numactl_present -- name: Reload systemd if NUMA drop-in changed - ansible.builtin.systemd: - daemon_reload: true - when: - - mongodb_numa_enabled - - mongodb_numactl_present - - mongodb_numa_dropin is defined - - mongodb_numa_dropin.changed - -- name: Restart mongod to apply NUMA settings +- name: Reload systemd and restart mongod to apply NUMA settings ansible.builtin.systemd: name: mongod state: restarted + daemon_reload: true when: - mongodb_numa_enabled - mongodb_numactl_present - mongodb_numa_dropin is defined - mongodb_numa_dropin.changed - + From b76fcb0e12c98d4fa2bc9487065db43c4a6aef2a Mon Sep 17 00:00:00 2001 From: Marcos Dias Date: Fri, 6 Feb 2026 10:32:22 -0300 Subject: [PATCH 4/5] Refactor NUMA configuration tasks for MongoDB to improve structure and clarity --- .../mongodb/tasks/configure-mongodb-numa.yml | 139 ++++++++---------- 1 file changed, 65 insertions(+), 74 deletions(-) diff --git a/roles/mongodb/tasks/configure-mongodb-numa.yml b/roles/mongodb/tasks/configure-mongodb-numa.yml index 320619e6..5a31ec66 100644 --- a/roles/mongodb/tasks/configure-mongodb-numa.yml +++ b/roles/mongodb/tasks/configure-mongodb-numa.yml @@ -19,86 +19,77 @@ ansible.builtin.set_fact: mongodb_numa_enabled: "{{ (mongodb_numa_nodes.stdout | int) > 1 }}" -- name: Ensure numactl is installed when NUMA is enabled - ansible.builtin.package: - name: numactl - state: present +- name: Enable NUMA settings if multiple NUMA nodes detected when: mongodb_numa_enabled + block: + - name: Ensure numactl is installed when NUMA is enabled + ansible.builtin.package: + name: numactl + state: present -- name: Discover numactl path - ansible.builtin.shell: - cmd: "command -v numactl || true" - args: - executable: /bin/bash - register: mongodb_numactl_path_result - changed_when: false - when: mongodb_numa_enabled - become: true + - name: Discover numactl path + ansible.builtin.shell: + cmd: "command -v numactl || true" + args: + executable: /bin/bash + register: mongodb_numactl_path_result + changed_when: false + become: true -- name: Discover mongod path - ansible.builtin.shell: - cmd: "command -v mongod || true" - args: - executable: /bin/bash - register: mongodb_mongod_path_result - changed_when: false - when: mongodb_numa_enabled + - name: Discover mongod path + ansible.builtin.shell: + cmd: "command -v mongod || true" + args: + executable: /bin/bash + register: mongodb_mongod_path_result + changed_when: false -- name: Set NUMA helper facts - ansible.builtin.set_fact: - mongodb_numactl_path: "{{ mongodb_numactl_path_result.stdout | default('', true) }}" - mongodb_mongod_path: "{{ mongodb_mongod_path_result.stdout | default('/usr/bin/mongod', true) }}" - mongodb_numactl_present: "{{ (mongodb_numactl_path_result.stdout | default('', true) | length) > 0 }}" - when: mongodb_numa_enabled + - name: Set NUMA helper facts + ansible.builtin.set_fact: + mongodb_numactl_path: "{{ mongodb_numactl_path_result.stdout | default('', true) }}" + mongodb_mongod_path: "{{ mongodb_mongod_path_result.stdout | default('/usr/bin/mongod', true) }}" + mongodb_numactl_present: "{{ (mongodb_numactl_path_result.stdout | default('', true) | length) > 0 }}" -- name: Apply NUMA sysctl settings - ansible.posix.sysctl: - name: vm.zone_reclaim_mode - value: "{{ mongodb_vm_zone_reclaim_mode }}" - state: present - sysctl_file: "{{ mongodb_sysctl_file }}" - reload: true - when: mongodb_numa_enabled - -- name: Disable kernel NUMA balancing - ansible.posix.sysctl: - name: kernel.numa_balancing - value: "0" - state: present - sysctl_file: "{{ mongodb_sysctl_file }}" - reload: true - when: mongodb_numa_enabled + - name: Apply NUMA sysctl settings + ansible.posix.sysctl: + name: vm.zone_reclaim_mode + value: "{{ mongodb_vm_zone_reclaim_mode }}" + state: present + sysctl_file: "{{ mongodb_sysctl_file }}" + reload: true -- name: Ensure mongod systemd drop-in directory exists - ansible.builtin.file: - path: /etc/systemd/system/mongod.service.d - state: directory - mode: "0755" - when: - - mongodb_numa_enabled - - mongodb_numactl_present + - name: Disable kernel NUMA balancing + ansible.posix.sysctl: + name: kernel.numa_balancing + value: "0" + state: present + sysctl_file: "{{ mongodb_sysctl_file }}" + reload: true -- name: Configure mongod to run with numactl interleave - ansible.builtin.copy: - dest: /etc/systemd/system/mongod.service.d/numa.conf - mode: "0644" - content: | - [Service] - ExecStart= - ExecStart={{ mongodb_numactl_path }} --interleave=all {{ mongodb_mongod_path }} --config {{ mongodb_conf_file }} - register: mongodb_numa_dropin - when: - - mongodb_numa_enabled - - mongodb_numactl_present + - name: Ensure mongod systemd drop-in directory exists + ansible.builtin.file: + path: /etc/systemd/system/mongod.service.d + state: directory + mode: "0755" + when: mongodb_numactl_present -- name: Reload systemd and restart mongod to apply NUMA settings - ansible.builtin.systemd: - name: mongod - state: restarted - daemon_reload: true - when: - - mongodb_numa_enabled - - mongodb_numactl_present - - mongodb_numa_dropin is defined - - mongodb_numa_dropin.changed + - name: Configure mongod to run with numactl interleave + ansible.builtin.copy: + dest: /etc/systemd/system/mongod.service.d/numa.conf + mode: "0644" + content: | + [Service] + ExecStart= + ExecStart={{ mongodb_numactl_path }} --interleave=all {{ mongodb_mongod_path }} --config {{ mongodb_conf_file }} + register: mongodb_numa_dropin + when: mongodb_numactl_present + - name: Reload systemd and restart mongod to apply NUMA settings + ansible.builtin.systemd: + name: mongod + state: restarted + daemon_reload: true + when: + - mongodb_numactl_present + - mongodb_numa_dropin is defined + - mongodb_numa_dropin.changed From 6d13f7b6f888260b8b0691f203029a8a2a60b3ba Mon Sep 17 00:00:00 2001 From: Marcos Dias Date: Fri, 6 Feb 2026 14:50:23 -0300 Subject: [PATCH 5/5] Add pipefail option to NUMA node detection command for improved error handling --- roles/mongodb/tasks/configure-mongodb-numa.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/mongodb/tasks/configure-mongodb-numa.yml b/roles/mongodb/tasks/configure-mongodb-numa.yml index 5a31ec66..d4fd8ca7 100644 --- a/roles/mongodb/tasks/configure-mongodb-numa.yml +++ b/roles/mongodb/tasks/configure-mongodb-numa.yml @@ -5,6 +5,7 @@ - name: Detect NUMA nodes ansible.builtin.shell: cmd: | + set -o pipefail if [ -d /sys/devices/system/node ]; then ls -d /sys/devices/system/node/node[0-9]* 2>/dev/null | wc -l else