apc и несколько пуллов php-fpm

Koc

Новичок
Есть сервер с php-fpm, на нем 3 пулла, используются на разных хостах. При этом в apc лежат данные со всех этих хостов. Как сделать так, что б для разных пулов были свои shm?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
никак, а с чего бы вдруг? apc сделан чтобы кешировать в оперативке скомпилированный байткод скриптов, зачем его разделять?
 

Koc

Новичок
та хочется даже разные shm size сделать для разных пулов
 

Koc

Новичок
та как бы да, это впс-ка, там есть пару проектов на продакшене и пару в тесте. Вот тестовым хочется урезать память.
 

tony2001

TeaM PHPClub
к сожалению, APC (как и все другие кэши байткода) инициализируется один раз на старт всего PHP и ничего не знает про пулы FPM.
 

Yoskaldyr

"Спамер"
Партнер клуба
APC на несколько пулов не пробовал. Вот для xcache точно нельзя сделать несколько опкод кешей для разных пулов. что подтверждают слова tony2001.

Мне необходимо было разделить опкод кеши не столько в плане ограничения памяти, сколько в плане безопасности. Поэтому вместо нескольки php-fpm пулов, запустил несколько копий php-fpm (каждая со своими настройками опкод кеширования) в разных lxc-контейнерах.
 

fixxxer

К.О.
Партнер клуба
В fpm общий кэш акселератора by design, это фича. Конечно, возможность (опциональная! общий кэш какого-нибудь /usr/share/pear по умолчанию - это правильно) разделения по пулам не помешала бы, но, в любом случае, это лучше, чем ситуация с cgi-fcgi sapi + внешний spawner, когда кэш свой у каждого воркера.

Когда мне надо изолировать процессы, я использую openvz, ну вот выше lxc предложили (он, кстати, как, уже production ready? Мне пока что-то страшновато...)
 

Фанат

oncle terrible
Команда форума
немного занудства не в тему.
пулл от английского pull - тянуть. пулл-реквест.
пул от английского pool - бассейн, резервуар. пул коннектов, президентский пул (журналистов)
 

Yoskaldyr

"Спамер"
Партнер клуба
Когда мне надо изолировать процессы, я использую openvz, ну вот выше lxc предложили (он, кстати, как, уже production ready? Мне пока что-то страшновато...)
Ну он уже довольно давно в ванильном ядре есть и от всех кто его все кто его юзал, только положительные отзывы. Гглавная проблема, что документации просто минимум :(.
Мне понравилось тем что можно вынести в контейнер только 1 процесс, с минимальными накладными расходами, а не подгружать целую виртуальную систему (типа навороченного варианта jail-а)
 

fixxxer

К.О.
Партнер клуба
Вот в джейле нормального управления лимитами нет, например. Тут все так же надо с бубном прыгать вокруг cgroups, или что-нибудь поудобнее появилось (ну хотя бы готовые скриптики с парсерами конфига)?
 

Koc

Новичок
насколько я знаю - ограничить потребление ресурсов в джейле никак нельзя, тут по идее kvm нужно использовать
 

Yoskaldyr

"Спамер"
Партнер клуба
Вот в джейле нормального управления лимитами нет, например. Тут все так же надо с бубном прыгать вокруг cgroups, или что-нибудь поудобнее появилось (ну хотя бы готовые скриптики с парсерами конфига)?
Вот док по использованию cgroups и лимитированию ресурсов в lxc уйма. Как и по запуску целой виртуальной системы. Для меня основная проблема была запустить один отдельный процесс в отдельном контейнере, т.к. есть ман только для sshd, но и то очень урезанный. Зато один раз настроил и потом добавление нового мини-контейнера дело пару мин - скопировать конфиг и небольшое дерево папок
насколько я знаю - ограничить потребление ресурсов в джейле никак нельзя, тут по идее kvm нужно использовать
Я же не сказал что это именно jail, я сказал что "это навороченный jail" - есть лимиты и ограничения как для памяти, диска, cpu, сети и т.д. Вообще-то это аналог OpenVZ, который уже есть в ванильном ядре, т.е. не надо ставить никаких патчей и можно использовать стандартные репы.
 

Yoskaldyr

"Спамер"
Партнер клуба
Например, как у меня идет взаимодействие с контейнерами:

на хост системе поднята обычная связка nginx + php-fpm + mysql. На хост php-fpm крутятся сайты к управлением которыми есть доступ только у меня.
Все остальные сайты, к которым есть доступ у других людей подняты в lxc-контейнерах.
В контейнерах подняты зеркала хост системы (ридонли зеркало основных каталогов хост системы), и с правами на запись только для каталогов сайтов + временные каталоги. А также собственные служебные каталоги (etc и т.п. ) В контейнере где запущен только php-fpm со своим конфигом (свои настройки пхп-модулей, свой опкод кеш).

Хостовый nginx общается с php-fpm внутри контейнеров через unix-сокеты, т.е. точно также как и с обычными php-fpm. Но вот внутри контейнера php-fpm видит только то что ему разрешили. Контейнерный php-fpm общается с хостовой базой посредством tcp-сокетов (доступ к фс хоста решил не давать из соображений безопасности). В результате получился обычный конфиг nginx + php-fpm + mysql, но с жестким лимитированием некоторых сайтов.

Главный профит - одна версия ОС с одинаковыми версиями софта во всех контейнерах, т.е. все работают на одной версии (Хотя при желании никто не мешает в одном контейнере сделать другую версию пхп, mysql и т.д.). Единственный момент - это правильный перезапуск контейнеров после обновления, но у меня не настолько критичные задачи, где простой около секунды что-то решает.

P.S. Еще один момент насчет lxc - под ним нормально работает монга, а под OpenVZ - нет, для меня это было критично
 

fixxxer

К.О.
Партнер клуба
Не очень понял, чем для запуска одного процесса не устраивает банальный chroot + r/o loopback fs.

Вот док по использованию cgroups и лимитированию ресурсов в lxc уйма. Как и по запуску целой виртуальной системы.
Да проблема не в наличии доков, а в том, что руками это делать катастрофически неудобно, и приходится либо городить свои велосипеды (что всегда плохо), либо пристраивать совершенно тут излишний либвирт...
 

Yoskaldyr

"Спамер"
Партнер клуба
Не очень понял, чем для запуска одного процесса не устраивает банальный chroot + r/o loopback fs.
нельзя так детально настроить как с lxc
Да проблема не в наличии доков, а в том, что руками это делать катастрофически неудобно, и приходится либо городить свои велосипеды (что всегда плохо), либо пристраивать совершенно тут излишний либвирт...
это да, только велосипедно руками :(
 

MiksIr

miksir@home:~$
Я вот не понял зачем какие-то контейнеры и даже чруты для запуска нескольких наборов fpm?
 

Yoskaldyr

"Спамер"
Партнер клуба
Я вот не понял зачем какие-то контейнеры и даже чруты для запуска нескольких наборов fpm?
мне надо было для полной изолированности и для полностью различных настроек +временами мне нужна другая версия пхп (5.2)
запустил в контейнере и все, а в основной системе стоит 5.4 (полная виртуалка - слишком накладно для разового запуска)
А простым запуском нескольких копий php-fpm полной изолированности простыми средствами не достичь, при условии что все пулы подключаются к одному Nginx-у.

MiksIr, я понимаю что lxc может быть перебором (и я бы не страдал фигней, если бы были другие стандартные решения), но тогда подскажите, как по другому и желательно без гемора с переписыванием 100500 конфигов полностью изолировать процесс php-fpm чтобы у него вообще не было доступа к системе а только к папке сайта (при условии что в настройках пхп разрешен запуск шелл скриптов т.е. нет никаких запрещенных функций) и чтобы у пользователя был доступ по sftp и тоже только до папки сайта?

В большинстве случаев достаточно стандартного функционала пулов php-fpm, а lxc - это просто инструмент для изоляции и виртуализации и его надо применять когда он необходим, а не просто потому что захотелось. В моем случае - это была необходимость, для которой классическое решением было бы поднять полноценную виртуалку, но это всетаки было излишне и очень хорошо подошел lxc.
 
Сверху