CodeFest 2013. Чистяков А. — Использование систем...
description
Transcript of CodeFest 2013. Чистяков А. — Использование систем...
Давайте знакомиться и дружить
Я: Человек с горы Опыт работы в должности не менее трех
лет Навыки администрирования серверных
систем
Давайте знакомиться и дружить
Вы: В зале есть пользователь MacBook? Что он тут делает? Системные администраторы DevOps'ы Ответственные за инфраструктуру (CTO,
архитекторы, etc, etc)
WARNING! DO NOT TRY @HOME! Информации будет довольно много!
Прежде чем внедрять у себя — проверьте! Сомневаетесь — не стесняйтесь спросить!
Содержание предыдущих серий Первая серия: http://goo.gl/7bYAL Началась с того, что виртуализация имеет
множество применений Закончилась тем, что OpenVZ представлялась
неплохим решением для виртуализации А ZFS — неплохим
решением для организации хранилища
Но был ряд проблем
Как скрестить ужа с ежом? Напоминаю — ZFS не может быть принята
в ядро Linux Две реализации — ZFS-FUSE и ZFS on
Linux ZFS-FUSE — filesystem in userspace Кроме того, ZFS-FUSE заброшен ZFS on Linux — единственный живой
кандидат Но был ряд проблем
Хроники внедрения ZoL 0.6.0-rc7, Debian 6, OpenVZ
Постоянно заканчивалась память Причина в том, что ARC не очень хорошо
интегрирован с ядром Раз в три-семь дней — падения
Хроники внедрения
ZoL 0.6.0-rc9, CentOS 6, OpenVZ Ограничить размер ARC
В /etc/modprobe.d/zfs.conf добавить
options zfs zfs_arc_max=2147483648
Uptime 210 дней Но есть ряд проблем
Проблемы OpenVZ Проблема с OpenJDK и FUTEX_WAIT: http://goo.gl/N5dFw http://goo.gl/bwQ7a http://goo.gl/lS55q Проявляется в том, что JVM очень долго
стартует и при работе расходует CPU Решена в RHEL ядрах В ядрах Debian Stable не решена Кстати, о ядрах, 3.2 уже здесь! (на
серверах), а где OpenVZ?
Пути решения Взяли Oracle JDK — стартует быстро, но
расход процессора все равно велик Сборка ядер от RHEL в deb-пакеты Разработчики OpenVZ не рекомендуют
ядра Debian, только RHEL/CentOS Скрипт для сборки deb-пакета:
http://goo.gl/X0Blo (спасибо, Роман!) Сейчас все мои Debian-хосты используют
ядра от RHEL
Проблемы с OpenVZ на ZFS Очень долго работал apt-get на guest'ах Особенно это заметно при деплое на 10
машин на одном хосте В ZoL 0.6.0-rc14 уже не наблюдается Медленная работа с каталогами, в которых
много файлов А что, если диск виртуализировать в виде
большого файла, а не части FS хоста? Для OpenVZ это делается через ploop, но мы
не пробовали Вместо этого OpenVZ поместили в KVM
виртуалку (почему, объясню позже)
Какие есть варианты? Linux, OpenVZ, ZoL ZFS BTRFS — с версии ядра 3.7+, не раньше HAMMER — а виртуализировать чем? Linux FreeBSD Solaris NetBSD — порт ZFS пока не готов MacOS X — человек с MB еще здесь? OpenVZ VirtualBox — Solaris, Linux, FreeBSD KVM — Linux, Solaris FreeBSD jails Solaris zones
Solaris Долгая и запутанная история Современная ситуация: Oracle Solaris 11 — не Open Source SmartOS — регулярно обновляется OmniOS — регулярно обновляется OpenIndiana — редко обновляется,
предназначена для десктопов Illumian — не обновляется, нет KVM Несколько других, менее известных сборок:
http://goo.gl/yihG4
SmartOS Делается компанией Joyent Составляет основу Joyent Cloud Illumos kernel + open source drivers + ported
KVM + Node.JS Управление виртуальными машинами с
помощью скрипта на JS Собственная библиотека образов
виртуальных машин как для KVM, так и для Zones
Естественно, образы ориентированы на нужды Joyent Cloud
Развертывание SmartOS Работает с USB flash (Hetzner их продает за €40) При установке автоматически создает
mirrored pool Так как USB flash монтируется r/o, управление
конфигами не очень удобно — их нужно копировать после рестарта
Firewall — ipfilter/ipnat KVM виртуалки используют ZVOL Общий образ клонируется Каждая виртуалка — на своем разделе
Использование SmartOS Первые десять дней все работало Потом хост внезапно перегрузился В Solaris есть crash dump раздел Хост перезагружался в среднем раз-два в
неделю, crash dump раздел первый месяц был пуст
Удалось получить дамп Получить поддержку у авторов SmartOS не
удалось никакими путями Даже через общих знакомых Люди заняты, их можно понять
Наивная диагностика По нашим наблюдениям, ребуты происходили
в моменты возрастания дисковой активности Возможно, причина в драйверах контроллера
диска? Странно, использовали обычный ICH9 Последующие эксперименты с такой же
дисковой подсистемой, но в OmniOS, не выявили проблем
От SmartOS пришлось отказаться Но ряд идей прижился
FreeBSD Начинали с 9.0-RELEASE и VirtualBox 4.1.6 Железо: Core i7-3930K (HT, SpeedStep) Для установки FreeBSD использовался
скрипт zfs-hetzner-9.0.sh (google it!), впоследствии модифицированный мной для 9.1
Проблемы начались сразу — виртуальные машины работали с разной скоростью в разные моменты времени (инсталляция Debian занимала от 20 минут до 2 часов)
FreeBSD Перешли на 9.0-STABLE и VirtualBox 4.2 У FreeBSD отличная (!) поддержка Несколько раундов переписки в списке
рассылки про виртуализацию, и проблему удалось решить
Суть проблемы: планировщик ОС сбивался
Решение: отключить HT, отключить SpeedStep, после чего планировщик стал работать как надо
VirtualBox под FreeBSD Иногда guest завершается с segfault Иногда guest попадает в T-state, после чего
его не убить (проявлялось только на одном из хостов)
Иногда guest перестает подавать признаки жизни, при подключении к консоли — черный экран
py-supervisor для слежения за guest'ами и самодельный скрипт-watchdog для проверки доступности по ping
sysctl debug.debugger_on_panic=0
Управление образами guest'ов Файл или raw device? Raw device в ZFS — ZVOL В два раза медленнее, чем файл Запись на ZVOL всегда синхронна! (Если не сделано zfs set sync=disabled) Но мы об этом узнали уже после того, как
выбрали файлы в качестве хранилища Знание — сила!
Управление образами guest'ов Каждый образ на своем ZFS разделе
Легче бэкапить, легче управлять zfs snapshot pool/vol@`date +%F-%H` - и так
каждый час
На трех тысячах снэпшотов хост с ZoL начал тормозить
(Сравните это с LVM) Разные разделы могут иметь разные
параметры — сжатие, sync, настройки кэша
Управление образами guest'ов zfs snapshot pool/vm1@master-copy zfs clone pool/vm1@master-copy pool/vm2 zfs clone pool/vm1@master-copy pool/vm3 Теперь у нас не один, а три одинаковых
образа VM А места на диске они занимают как один,
пишутся только изменения Мы так клонировали 100-гигабайтную
PostgreSQL базу для стейджингов
Кстати, о PostgreSQL Коллега обнаружил, что запрос на
PostgreSQL под FreeBSD работает в пять раз медленнее, когда включена репликация
Запись мешает чтению? На машине с Linux и включенной
репликацией запрос работает в пять раз быстрее!
Кто виноват?
Кто виноват? Тестовый запрос: update users set phone_number=id where id in (select
id from users offset 200000 limit 50000);
Ubuntu с ext4 — 15 минут FreeBSD, Linux/ZoL, Solaris с экспортом по
iSCSI, Solaris с экспортом по NFS — примерно 75 минут
Настройки PostgreSQL одинаковые (дефолтные)
Что делать? Делали sync=disabled Уменьшали zfs recordsize до 8K (На что
надеялись? При записи вообще не влияет) Пробовали VirtualBox, KVM, PostgreSQL во
FreeBSD jail Ничего не помогает Пока не знаю, в чем проблема Надо попробовать профайлинг с DTrace
НЕ СПАТЬ, ПОЖАЛУЙСТА! Ведь я пока рассказал всего только треть!
Но если вы — котик, то можно
Тем временем Нужно было виртуализировать Windows W2K8 как билд-сервер Несколько WinXP для прочих нужд На хосте Debian Stable + OpenVZ + ZoL W2K8 не работает под версией KVM из
backports — STOP error ......., проблема с паравиртуальными драйверами диска
А XP плохо работает с KVM из Debian Stable — постоянные перезагрузки
Паравиртуальные драйвера Свободные выходят по несколько раз в
год, а иногда и в месяц Работают как мигалка (“работает”/”не
работает”), надо подбирать Выяснилось, что XP под Debian Testing
ведет себя значительно стабильнее W2K8 тоже работает под KVM из Testing Но есть две проблемы: Раз в месяц магически отваливается сеть OpenVZ не портировано под ядро 3.2.0 из
состава Debian Testing
Сельхозмагия При падении сети помогает зайти на
консоль XP-виртуалки по VNC и что угодно там поделать — сеть вернется
Через четыре месяца это надоело, и вместо KVM был взят хост с Windows и Hyper-V, что закрыло вопрос навсегда
Чтобы сохранить существующие OpenVZ контейнеры, их перенесли в Debian Stable виртуальную машину, работающую под KVM на хосте с Debian Testing
Раз уж речь зашла о KVM Я просто не умею ее готовить Но с каждым разом узнаю что-нибудь
новое Диски — virtio, тип кэша хорошо бы none,
но ZFS не поддерживает Direct IO, поэтому writeback
Если сторадж подключен по NFS или iSCSI, тип кэша — none
Копируйте конфигурацию CPU с хоста, чтобы не эмулировать лишние инструкции
И еще про KVM KSM — Kernel Samepage Merging Много одинаковых виртуалок — общая
память объединяется В VirtualBox это называется “Page Fusion”
и работает только для Windows guests Минус: приложение должно само сообщать
ядру, где находятся одинаковые страницы Минус: сканирование идет медленно UKSM, PKSM — сторонние пачти, выше
скорость, не нужны хинты от приложения Но я пока не пробовал
Насколько хорош KSM? cat /sys/kernel/mm/ksm/pages_sharing На одном хосте (много однотипных
виртуалок) - 3378324 На другом — 309816 Скрипт для красивой печати:
http://goo.gl/LjKvh 13 гигабайт сэкономлено на первом хосте
и 1.2 гигабайта на втором Визуальные наблюдения подтверждают
Тюнинг на стороне guest Планировщик IO по умолчанию CFQ Найдите на графике момент переключения
на deadline
Используйте deadline или noop!
Выводы
Третьей части — быть! (я ведь пока еще ничего не рассказал про выделенные сетевые хранилища)
Необходимо тщательно подбирать инструменты под вашу задачу
Тем более, что выбор есть Очень рекомендую попробовать ZFS в
любом виде
Вопросы?Голосуйте за меня на
http://devconf.ru/offers !
Спасибо!
Чистяков Александр,Cezurity
http://alexclear.livejournal.com
https://github.com/alexclear