[Из песочницы] Проблемы после миграции с openvz на lxc в Proxmox 4.x

36ae58f62aac4d9abacfbc52d07eeca5.png

К сожалению, развитие openvz зашло в определенный тупик, платный вариант virtuozo сильно ушел по кодовой базе в бок и в какой-то момент оказалось, что openvz работает только на старом ядре версии 2.6.32, а работы по слиянию openvz и virtuozo7 идут, сказать честно, не быстро.

Собственно это подтолкнуло команду proxmox в версии 4.0 отказаться от openvz в пользу lxc и ядра версии 4.2.6. К сожалению, команда proxmox совершенно не уделила внимания тестированию lxc в proxmox, всем, кто хочет хочет мигрировать с openvz, я настоятельно рекомендую воздержаться.

Ниже я расскажу о всех трудностях и проблемах после миграции на lxc.

Я пробовал несколько раз уже lxc, сказать честно, он был полон детских проблем, и это каждый раз меня отталкивало от использования его в продакшене, а хоумпаги я могу похостить и на openvz без детских проблем lxc, даже тот же докер намного дальше ушел в стабильности и предсказуемости.

Из глобальных проблем openvz мне вспоминается только проблема в centos 7 где не подымалась сеть, и надо было дефолтроут прописать ручками в rc.local, или установкой вот этого патча.

В lxc оказалось все намного хуже, я переходил на него с openvz, когда вышла версия proxmox 4.1, я честно думал все будет работать в lxc ожидаемо и стабильно, как в винде после первого сервис пака. Плюсом было конвертнуть бекап openvz в lxc двумя командами, но к сожалению переезд в итоге откликнулся мучительной болью и кучей потеряного времени, лучше бы я ещё годик посидел на openvz.

lzop -d vzdump-openvz-126–2016_01_27–11_08_32.tar.lzo
pct restore 126 vzdump-openvz-126–2016_01_27–11_08_32.tar --rootfs local:0

Опцию убирающую дисковую квоту --rootfs local:0 используйте если у вас хранилище не на lvm или zfs. Вот более подробное руководство для тех, кто не разобрался.

Пять основных проблем lxc которые я встретил:

  • В centos 6 пхп не коннектиться к сокету mysql, надо везде прописывать вместо localhost айпи 127.0.0.1, долго рыл эту проблему, но решения не нашел, сперва думал это связано с тем, что я конвертил из openvz, но на свежей инсталяции lxc centos 6 наблюдается такая же проблема. Пробовал ставить percona 5.6 проблема сохраняется.
  • Чудовищно медленная работа lxc в image base, то есть если файлы храняйтся в виде образа диска на хостовой машине то производительности дисковой подсистемы падает в разы, от 3 до 20 раз. Я не тестил lxc на lvm и zfs. На lvm до сих пор нет thin provision, но обещают в следующих версиях. У меня довольно много всего развернуто в image base в kvm и там есть определенный оверхед на записать на диск, но он измеряется в процента, даже наверно не в десятках процентов, но такого подвоха чтобы запись в mysql стала в 20 раз медленее от lxc в proxmox я не ожидал. Вылечил в итоге хранением файлов гостей напрямую в файловой системе хоста как в openvz. При этом не работают дисковые квоты, но так как места навалом и стоит мониторинг места то забил на квоты, хотя для ссд систем дисковые квоты более актуальны. При создании и востановление указывайте опцию --rootfs local:0, из вебинтерфейса к сожалению этого сделать нельзя.
  • Не работающие бекапы lxc, бекап proxmox просто зависал на suspend vm даже в версии proxmox 4.1, этот баг пофиксили буквально 2 марта.
  • Оно реально медленнее openvz.
  • Два контейнера у меня намертво зависли и их не получилось убить никакими способами, сервер мягко ребутнуть тоже из за них не получилось в итоге пришлось сделать ресет кнопкой на сервере.

Проблемы миграции:

  • Не удалось запустить нормально дебиан 6 после конвертации в lxc, точно не помню в чем была проблема, но в связи с тем что дебиан 6 сильно легаси, перенес все приложения в свежий debian 8 руками.
  • Выше уже упомянал что php не коннектиться к mysql по socket.
  • В centos 6 не подымается сеть из за переименования сетевых интерфейсов с venet на eth0, надо зайти в контейнер с хоста через pct enter ID и выполнить команды
    sed -i -e 's/venet0/eth0/g' /etc/sysconfig/network
    rm -rf /etc/sysconfig/network-scripts/ifcfg-venet0:0
    rm -rf /etc/sysconfig/network-scripts/ifcfg-venet0
    reboot
  • Нельзя зайти в контейнер redhat based по ssh из за отсутствия tty, как то криво отрабатывает udev после конвертации, полечил вот так
    pct enter ID
    sed -i -e 's/start_udev/false/g' /etc/rc.d/rc.sysinit
    reboot


FYI:

1) Подробное руководство по обновлению proxmox 3→4;
2) Описание проблемы со скоростью дисков в lxc: раз, два, три;
3) Поддержка proxmox 3.x закончится в апреле 2016;
4) Тред, почему lxc плохой;
5) Как смигрировать c lxc обратно в openvz.

Надеюсь, этот пост сохранит кому-нибудь кучу времени.

© Habrahabr.ru