Pull to refresh

Vzmem: визуальное непротиворечивое распределение памяти для OpenVZ

Reading time 3 min
Views 2.1K
В какой-то момент мне надоело высчитывать с калькулятором значения VMGUARPAGES и PRIVVMPAGES для OpenVZ и следить, чтобы они были согласованы для разных виртуальных машин (например, чтобы физическая память распределялась между машинами непротиворечивым образом, и одна машина не могла «отъесть» физическую память у другой и увести ее в своп, например). И я написал небольшую, но очень удобную «псевдографическую» утилитку, — vzmem, — которой сейчас и хочу поделиться. Надеюсь, она кому-нибудь пригодится.

Как использовать dklab_vzmem


Vzmem — это утилита командной строки, которая позволяет «визуально» распределять физическую память между несколькими виртуальными машинами OpenVZ так, чтобы одна машина «не залезала» на другую. Т.е. если нужно увеличить память для какой-то из машин, всегда видно, откуда эту память требуется «откусить»: от одной из существующих машин или от пула свободных блоков.
Установка vzmem на сервер
cd /usr/sbin
wget https://raw.github.com/DmitryKoterov/dklab_vzmem/master/vzmem
chmod +x vzmem
Распределение памяти задается в текстовом файле /etc/vz/conf/MEM-MAP, который выглядит примерно вот так:
Файл /etc/vz/conf/MEM-MAP
300
10003 vps1.example.com      ========== 109552K
10004 vps2.example.com      ============================== 335503K
20004 vps3.example.com      ==========+++++++++++++++ 109552K + 221324K swap
FREE                        ====================== 513525K
  1. Каждый значок "=" символизирует кусочек физической памяти (в данном примере — 1/300 ее часть) и влияет на значение параметра OpenVZ VMGUARPAGES (и также задает величину SHMPAGES). Перемещая значки "=" между разными виртуальными машинами, можно перераспределять память (утилита следит, чтобы в сумме количество блоков оставалось равно 300).
  2. Значки "+" символизируют «дополнительную память из неиспользуемых сейчас блоков или SWAP». Их можно добавлять, сколько угодно (но желательно — не очень много, чтобы машина в критических ситуациях не ушла в SWAP слишком сильно). В сумме количество значков "=" и "+" указывает значение параметра PRIVVMPAGES (то же самое значение записывается и в OOMGUARPAGES).
  3. Ну а значения в килобайтах после значков "=" и "+" вычисляются автоматически — их не надо изменять руками.
«И зачем вся эта живопись?» — спросите вы. А вот зачем: если возникает необходимость увеличить у какой-то машины память, открываете любой привычный текстовый редактор, выделяете значки "=", которых не жалко, и методом «вырезать-вставить» перемещаете их в нужную машину. При этом в сумме символов остается 300. (В mcedit, к которому я привык, комбинация клавиш такая: F3 — начало выделения, F3 — окончание выделения, F6 — перенос выделенных символов на место курсора.)

Применение изменений в MEM-MAP


Когда изменения в MEM-MAP внесены, нужно выполнить следующую команду:
Применение изменений в /etc/vz/conf/MEM-MAP
vzmem -a
Итого:
  • VMGUARPAGES = SHMPAGES = число_значков("=")
  • PRIVVMPAGES = OOMGUARPAGES = число_значков("=") + число_значков("+")
Vzmem следит, чтобы в сумме значков "=" было ровно 300 штук (в данном примере) и сообщает об ошибке, если это не так.

Начальное создание файла MEM-MAP


Чтобы изначально создать /etc/vz/conf/MEM-MAP на основе имеющейся у вас конфигурации OpenVZ, выполните команду:
Начальное создание файла /etc/vz/conf/MEM-MAP
vzmem -i 300
Вместо 300 можно задать любое число, которое определит, на сколько «блоков» следует разделить физическую память. Ставьте это число таким, чтобы было удобнее перемещать значки "=" и "+" из одной строки в другую.

Если память на момент вызова vzmem -i уже распределена противоречивым образом, vzmem пытается распределить число значков "=" между машинами пропорциональным образом. На всякий случай проверьте результат после инициализации.

P.S.
Скрипт vzmem занимает 200 строчек на Perl (vzmem на GitHub). Если вдруг я изобрел велосипед, пишите в комментариях. Другие похожие по духу мелкие утилиты для OpenVZ: vzfirewall, vzset, vzenter.
Tags:
Hubs:
+23
Comments 3
Comments Comments 3

Articles