Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
751d5d1bae | ||
|
|
237904f0df |
157
s4a.tex
157
s4a.tex
@@ -14,7 +14,7 @@
|
|||||||
\hypersetup{pdftitle={systemd для администраторов},%
|
\hypersetup{pdftitle={systemd для администраторов},%
|
||||||
pdfauthor={Lennart Poettering, Sergey Ptashnick}}
|
pdfauthor={Lennart Poettering, Sergey Ptashnick}}
|
||||||
% Не засоряем оглавление подразделами
|
% Не засоряем оглавление подразделами
|
||||||
\setcounter{tocdepth}{1}
|
%\setcounter{tocdepth}{1} % А почему бы и нет?
|
||||||
% Несколько сокращений
|
% Несколько сокращений
|
||||||
\newcommand{\sectiona}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}}
|
\newcommand{\sectiona}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}}
|
||||||
\newcommand{\hreftt}[2]{\href{#1}{\texttt{#2}}}
|
\newcommand{\hreftt}[2]{\href{#1}{\texttt{#2}}}
|
||||||
@@ -419,7 +419,12 @@ alias psc='ps xawf -eo pid,user,cgroup,args'
|
|||||||
|
|
||||||
Альтернативный способ получить ту же информацию~--- воспользоваться утилитой
|
Альтернативный способ получить ту же информацию~--- воспользоваться утилитой
|
||||||
+systemd-cgls+, входящей в комплект поставки systemd. Она отображает иерархию
|
+systemd-cgls+, входящей в комплект поставки systemd. Она отображает иерархию
|
||||||
контрольных групп в виде псевдографической диаграммы-дерева:
|
контрольных групп в виде псевдографической диаграммы-дерева\footnote{Прим.
|
||||||
|
перев.: Стоит заметить, что в нижеприведенном листинге используется
|
||||||
|
ASCII-псевдографика. Между тем, уже довольно давно отображение иерархии
|
||||||
|
процессов в +systemd-cgls+ и +systemctl status+ производится в более
|
||||||
|
выразительной ├юникодной └псевдографике. ASCII-вариант выводится только в том
|
||||||
|
случае, если консоль не~поддерживает Unicode.}:
|
||||||
|
|
||||||
\begin{landscape}
|
\begin{landscape}
|
||||||
\begin{Verbatim}[fontsize=\small]
|
\begin{Verbatim}[fontsize=\small]
|
||||||
@@ -2127,7 +2132,7 @@ systemd?
|
|||||||
позволяющей прочитать из файла набор переменных окружения, который будет
|
позволяющей прочитать из файла набор переменных окружения, который будет
|
||||||
установлен при запуске службы. Если же для задания настроек вам необходим
|
установлен при запуске службы. Если же для задания настроек вам необходим
|
||||||
полноценный язык программирования~--- ничто не~мешает им воспользоваться.
|
полноценный язык программирования~--- ничто не~мешает им воспользоваться.
|
||||||
Например, вы можете создайть в +/usr/lib/<your package>/+ простой скрипт,
|
Например, вы можете создать в +/usr/lib/<your package>/+ простой скрипт,
|
||||||
который включает соответствующие файлы, а затем запускает бинарник демона через
|
который включает соответствующие файлы, а затем запускает бинарник демона через
|
||||||
+exec+. После чего достаточно просто указать этот скрипт в опции +ExecStart=+
|
+exec+. После чего достаточно просто указать этот скрипт в опции +ExecStart=+
|
||||||
вместо бинарника демона.
|
вместо бинарника демона.
|
||||||
@@ -3132,7 +3137,7 @@ URI, ссылающиеся на документацию, формируютс
|
|||||||
Да, кстати: если вас интересует общий обзор процесса загрузки systemd, то вам
|
Да, кстати: если вас интересует общий обзор процесса загрузки systemd, то вам
|
||||||
стоит обратить внимание на
|
стоит обратить внимание на
|
||||||
\href{http://www.freedesktop.org/software/systemd/man/bootup.html}{новую
|
\href{http://www.freedesktop.org/software/systemd/man/bootup.html}{новую
|
||||||
страницу руководства}, где представлена псевгдорафическая потоковая диаграмма,
|
страницу руководства}, где представлена псевдографическая потоковая диаграмма,
|
||||||
описывающая процесс загрузки и роль ключевых юнитов.
|
описывающая процесс загрузки и роль ключевых юнитов.
|
||||||
|
|
||||||
\section{Сторожевые таймеры}
|
\section{Сторожевые таймеры}
|
||||||
@@ -3628,7 +3633,10 @@ Journal был включен в Fedora начиная с F17. В Fedora~18 jour
|
|||||||
большинства лог-файлов. При этом авторы четко разделяют полномочия групп +adm+ и
|
большинства лог-файлов. При этом авторы четко разделяют полномочия групп +adm+ и
|
||||||
+wheel+: если последняя используется для предоставления прав \emph{изменять}
|
+wheel+: если последняя используется для предоставления прав \emph{изменять}
|
||||||
что-либо в системе, то первая дает возможность лишь \emph{просматривать}
|
что-либо в системе, то первая дает возможность лишь \emph{просматривать}
|
||||||
системную информацию.}:
|
системную информацию. Начиная с версии systemd 198, группа-владелец файлов
|
||||||
|
журнала изменена с +adm+ на +systemd-journal+, однако штатный алгоритм установки
|
||||||
|
systemd все равно выдает права на их чтение группам +adm+ и +wheel+ (через
|
||||||
|
ACL).}:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
$ journalctl
|
$ journalctl
|
||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
@@ -3804,7 +3812,7 @@ $ journalctl -F _SYSTEMD_UNIT
|
|||||||
однако, начиная с релиза systemd 196, аналогичная функциональность доступна и
|
однако, начиная с релиза systemd 196, аналогичная функциональность доступна и
|
||||||
для zsh.}! Это же просто прекрасно~--- вы можете просмотреть перечень значений
|
для zsh.}! Это же просто прекрасно~--- вы можете просмотреть перечень значений
|
||||||
поля и выбрать из него нужно прямо при вводе выражения. Возьмем для примера
|
поля и выбрать из него нужно прямо при вводе выражения. Возьмем для примера
|
||||||
метки SELinux. Помнится, имя поле начиналось с букв SE\ldots{}
|
метки SELinux. Помнится, имя поля начиналось с букв SE\ldots{}
|
||||||
\begin{Verbatim}[commandchars=\\\{\}]
|
\begin{Verbatim}[commandchars=\\\{\}]
|
||||||
$ journalctl _SE\textbf{<TAB>}
|
$ journalctl _SE\textbf{<TAB>}
|
||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
@@ -3956,16 +3964,32 @@ CPUShares=1500
|
|||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
Первая строка обеспечивает включение в нашу конфигурацию файла с настройками по
|
Первая строка обеспечивает включение в нашу конфигурацию файла с настройками по
|
||||||
умолчанию, сделанными разработчиками Apache или его сопровождающими в вашем
|
умолчанию, сделанными разработчиками Apache или его сопровождающими в вашем
|
||||||
дистрибутиве (если это включение не~указать явно, данный файл будет проигнорирован).
|
дистрибутиве (если это включение не~указать явно, данный файл будет
|
||||||
Далее, мы указываем тот параметр, который хотим изменить. Сохраняем файл,
|
проигнорирован). Далее, мы указываем тот параметр, который хотим
|
||||||
приказываем systemd перечитать конфигурацию, и перезапускаем Apache, чтобы
|
изменить\footnote{Прим. перев.: В новых версиях systemd, начиная со 198, можно
|
||||||
настройки вступили в силу\footnote{Прим. перев.: К сожалению, в настоящее время
|
поступить проще: вместо того, чтобы создавать свой юнит-файл в каталоге +/etc+ и
|
||||||
systemd не~поддерживает изменение параметров контрольных групп без перезапуска
|
включать в него содержимое штатного (из +/usr+), достаточно просто создать
|
||||||
службы. Но вы можете узнать контрольную группу службы командой наподобие
|
каталог +/etc/systemd/system/httpd.service.d/+ и поместить в него файл
|
||||||
+systemctl show -p ControlGroup avahi-daemon.service+, и выполнить настройки
|
+my_resource_limit.conf+ (суффикс +.conf+ обязателен), в котором указываются
|
||||||
любым удобным для вас способом, например, через запись значений в псевдофайлы
|
только те настройки, которые необходимо изменить (последние две строки
|
||||||
cgroupfs. Разумеется, при следующем запуске службы к ней будут применены
|
вышеприведенного листинга). Это никак не~отменяет основного конфигурационного
|
||||||
параметры, указанные в конфигурационном файле.}:
|
файла юнита (который может находиться в +/usr+ или +/etc+), однако настройки из
|
||||||
|
+.d+-каталогов имеют более высокий приоритет и могут перекрывать настройки
|
||||||
|
основного файла. Все вышесказанное относится и к другим примерам из этого
|
||||||
|
раздела.}. Сохраняем файл, приказываем systemd перечитать конфигурацию, и
|
||||||
|
перезапускаем Apache, чтобы настройки вступили в силу\footnote{Прим. перев.:
|
||||||
|
systemd версий до 197 включительно, не~поддерживает изменение параметров
|
||||||
|
контрольных групп без перезапуска службы. Но вы можете узнать контрольную группу
|
||||||
|
службы командой наподобие +systemctl show -p ControlGroup avahi-daemon.service+,
|
||||||
|
и выполнить настройки любым удобным для вас способом, например, через запись
|
||||||
|
значений в псевдофайлы cgroupfs (разумеется, при следующем запуске службы к ней
|
||||||
|
будут применены параметры, указанные в конфигурационном файле). Начиная с
|
||||||
|
systemd 198, в программу +systemctl+ добавлена поддержка команд
|
||||||
|
+set-cgroup-attr+, +unset-cgroup-attr+ и +get-cgroup-attr+, позволяющих
|
||||||
|
манипулировать практически всеми параметрами контрольных групп. При этом
|
||||||
|
поддерживается сохранение установленных таким образом параметров в виде
|
||||||
|
вспомогательных конфигурационных файлов в +.d+-каталогах (см. примечание
|
||||||
|
выше).}:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl restart httpd.service
|
systemctl restart httpd.service
|
||||||
@@ -4240,7 +4264,7 @@ fi
|
|||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
Эта утилита возвращает код 0 (успех), обнаружив виртуализацию, или ненулевое
|
Эта утилита возвращает код 0 (успех), обнаружив виртуализацию, или ненулевое
|
||||||
значение, если виртуализация не~выявлена. Кроме того, она выводит идентификатор
|
значение, если виртуализация не~выявлена. Также она выводит идентификатор
|
||||||
обнаруженной системы виртуализации (согласно списку выше), если это не~было
|
обнаруженной системы виртуализации (согласно списку выше), если это не~было
|
||||||
запрещено опцией +-q+. Кроме того, опции +-c+ и +-v+ позволяют ограничить
|
запрещено опцией +-q+. Кроме того, опции +-c+ и +-v+ позволяют ограничить
|
||||||
проверки только механизмами виртуализации на уровне ОС, либо полной
|
проверки только механизмами виртуализации на уровне ОС, либо полной
|
||||||
@@ -4297,16 +4321,21 @@ $ gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedes
|
|||||||
постоянно остается открытым для входящих соединений, и все они обрабатываются
|
постоянно остается открытым для входящих соединений, и все они обрабатываются
|
||||||
быстро и корректно.
|
быстро и корректно.
|
||||||
|
|
||||||
Такая конфигурация позволяет снизить потребление ресурсов: службы работают и
|
Такая конфигурация позволяет снизить потребление системных ресурсов: службы
|
||||||
потребляют ресурсы только тогда, когда это действительно необходимо. Многие
|
работают и потребляют ресурсы только тогда, когда это действительно необходимо.
|
||||||
интернет-сайты и службы могут использовать это с выгодой для себя. Например,
|
Многие интернет-сайты и службы могут использовать это с выгодой для себя.
|
||||||
хостеры веб-сайтов знают, что из огромного количества существующих в Интернете
|
Например, хостеры веб-сайтов знают, что из огромного количества существующих в
|
||||||
сайтов лишь малая часть получает непрерывный поток запросов. Большинство же
|
Интернете сайтов лишь малая часть получает непрерывный поток запросов.
|
||||||
сайтов, хотя и должны постоянно оставаться доступными, получают запросы очень
|
Большинство же сайтов, хотя и должны постоянно оставаться доступными, получают
|
||||||
редко. Используя сокет-активацию, вы можете воспользоваться этим: разместив
|
запросы очень редко. Используя сокет-активацию, вы можете воспользоваться этим:
|
||||||
множество таких сайтов на одной системе и активируя их службы только при
|
разместив множество таких сайтов на одной системе и активируя их службы только
|
||||||
необходимости, вы получаете возможность <<оверкоммита>>: ваша система
|
при необходимости, вы получаете возможность <<оверкоммита>>: ваша система будет
|
||||||
будет обслуживать сайтов больше, чем формально позволяют ее ресурсы. Разумеется,
|
обслуживать сайтов больше, чем формально позволяют ее ресурсы\footnote{Прим.
|
||||||
|
перев.: Стоит отметить, что подобная схема работает только при условии, что для
|
||||||
|
каждого клиентского сайта запускаются отдельные процессы служб, хотя это и
|
||||||
|
происходит в рамках одного хоста. Не~очень распространенный в отчественном
|
||||||
|
хостинге вариант: обычно следующей опцией после shared-хостинга (одна служба на
|
||||||
|
всех клиентов) идет VPS (каждому клиенту по виртуальному хосту).}. Разумеется,
|
||||||
увлекаться оверкоммитом не~стоит, иначе в моменты пиковой нагрузки ресурсов
|
увлекаться оверкоммитом не~стоит, иначе в моменты пиковой нагрузки ресурсов
|
||||||
может действительно не~хватить.
|
может действительно не~хватить.
|
||||||
|
|
||||||
@@ -4319,20 +4348,25 @@ $ gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedes
|
|||||||
\hyperref[sec:instances]{экземплярами служб} позволяет подготовить
|
\hyperref[sec:instances]{экземплярами служб} позволяет подготовить
|
||||||
универсальные шаблоны конфигурации служб, и в соответствии с ними для каждого
|
универсальные шаблоны конфигурации служб, и в соответствии с ними для каждого
|
||||||
сайта будет запускаться свой экземпляр службы. Кроме того, не~стоит забывать,
|
сайта будет запускаться свой экземпляр службы. Кроме того, не~стоит забывать,
|
||||||
что systemd предоставляет \hyperref[sec:security]{богатый арсенал}
|
что systemd предоставляет \hyperref[sec:security]{внушительный арсенал}
|
||||||
механизмов обеспечения безопасности и разграничения доступа, который позволит
|
механизмов обеспечения безопасности и разграничения доступа, который позволит
|
||||||
изолировать клиентские сайты друг от друга (например, службы каждого клиента
|
изолировать клиентские сайты друг от друга (например, службы каждого клиента
|
||||||
будут видеть только его собственный домашний каталог, в то время как каталоги
|
будут видеть только его собственный домашний каталог, в то время как каталоги
|
||||||
всех остальных пользователей будут им недоступны). Итак, в конечном итоге вы
|
всех остальных пользователей будут им недоступны). Итак, в конечном итоге вы
|
||||||
получаете надежную и масштабируемую серверную систему, на сравнительно небольших
|
получаете надежную и масштабируемую серверную систему, на сравнительно небольших
|
||||||
ресурсах которой функционирует множество безопасно изолированных друг от друга
|
ресурсах которой функционирует множество безопасно изолированных друг от друга
|
||||||
служб~--- и все это реализовано штатными возможностями вашей ОС.
|
служб~--- и все это реализовано штатными возможностями вашей ОС\footnote{Прим.
|
||||||
|
перев.: В качестве практического примера использования сокет-активации служб
|
||||||
|
systemd в промышленных серверных платформах, можно предложить
|
||||||
|
\href{http://savanne.be/articles/deploying-node-js-with-systemd/}{вот эту
|
||||||
|
статью}, наглядно описывающую применение этой и других технологий (мониторинг,
|
||||||
|
использование Journal, ограничение ресурсов и доступа) на примере Node.js.}.
|
||||||
|
|
||||||
Подобные конфигурации уже используются на рабочих серверах ряда компаний. В
|
Подобные конфигурации уже используются на рабочих серверах ряда компаний. В
|
||||||
частности, специалисты из \href{https://www.getpantheon.com/}{Pantheon}
|
частности, специалисты из \href{https://www.getpantheon.com/}{Pantheon}
|
||||||
используют такую схему для обслуживания масштабируемой инфраструктуры множества
|
используют такую схему для обслуживания масштабируемой инфраструктуры множества
|
||||||
сайтов на базе Drupal. (Стоит упомянуть, что заслуга ее внедрения в Pantheon
|
сайтов на базе Drupal. (Стоит упомянуть, что заслуга ее внедрения в компании
|
||||||
принадлежит Дэвиду Штрауссу. Дэвид, ты крут!)
|
Pantheon принадлежит Дэвиду Штрауссу. Дэвид, ты крут!)
|
||||||
|
|
||||||
\subsection{Сокет-активация контейнеров}
|
\subsection{Сокет-активация контейнеров}
|
||||||
|
|
||||||
@@ -4368,12 +4402,12 @@ systemd 197 (и, соответственно, с Fedora~19), мы добави
|
|||||||
в systemd простейшим контейнерным менеджером~---
|
в systemd простейшим контейнерным менеджером~---
|
||||||
\hyperref[sec:chroots]{systemd-nspawn}. Мы надеемся, что соответствующая
|
\hyperref[sec:chroots]{systemd-nspawn}. Мы надеемся, что соответствующая
|
||||||
возможность вскоре появится и в
|
возможность вскоре появится и в
|
||||||
\href{http://libvirt.org/drvlxc.html}{libvirt-lxc}. А пока рассмотрим
|
\href{http://libvirt.org/drvlxc.html}{libvirt-lxc}. А пока, за отсутствие
|
||||||
использование этого механизма на примере systemd-nspawn.
|
альтернатив, рассмотрим использование этого механизма на примере systemd-nspawn.
|
||||||
|
|
||||||
Начнем с установки файлов ОС контейнера в выбранный каталог. Детальное
|
Начнем с установки файлов ОС контейнера в выбранный каталог. Детальное
|
||||||
рассмотрение этого вопроса выходит далеко за рамки нашего обсуждения, и
|
рассмотрение этого вопроса выходит далеко за рамки нашего обсуждения, и
|
||||||
при этом детально рассмотрено во многих статьях и руководствах. Поэтому
|
при том детально рассмотрено во многих статьях и руководствах. Поэтому
|
||||||
ограничусь лишь несколькими наиболее важными замечаниями. В частности, команда
|
ограничусь лишь несколькими наиболее важными замечаниями. В частности, команда
|
||||||
для установки Fedora будет выглядеть следующим образом:
|
для установки Fedora будет выглядеть следующим образом:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
@@ -4399,7 +4433,7 @@ $ debootstrap --arch=amd64 unstable /srv/mycontainer/
|
|||||||
|
|
||||||
Итак, ваш контейнер нормально загружается и работает. Подготовим для него
|
Итак, ваш контейнер нормально загружается и работает. Подготовим для него
|
||||||
service-файл, при помощи которого systemd сможет запускать и останавливать
|
service-файл, при помощи которого systemd сможет запускать и останавливать
|
||||||
виртуальное окружение. Для этого, создадим на хост системе файл
|
виртуальное окружение. Для этого, создадим на хост-системе файл
|
||||||
+/etc/systemd/system/mycontainer.service+ со следующим содержанием:
|
+/etc/systemd/system/mycontainer.service+ со следующим содержанием:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -4417,10 +4451,10 @@ KillMode=process
|
|||||||
корневой каталог у них один и тот же, пространства имен (например, списки
|
корневой каталог у них один и тот же, пространства имен (например, списки
|
||||||
процессов) у каждого будут свои. Впрочем, данная задача может быть решена
|
процессов) у каждого будут свои. Впрочем, данная задача может быть решена
|
||||||
утилитой +nsenter+, которая должна войти в следующий релиз util-linux
|
утилитой +nsenter+, которая должна войти в следующий релиз util-linux
|
||||||
(предположительно, 2.23).}. Настроим на контейнере SSH-сервер, причем таким
|
(предположительно, 2.23).}. Чтобы исправить это упущение, настроим на контейнере
|
||||||
образом, что подключение к его порту активировало весь контейнер, а затем
|
SSH-сервер, причем таким образом, что подключение к его порту активировало весь
|
||||||
активировало сервер, работающий внутри. Начнем с того, что прикажем хосту
|
контейнер, а затем активировало сервер, работающий внутри. Начнем с того, что
|
||||||
слушать порт SSH для контейнера. Для этого создадим на хосте файл
|
прикажем хосту слушать порт SSH для контейнера. Для этого создадим на хосте файл
|
||||||
+/etc/systemd/system/mycontainer.socket+:
|
+/etc/systemd/system/mycontainer.socket+:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -4441,13 +4475,14 @@ ListenStream=23
|
|||||||
nspawn. Впрочем, опытные администраторы легко могут найти обходные пути,
|
nspawn. Впрочем, опытные администраторы легко могут найти обходные пути,
|
||||||
например: присваивание хосту дополнительного IP-адреса (безо всякой
|
например: присваивание хосту дополнительного IP-адреса (безо всякой
|
||||||
виртуализации, командой +ip addr add+) и привязка слушающих сокетов к конкретным
|
виртуализации, командой +ip addr add+) и привязка слушающих сокетов к конкретным
|
||||||
адресам (в параметре +ListenStream=+ сокет-файлов или в директиве
|
адресам (в параметре +ListenStream=+ сокет-файлов и/или в директиве
|
||||||
+ListenAddress+ файла +sshd_config+).}.
|
+ListenAddress+ файла +sshd_config+ хоста).}.
|
||||||
|
|
||||||
Пока что systemd, работающий внутри контейнера, не~знает, что делать с тем
|
Пока что systemd, работающий внутри контейнера, не~знает, что делать с тем
|
||||||
сокетами, которые ему передает systemd хоста. Если вы попробуете подключиться к
|
сокетами, которые ему передает systemd хоста. Если вы попробуете подключиться к
|
||||||
порту 23, контейнер запустится, но сетевое соединение немедленно будет закрыто,
|
порту 23, контейнер запустится, но сетевое соединение немедленно будет закрыто,
|
||||||
так как этому сокету не~соответствует пока никакой сервер. Давайте это исправим!
|
так как данному сокету не~соответствует пока никакой сервер. Давайте это
|
||||||
|
исправим!
|
||||||
|
|
||||||
Настройка сокет-активации службы SSH была детально рассмотрена
|
Настройка сокет-активации службы SSH была детально рассмотрена
|
||||||
\hyperref[sec:inetd]{в одной из предыдущих статей}, поэтому ограничусь
|
\hyperref[sec:inetd]{в одной из предыдущих статей}, поэтому ограничусь
|
||||||
@@ -4503,15 +4538,21 @@ systemd начнет прослушивать TCP-порт 23. При подкл
|
|||||||
соединения экземпляр +sshd@.service+, что позволит нам залогиниться в контейнер
|
соединения экземпляр +sshd@.service+, что позволит нам залогиниться в контейнер
|
||||||
по SSH.
|
по SSH.
|
||||||
|
|
||||||
Если нам нужно запуститьунтри контейнера другие службы с сокет-активацией, мы
|
Если нам нужно запуститьунтри контейнера другие службы с сокет-активацией, мы
|
||||||
можем добавить в +mycontainer.socket+ дополнительные сокеты. Все они будут
|
можем добавить в +mycontainer.socket+ дополнительные сокеты. Все они будут
|
||||||
прослушиваться, обращение к любому из них приведет к активации контейнера, и все
|
прослушиваться, обращение к любому из них приведет к активации контейнера, и все
|
||||||
они будут переданы контейнеру при его активации. Внутри контейнера они будут
|
эти сокеты будут переданы контейнеру при его активации. Внутри контейнера они
|
||||||
обработаны соответствии с настройками имеющихся там сокет-юнитов. Те сокеты, для
|
будут обработаны соответствии с настройками имеющихся там сокет-юнитов. Те
|
||||||
которых соответствующих юнитов не~найдется, будут закрыты, а те сокеты, которые
|
сокеты, для которых соответствующих юнитов не~найдется, будут
|
||||||
будут настроены для прослушивания внутри контейнера, но не~получены от хоста,
|
закрыты\footnote{Прим. перев.: Стоит особо отметить, что описанная технология
|
||||||
будут активированы и доступны изнутри контейнера (а если это сетевые или
|
работает только для служб, поддерживающих сокет-активацию в режимах inetd (все
|
||||||
файловые unix-сокеты, то и извне).
|
классические inetd-службы, кроме встроенных) или systemd (зависят от библиотеки
|
||||||
|
+libsystemd-daemon.so+, либо содержат в исходниках заголовочный файл
|
||||||
|
+sd-daemon.h+). Службы, которые сами открывают себе слушающий сокет и
|
||||||
|
не~содержат кода для приема уже открытого сокета, так активировать нельзя.}, а
|
||||||
|
те сокеты, которые будут настроены для прослушивания внутри контейнера, но
|
||||||
|
не~получены от хоста, будут активированы и доступны изнутри контейнера (а если
|
||||||
|
это сетевые или файловые unix-сокеты, то и извне).
|
||||||
|
|
||||||
Итак, давайте отступим чуть назад и полюбуемся на результаты наших трудов. Что
|
Итак, давайте отступим чуть назад и полюбуемся на результаты наших трудов. Что
|
||||||
мы получили в итоге? Возможность настраивать на одном хосте множество
|
мы получили в итоге? Возможность настраивать на одном хосте множество
|
||||||
@@ -4539,6 +4580,24 @@ libvirt-lxc или nspawn, но не~c qemu/kvm или xen.
|
|||||||
\href{http://www.freedesktop.org/software/systemd/man/journalctl.html}{journalctl(1)}.}.
|
\href{http://www.freedesktop.org/software/systemd/man/journalctl.html}{journalctl(1)}.}.
|
||||||
Ловко, не~правда ли?
|
Ловко, не~правда ли?
|
||||||
|
|
||||||
|
Необходимый минимум технологий для сокет-активации контейнеров, присутствует в
|
||||||
|
systemd, начиная с версии 197. Тем не~менее, наша работа в этой области еще
|
||||||
|
не~закончена, и в ближайшее время мы планируем доработать некоторые моменты.
|
||||||
|
Например, сейчас, даже если все серверные службы внутри контейнера
|
||||||
|
закончили обработку запросов и завершились, контейнер все равно продолжает
|
||||||
|
функционировать и потреблять ресурсы хоста. Мы просто обязаны реализовать
|
||||||
|
возможность автоматического завершения работы гостевой системы в такой ситуации.
|
||||||
|
Причем у нас уже есть готовые наработки в этой области~--- мы можем
|
||||||
|
задействовать уже существующую инфраструктуру, обеспечивающую автоматическое
|
||||||
|
засыпание/выключение ноутбука при отсутствии активных задач и пользователей.
|
||||||
|
|
||||||
|
Впрочем, пора закругляться, а то статья получается чересчур длинной. Надеюсь,
|
||||||
|
что вы смогли продраться через все эти длинные и скучные рассуждения о
|
||||||
|
виртуализации, сокетах, службах, различных ОС и прочем колдунстве. Также
|
||||||
|
надеюсь, что эта статья станет хорошей отправной точкой при конфигурировании
|
||||||
|
мощных и хорошо масштабируемых серверных систем. За дополнительной информацией
|
||||||
|
обращайтесь к документации или приходите на наш IRC-канал. Спасибо за внимание!
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
vim:ft=tex:tw=80:spell:spelllang=ru
|
vim:ft=tex:tw=80:spell:spelllang=ru
|
||||||
|
|||||||
Reference in New Issue
Block a user