Джино: хостинг и веб-сервисы

Система Orphus
Russian version
Добавить на Del.icio.us
English version
Добавить на Digg.com

 dkLab | Конструктор | dklab_vzmem: визуальное непротиворечивое распределение памяти для OpenVZ 

Карта сайта :: Форум «Лаборатории» :: Проект «Денвер»
Проект «Orphus» :: Куроводство: наблы :: Конструктор


2010-08-17
Обсудить на форуме

Принять участие в разработке библиотеки/утилиты можно на GitHub.

В какой-то момент мне надоело высчитывать с калькулятором значения VMGUARPAGES и PRIVVMPAGES для OpenVZ и следить, чтобы они были согласованы для разных виртуальных машин (например, память распределялась непротиворечивым образом, чтобы одна витруальная машина не могла повлиять на другую). И я написал небольшую, но очень удобную "псевдографическую" утилитку, - vzmem, - которой сейчас и хочу поделиться.

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

Vzmem - это утилита командной строки, которая позволяет распределять физическую память между несколькими виртуальными машинами OpenVZ так, чтобы одна машина "не залезала" на другую. Т.е. если нужно увеличить память для какой-то из машин, всегда видно, откуда эту память требуется "откусить": от одной из существующих машин или от пула свободных блоков.

Листинг 1: Установка vzmem на сервер
cd /usr/sbin
wget https://raw.github.com/DmitryKoterov/dklab_vzmem/master/vzmem
chmod +x vzmem

Распределение памяти задается в текстовом файле /etc/vz/conf/MEM-MAP, который выглядит примерно вот так:

Листинг 2: Файл /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 внесены, нужно выполнить следующую команду:

Листинг 3: Применение изменений в /etc/vz/conf/MEM-MAP
vzmem -a

Итого:

  • VMGUARPAGES = SHMPAGES = число_значков("=")
  • PRIVVMPAGES = OOMGUARPAGES = число_значков("=") + число_значков("+")

Vzmem следит, чтобы в сумме значков "=" было ровно 300 штук (в данном примере) и сообщает об ошибке, если это не так.

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

Чтобы изначально создать /etc/vz/conf/MEM-MAP на основе имеющейся у вас конфигурации OpenVZ, выполните команду:

Листинг 4: Начальное создание файла /etc/vz/conf/MEM-MAP
vzmem -i 300

Вместо 300 можно задать любое число, которое определит, на сколько "блоков" следует разделить физическую память. Ставьте это число таким, чтобы было удобнее перемещать значки "=" и "+" из одной строки в другую.

Чайник 

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







Дмитрий Котеров, Лаборатория dk. ©1999-2016
GZip
Добавить на Del.icio.us   Добавить на Digg.com   Добавить на reddit.com