Установка vdsmanager-smp на многопроцессорную машину, с большим количеством оперативной памяти.
И так имеем платформу intel 2500LX на борту 2 четырехядерных Intel Xeon E5420 2500MHz, 8 гигабайт оперативной памяти, Adaptec RAID 5805 c 1,5 терабайтным массивом RAID 5E. RAID5E подобен уровню RAID5, только со встроенным в массив резервным диском. Задача настроить на базе этой платформы систему для хостинга виртуальных машин на ОС FreeBSD с помощью продукта VDSmanager от ISPsystem.
Выдержки с сайта ISPsystem:
Ниже приведён краткий список основных изменений, коснувшихся стандартного ядра FreeBSD:
- поддержка ограничений CPU для виртуальной среды.
- поддержка ограничений оперативной памяти для виртуальной среды, с системой остановки больших процессов при превышении лимита.
- персональные параметры работы со свопом (swap): лимиты, использование, статистика.
- файловая система, основанная на шаблонах.
- поддержка дисковых квот внутри виртуальной среды.
- поддержка ограничений на количество процессов.
- поддержка ограничений на количество открытых дескрипторов (файлов, сокетов и т.д.).
- возможность привязки множества IP-адресов к одной виртуальной среде.
- sysctl параметры: скрыты ненужные, добавлены необходимые.
- возможность изменения абсолютно всех лимитов «на лету».
- поддержка персонального ipfw (firewall) для каждой виртуальной среды.
- поддержка полноценного персонального sysV.
Особенности использования оперативной памяти
В системе виртуализации VDSmanager реализован уникальный способ распределения оперативной памяти, позволяющий достичь её существенной экономии. В частности это касается, так называемых read-only сегментов оперативной памяти, используемых различным серверным ПО.
Немного теории. Каждый запущенный процесс имеет read-only сегменты: исполняемый код, область констант. Одна и та же программа, запущенная множество раз, например mysqld (сервер баз данных MySQL), использует всего один экземпляр read-only сегмента в физической памяти для всех mysqld-процессов. Система виртуализации VDSmanager идёт дальше, и позволяет использовать один и тот же экземпляр read-only сегмента для всех mysqld-процессов, запущенных в разных виртуальных средах. Это позволяет существенно экономить оперативную память сервера.
Рассмотрим конкретный пример. Размер read-only сегментов для mysqld примерно равен 3 Мб. Предположим, что на сервере запущенно 100 виртуальных серверов, использующих MySQL-сервер (1 mysqld процесс на каждый). Без описанной выше технологии требуется 3 * 100 = 300 Мб оперативной памяти, а система виртуализации VDSmanager позволяет для всех 100 VDS использовать всего 3 Мб. Экономия составляет 297 Мб. По аналогии это применимо ко всем стандартным программам, установленным в дисковом шаблоне (см. ниже).
Файловая система, основанная на шаблонах
Файловая система виртуальных сред VDSmanager реализована на основе модифицированной «unionfs». Это позволяет реализовать для виртуальных серверов файловую систему, основанную на шаблонах.
Файловая система виртуальной среды создается на основе предварительно подготовленного дискового шаблона, содержащего все необходимые файлы прикладного программного обеспечения. При этом при создании виртуального сервера не выполняется копирование файлов шаблона в файловую систему VDS, а делается объединение файлов шаблона и собственной файловой системы виртуальной среды.
Преимущества данной схемы для владельца виртуального сервера:
Администратор виртуального сервера сразу же получает огромный набор предустановленного программного обеспечения, при этом «видит» объединенную файловую систему как единое целое.
Файлы шаблона не занимают дискового пространства, выделенного для виртуальной среды.
Администратор виртуального сервера обладает полными правами на изменение файловой системы виртуальной среды. При модификации файла, находящегося в общем шаблоне, файл копируется в «собственные файлы» виртуальной среды. Все данные операции осуществляются средствами файловой системы и абсолютно прозрачны для администратора виртуального сервера.
Преимущества для хостинг-провайдера:
Практически мгновенное создание виртуального сервера.
Существенная экономия дискового пространства, так как копия шаблона для каждой виртуальной среды не делается.
Простота обновления предустановленного ПО. Стоит сделать изменение в шаблоне, и все изменения сразу же появятся на всех виртуальных серверах, использующих этот шаблон.
На данный момент VDSmanger является ведущей системой для виртуализации FreeBSD систем, успешно используемыми многими хостинг провайдерами.
И так возьмем релиз FreeBSD(последний из поддерживаемых VDSmanger на данный момент 6,3 Release), что интересно установка проходит и на FreeBSD 6.4, но в итоге получаем ядро 6.3-STABLE FreeBSD 6.3-STABLE #0: Wed Nov 19 04:33:10 CET 2008 root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM, поэтому я решил остановиться на релизе 6.3 – очень кстате в этом релизе появилась поддержка Adaptec RAID 5805
Начинаем стандартную установку FreeBSD, создаем отедльные разделы: swap, корень, /usr, /var, /tmp и /vs – здесь будт хранится наши виртуальные машины. Выбираем установку только базовой системы без дополнительных пакетов.
После успешной установки системы, начинаем установку VDSmanager – предварительно регистрируем лицензию для реального статического IP-адреса на сервере. IP-адрес, для которого была получена лицензия на панель управления VDSmanager, должен быть первым в списке IP-адресов, которые возвращает команда ifconfig. Если адрес не является первым на сетевом интерфейсе, то возможно запустить скрипт install.sh с ключем –ip IP-адрес.
Как указано в документации, регистрирумся в системе под пользователем root, скачиваем и запускаем установочный скрипт.
vds# fetch «http://download.ispsystem.com/install.sh»
vds# sh install.sh
Скрипт скачает необходимые файлы для установки и запустит инсталятор, после чего установит свое ядро и потребует перезагрузки. После перезагрузки и входа в систему, сразу запустится инсталятор, который продолжит установку. После устновки инсталятор попросит ввести пароль для доступа к панели управления VDSmanager. После установки перезагружаем систему.
После перезагрузки заходим в панель управления VDSmanager: https://IP-адрес/manager/vdsmgr
Заходим в раздел – Шаблоны диска
FreeBSD /vs/pub/FreeBSD Установка -
ISPmanager /vs/pub/ISPmanager Установка -
Soft2006 /vs/pub/Soft2006 Установка -
Ждем пока загрузяться шаблоны дисков и статус сменится на ок.
Заходим в раздел ip-адреса и добавляем пул ip-адресов для виртуалльных машин.
Следующим шагом – пробуем создать тестовую vds.
И натыкаемся на первый косяк, по крайней мере в моем релизе vdsmanger: Ошибка: Внутренняя ошибка Can’t mount vds disk
Заходим в систему по ssh и смотрим конфиг vdsmanager:
vds# cat /usr/local/ispmgr/etc/vdsmgr.conf
User admin ohSh4Ceex9eidei5Ooku.
path DefaultHomeDir /home
path httpd.conf /usr/local/etc/apache22/httpd.conf
path apachectl /usr/local/sbin/apachectl start
ApacheVersion 2
ApacheUid 80
ApacheGid 80
preset «VDS Start» {
Owner admin
Disk 1000
Mem 256
CPU 700
Proc 100
Fdesc 1000
Traf 1000
Templ FreeBSD
}
disktemplate «FreeBSD» {
Path /vs/pub/FreeBSD
Status ok
}
disktemplate «ISPmanager» {
Path /vs/pub/ISPmanager
Status ok
}
disktemplate «Soft2006″ {
Path /vs/pub/Soft2006
Status ok
}
Чего-то не хватает…
Как сказано в документации:
MountDir – полный путь к директории, в которую монтируются диски виртуальных выделенных серверов при запуске.
PrivateDiskDir – полный путь к директории, в которой хранятся собственные файлы виртуальных выделенных серверов. Если вы хотите использовать несколько таких директорий, например, для монтирования различных разделов жёстких дисков, укажите их через пробел. Панель управления будет следить за равномерным распределением дисков виртуальных выделенных серверов между этими разделами.
Смотрим рядом в конфигурационной директории:
vds# cat /usr/local/ispmgr/etc/vdsmgr.conf.dist
PrivateDiskDir /vs/disk
MountDir /vs/mnt
preset «Example package» {
Disk 4096
Mem 512
CPU 1200
Proc 1024
Fdesc 4096
Traf 92160
IpRate 5000
Templ ISPmanager
}
Видим две недостающие строчки в нашем конфиге:
PrivateDiskDir /vs/disk
MountDir /vs/mnt
Добавляем их в наш конфиг: /usr/local/ispmgr/etc/vdsmgr.conf
Перезапускаем vdsmanager:
vds# killall vdsmgr
Создаем vds все должно пройти успешно.
Заходим на хост систему:
#dmesg
Copyright (c) 1992-2008 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 6.3-STABLE #0: Wed Nov 19 04:27:54 CET 2008
root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_SMP
acpi_alloc_wakeup_handler: can’t alloc wake memory
ACPI APIC Table: <INTEL S5000PAL>
Timecounter «i8254″ frequency 1193182 Hz quality 0
CPU: Intel(R) Xeon(R) CPU E5420 @ 2.50GHz (2506.23-MHz 686-class CPU)
Origin = «GenuineIntel» Id = 0×1067a Stepping = 10
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Features2=0×40ce3bd<SSE3,RSVD2,MON,DS_CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,DCA,<b19>,<b26>>
AMD Features=0×20100000<NX,LM>
AMD Features2=0×1<LAHF>
Cores per package: 4
real memory = 2680160256 (2556 MB)
avail memory = 2616705024 (2495 MB)
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
cpu0 (BSP): APIC ID: 0
cpu1 (AP): APIC ID: 1
cpu2 (AP): APIC ID: 2
cpu3 (AP): APIC ID: 3
cpu4 (AP): APIC ID: 4
cpu5 (AP): APIC ID: 5
cpu6 (AP): APIC ID: 6
cpu7 (AP): APIC ID: 7
uname -a
FreeBSD host.net 6.3-STABLE FreeBSD 6.3-STABLE #0: Wed Nov 19 04:27:54 CET 2008 root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_SMP i386
Видим, что ядро успешно нашло все 8 ядер с SMP все в порядке.
Но количество обнаруженной оперативной памяти: real memory = 2680160256 (2556 MB)
Память обнаруженая дефолтным SMP ядром составляет 2,5 гб
Причина в том, что VDSmanager потдерживает только 32 битные версии ОС FreeBSD, а 32 битная операционная система не способна увидеть больше 4 гигабайт(на самом деле еще меньше максимум 3,5 гб), это ограничение накладывает 32 битная адресация памяти.
Но существует такая вещь как:
Physical Address Extension (PAE) — режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются 64-битные элементы таблиц страниц (из которых для адресации используются только 36 бит), c помощью которых процессор может адресовать 64 GB физической памяти (вместо 4 GB, адресуемых при использовании 32-разрядных таблиц), хотя каждая задача (программа) всё равно может адресовать 4 GB виртуальной памяти. Также, в новых моделях процессоров в PAE-режиме старший бит элемента таблицы страниц отвечает за запрет исполнения кода в странице, что затрудняет атаку по методу переполнения буфера.
Впервые расширение появилось в процессоре Pentium Pro. Для использования 36-разрядной адресации памяти необходима поддержка расширения физических адресов на аппаратном уровне системной платы и программное включение режима PAE в ОС.
Включение загрузка ядра FreeBSD с поддержкой PAE:
В поставке VDSmanager идет еще одно ядро со включенно поддержкой PAE и называется оно /boot/kernel.vds.pae
vds# cat /boot/loader.conf
kernel=»kernel.vds.smp»
autoboot_delay=»10″
kern.maxfiles=»40960″
vm.pmap.shpgperproc=»600″
kern.ipc.maxpipekva=»33554432″
kern.maxusers=»512″
Правим loader.conf следующим образом:
vds# cat /boot/loader.conf
kernel=»kernel.vds.pae»
autoboot_delay=»10″
kern.maxfiles=»40960″
vm.pmap.shpgperproc=»600″
kern.ipc.maxpipekva=»33554432″
kern.maxusers=»512″
Перезагружаем систему.
Смотрим dmesg:
real memory = 10200547328 (9728 MB)
avail memory = 8379723776 (7991 MB)
ACPI APIC Table: <INTEL S5000PAL>
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
cpu0 (BSP): APIC ID: 0
cpu1 (AP): APIC ID: 1
cpu2 (AP): APIC ID: 2
cpu3 (AP): APIC ID: 3
cpu4 (AP): APIC ID: 4
cpu5 (AP): APIC ID: 5
cpu6 (AP): APIC ID: 6
cpu7 (AP): APIC ID: 7
В результате система определила всю оперативную память и 8 ядер. )