Запуск кластера YMatrix с привязкой к NUMA Node

В этом документе описано, как использовать привязку к NUMA Node при запуске кластера YMatrix. После того как mxtool init numa-wrapper создаст скрипт NUMA Wrapper и файл сопоставления NUMA, команда mxstart может использовать Wrapper для привязки процессов postmaster к NUMA Node, чтобы каждый экземпляр преимущественно использовал локальные CPU и память.

Применимая версия: YMatrix 6.8.2 и выше.

1 Предварительные условия

Перед выполнением убедитесь, что:

  • Версия кластера: YMatrix 6.8.2 или выше.
  • На всех узлах установлен numactl.
  • Кластер находится в нормальном рабочем состоянии.
  • Текущий пользователь имеет права на запись скрипта Wrapper и файла сопоставления NUMA на всех узлах.

2 Описание функции

Начиная с YMatrix 6.8.2, во время запуска mxstart можно использовать Wrapper для привязки процессов postmaster к NUMA Node.

Команда mxtool init numa-wrapper автоматически создает следующие файлы на основе текущей топологии кластера и может развернуть их на узлах:

  • Скрипт NUMA Wrapper, например /home/mxadmin/scripts/mxstart_numa_wrapper.sh.
  • Файл сопоставления NUMA, например /home/mxadmin/scripts/mxstart_numa_map.conf.

Политика памяти по умолчанию: preferred:

  • Память сначала выделяется из привязанного NUMA Node.
  • Если локальному NUMA Node не хватает памяти, разрешается выделение памяти из других NUMA Node.

Если необходимо строго ограничить выделение памяти указанным NUMA Node, используйте --memory-policy=membind.

Внимание! mxtool init numa-wrapper только создает и развертывает файлы Wrapper. Команда не изменяет текущий работающий кластер и не перезапускает экземпляры базы данных автоматически. Привязка к NUMA Node вступает в силу при следующем запуске кластера через mxstart.

3 Создание конфигурации NUMA Wrapper

3.1 Предварительный просмотр результата

Выполните команду ниже, чтобы только просмотреть создаваемый скрипт Wrapper и файл сопоставления NUMA. Удаленные файлы изменены не будут:

mxtool init numa-wrapper

Следующая строка в выводе означает режим Dry Run:

Mode: DRY RUN (no remote files will be changed)

Пример вывода:

[mxadmin@sdw ~]$ mxtool init numa-wrapper

Mode: DRY RUN (no remote files will be changed)

host=sdw action=would-write wrapper=/home/mxadmin/scripts/mxstart_numa_wrapper.sh map=/home/mxadmin/scripts/mxstart_numa_map.conf memory_policy=preferred
host=sdw-other action=would-write wrapper=/home/mxadmin/scripts/mxstart_numa_wrapper.sh map=/home/mxadmin/scripts/mxstart_numa_map.conf memory_policy=preferred

host=sdw hostname=sdw numa_nodes=0,1
/data/mxdata_20260622122230/master/mxseg-1 0
/data/mxdata_20260622122230/primary/mxseg0 1
/data/mxdata_20260622122230/primary/mxseg1 0
...

host=sdw-other hostname=sdw-other numa_nodes=0,1
/data/mxdata_20260622122230/primary/mxseg8 0
/data/mxdata_20260622122230/primary/mxseg9 1
...

Формат каждой строки сопоставления экземпляра:

<каталог данных> <NUMA Node ID>

Например:

/data/mxdata_20260622122230/primary/mxseg0 1

Это означает, что при запуске экземпляр будет привязан к NUMA Node 1.

3.2 Развертывание файлов Wrapper

После проверки вывода Dry Run выполните команду ниже, чтобы развернуть скрипт Wrapper и файл сопоставления NUMA на всех узлах:

mxtool init numa-wrapper --apply

Следующая строка в выводе означает режим Apply:

Mode: APPLY (remote files will be deployed)

Пример вывода:

[mxadmin@sdw ~]$ mxtool init numa-wrapper --apply

Mode: APPLY (remote files will be deployed)

host=sdw action=deployed wrapper=/home/mxadmin/scripts/mxstart_numa_wrapper.sh map=/home/mxadmin/scripts/mxstart_numa_map.conf memory_policy=preferred
host=sdw backups=/home/mxadmin/scripts/mxstart_numa_wrapper.sh.bak.20260628130639,/home/mxadmin/scripts/mxstart_numa_map.conf.bak.20260628130639

host=sdw-other action=deployed wrapper=/home/mxadmin/scripts/mxstart_numa_wrapper.sh map=/home/mxadmin/scripts/mxstart_numa_map.conf memory_policy=preferred
host=sdw-other backups=/home/mxadmin/scripts/mxstart_numa_wrapper.sh.bak.20260628130639,/home/mxadmin/scripts/mxstart_numa_map.conf.bak.20260628130639

Если целевой файл уже существует, команда автоматически создает резервную копию. Пути резервных копий выводятся после backups=.

3.3 Использование политики памяти membind

Чтобы строго ограничить выделение памяти привязанным NUMA Node, выполните:

mxtool init numa-wrapper     --memory-policy=membind     --apply

Внимание! Политика membind более строгая. Если на привязанном NUMA Node недостаточно памяти, экземпляр может не выделить память. Перед использованием в production убедитесь в емкости памяти каждого NUMA Node и распределении экземпляров.

4 Часто используемые параметры

mxtool init numa-wrapper поддерживает следующие параметры:

Параметр Обязательный Значение по умолчанию Описание
--apply Нет Отключено Развертывает скрипт Wrapper и файл сопоставления NUMA на удаленных хостах. Если параметр не указан, выполняется только предварительный просмотр без изменения удаленных файлов.
--scope Нет all Задает область экземпляров для генерации сопоставления. Поддерживаются all, master, standby, primary, mirror, а также комбинации через запятую, например primary,mirror.
--target-dir Нет /home/mxadmin/scripts Задает удаленный каталог генерации.
--script-name Нет mxstart_numa_wrapper.sh Задает имя файла скрипта Wrapper.
--map-name Нет mxstart_numa_map.conf Задает имя файла сопоставления NUMA.
--memory-policy Нет preferred Задает политику памяти NUMA. Поддерживаются preferred и membind.

5 Запуск кластера с Wrapper

Команда mxtool init numa-wrapper только создает или развертывает скрипт Wrapper и файл сопоставления NUMA. Она не изменяет работающие экземпляры и не перезапускает кластер автоматически.

После развертывания при следующем запуске кластера включите привязку к NUMA Node через параметры --wrapper и --wrapper-args команды mxstart:

mxstart -a     --wrapper=/home/mxadmin/scripts/mxstart_numa_wrapper.sh     --wrapper-args=/home/mxadmin/scripts/mxstart_numa_map.conf

После успешного запуска в журнале будут показаны параметры Wrapper, например:

[mxadmin@mxui ~]$ mxstart -a --wrapper=/home/mxadmin/numa_wrapper.sh --wrapper-args=/home/mxadmin/seg_numa_map.csv
2026-06-24:14:04:07.552 mxstart:mxadmin:mxui:2267293-[INFO]:-Starting MatrixDB cluster with: [no-prompt:true wrapper:/home/mxadmin/numa_wrapper.sh wrapper-args:/home/mxadmin/seg_numa_map.csv].
...
2026-06-24:14:04:14.381 mxstart:mxadmin:mxui:2267293-[INFO]:-MatrixDB cluster successfully started.

6 Проверка привязки к NUMA Node

После запуска кластера проверьте информацию /proc процесса postmaster.

6.1 Проверка привязки CPU

Получите PID процесса postmaster целевого экземпляра и выполните:

cat /proc/<postmaster_pid>/status | grep Cpus_allowed_list

Если привязка CPU действует, Cpus_allowed_list покажет диапазон CPU, разрешенный процессу.

6.2 Проверка политики памяти

Выполните:

cat /proc/<postmaster_pid>/numa_maps

При политике preferred можно увидеть строку вида:

prefer:0

При политике membind можно увидеть строку вида:

bind:0

Число означает NUMA Node ID, к которому привязан текущий экземпляр.

7 Частые вопросы

7.1 Что происходит, если целевой скрипт и файл конфигурации уже существуют?

При использовании --apply, если целевой скрипт Wrapper или файл сопоставления NUMA уже существует, команда сначала создает резервную копию старого файла, а затем развертывает новый.

Имя резервного файла содержит временную метку, например:

host=sdw backups=/home/mxadmin/scripts/mxstart_numa_wrapper.sh.bak.20260628130639,/home/mxadmin/scripts/mxstart_numa_map.conf.bak.20260628130639
Tip: mxstart -a --wrapper=/home/mxadmin/scripts/mxstart_numa_wrapper.sh --wrapper-args=/home/mxadmin/scripts/mxstart_numa_map.conf