networkd dispatcher service что это
Преимущества systemd-networkd на виртуальных серверах Linux
Обычно на десктопах Linux для управления сетевыми настройками используется NetworkManager, поскольку он отлично справляется со своей работой и имеет GUI фронтенды для всех популярных графических окружений. Однако на серверах Linux его использование не целесообразно: он потребляет много ресурсов. NetworkManager занимает в оперативной памяти около 20 Мб, в то время как systemd-networkd и systemd-resolvd вместе меньше 2 Мб. По этой причине, по умолчанию серверные дистрибутивы Linux server часто используют различные собственные демоны.
Таким образом возникает целый зоопарк скриптов и утилит: демон networking под Debian, который управляет конфигурацией сети через ifupdown, использующий файлы конфигурации хранящиеся в /etc/networking/interfaces.d и файл /etc/networking/interfaces, под CentOS network, который использует скрипты ifup и ifdown и, конечно же, свои файлы конфигурации находящиеся в /etc/sysconfig/network-scripts, netctl под ArchLinux. Всем известно, что Linux — конструктор, но почему бы такой простой и общей для самых различных систем вещи как настройка сети не иметь одинаковый вид?
Мы предлагаем начать использовать быстрый и простой демон systemd-networkd, особенно в свете того, что многие дистрибутивы уже перешли на systemd, поэтому переключение на systemd-networkd не составит труда. На текущий момент systemd-networkd может заменить собой множество утилит и поддерживает настройку сети как по DHCP (клиент и сервер) так и со статическими IP-адресами, мосты, туннели, VLANs, беспроводные сети (используя при этом wpa_supplicant).
В статье мы рассмотрим, как активировать systemd-networkd и начать его использовать, и в чем его основные преимущества перед остальными демонами.
Запуск systemd-networkd
Несмотря на страсти, кипевшие вокруг внедрения systemd, многие популярные дистрибутивы Linux стали использовать этот менеджер служб и поставлять его по умолчанию. Поэтому, вероятно, ваша система уже содержит всё необходимое для включения systemd-networkd. Необходим systemd версии 210 и выше.
Проверить версию можно с помощью команды:
Чтобы использовать, запустите следующие две службы и включите их работу при загрузке системы (отключив при этом другие демоны, управляющие конфигурацией сети):
Конфигурирование
В качестве примера переключения рассмотрим перенос конфигурации сети по умолчанию в CentOS (/etc/rc.d/init.d/network initscript) на systemd-networkd.
Полностью аналогичо переезд можно осуществить для Fedora и, с небольшими изменениями, для других дистрибутивов. Конфигурационные файлы systemd-networkd находятся в директории /etc/systemd/network. Доступны следующие типы:
Конфигурационные файлы для CentOS (или Fedora) можно найти в директории /etc/sysconfig/network-scripts
Необходимо создать 4 файла в директории /etc/systemd/network/
Вот и всё: конфигурация сети завершена. Теперь можно перезапустить сервис:
В данном примере сконфигурируем DHCP IPv4 и IPv6; IPv6 если не нужен, можно исключить.
Подключение типа «Мост»
Сначала создает конфигурацию виртуального интерфейса:
И настраиваем интерфейс для подключения:
Недостатки (не актуальны, по большому счету, для серверов)
1. Не будет работать без systemd.
2. Нет ни CLI ни GUI фронтендов. И NetworkManager, и netctl не страдают таким недостатком. Например, для подключения к WiFi вам понадобится командная строка. Не совсем актуально для сервера.
3. Для первого подключения к WiFi необходимы root права. Однако это не совсем недостаток, так как в будущем к этой беспроводной сети подключение будет происходить автоматически.
Бенчмарк
Тестируется скорость получения адресов по DHCP, Network manager and dnsmasq отключены.
— CentOS 7
— kernel-3.10.0-327.28.3.el7
— systemd 219
— ISC DHCP client daemon and dhclient-script 4.2.5
systemd-networkd
Меньше чем за секунду.
ISC DHCP
Среднее время после нескольких попыток составило 2.5 секунд.
Заключение
В виду активного использования systemd различными топовыми дистрибутивами Linux можно заключить, что, всё же, сообщество стремится к унификации основных системных функций. К ним относится, в том числе, конфигурирование сети, а systemd, в свою очередь, предлагает удобное, быстрое и функциональное решение. И пусть пока это решение сталкивается с проблемой отсутствия GUI для десктопных систем, но для Linux серверов оно, возможно, станет стандартом «де-факто» и заменит кучу легаси демонов и отдельных утилит. Это сделает Linux гораздо более удобным для контейнеризации и использования на виртуальных машинах.
Ускорение загрузки Linux
Но порой система инициализации выполняет много лишних задач во время загрузки, иногда некоторые сервисы ожидают загрузки других и завершаются только по таймауту через некоторое время. В таких случаях система может загружаться до нескольких минут. В этой статье мы рассмотрим как ускорить загрузку Linux, что нужно для этого настроить, что удалить. А также немного поговорим о процессе загрузки. Мы сосредоточимся на системе инициализации systemd.
Как проходит загрузка Linux
Во всех подробностях процесс загрузки Linux описан в отдельной статье, здесь же мы рассмотрим только то, что будет касаться ускорения.
На то как BIOS тестирует устройства и запускает загрузчик мы повлиять не можем. Работу загрузчика тоже ускорить не получится, можно только убрать ожидание выбора пункта меню.
Но самое интересное начинается дальше. Перед тем как начать загрузку системы ядро выполняет несколько проверок, загружает модули и так далее. Не все проверки нужно выполнять и не все модули нам нужны.
Загрузка сервисов отнимает больше всего времени и больше всего работы придется проделать здесь, определить какие сервисы не нужны и отключить их также скрыть те сервисы, которые отключить нельзя. Чтобы понять что именно отключать нам нужно знать сколько времени занимает загрузка каждого сервиса. Давайте рассмотрим анализ скорости загрузки systemd.
Анализ загрузки Systemd
Анализ скорости загрузки системы важен не только в самом процессе оптимизации, но и для того, чтобы оценить насколько эта оптимизация удалась. Перед и после оптимизации нужно замерять время загрузки, чтобы понять чего мы смогли добиться.
Давайте посмотрим насколько быстро грузится наша система сейчас:
Да, здесь 17 секунд, не так уж плохо, но будет еще лучше после завершения ускорения загрузки. На загрузку ядра уходит 5.405, а на все остальные сервисы 11.611. Чтобы понять какие именно сервисы замедляют систему нам нужна более подробная информация, мы можем ее получить с помощью параметра blame:
У нас есть список сервисов, которые загружаются дольше всего, но этот список ни о чем нам не говорит, потому что в Systemd параллельная загрузка сервисов. Если бы во время загрузки была какая-нибудь проблема, мы бы ее увидели, но проблем здесь нет. Нам нужен более детализованный график с указанием не только времени загрузки сервиса, но и с отображением параллельных загрузок и мы можем его получить командой:
systemd-analyze plot > graph.svf
Утилита сгенерирует svf файл с графиком, откройте его в браузере:
Вот теперь у нас есть вся информация, чтобы оптимизировать систему. Здесь отображается не только время загрузки каждого сервиса, но также время когда он начал загружаться и когда завершил. Дальше начнем ускорение загрузки Linux.
Ускорение загрузки Linux
Начнем мы с оптимизации ядра 5 секунд, это не так много, но можно же еще улучшить. Мы не будем пересобирать ядро, хотя и это дало бы больший эффект, мы просто настроим его работу с помощью параметров загрузки.
Настраивать Grub будем правильно. Параметры загрузки ядра находятся в файле /etc/default/grub, а именно в строчке GRUB_CMDLINE_LINUX_DEFAULT. Откройте этот файл:
Теперь приводим интересующую нас строчку к такому состоянию:
GRUB_CMDLINE_LINUX_DEFAULT=»quiet rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0 plymouth.enable=0 lpj=12053560″
Разберем подробнее за что отвечает каждый параметр:
Чтобы узнать значение последнего параметра выполните:
Нас будет интересовать значение lpj=, укажите его в своем конфигурационном файле.
Также для указания корневого раздела желательно не использовать всякие там UUID, быстрее будет если написать прямо. Для того чтобы конфигуратор grub не использовал grub добавьте в тот же файл строчку:
Сохраните файл и обновим конфигурацию grub:
Проверяем, действительно ли установлены нужные опции:
Да, все правильно, перезагружаем компьютер, и смотрим что вышло:
Почти на одну секунду быстрее, и то хорошо. Возможно, у вас эффект будет намного лучше. Теперь идем разбираться с сервисами.
Настройка системы
Во-первых SELinux отключен не полностью. Для полного отключения добавляем строку в файл /etc/selinux/config:
sudo vi /etc/selinux/config
Во-вторых, проверка файловых систем тоже может занять некоторое время. Оставляем проверку на ошибки только для корня. Для этого откройте файл /etc/fstab и приведите строчку для корня к такому виду:
/dev/sda3 / ext4 defaults 1 1
/dev/sda1 /boot ext4 noauto,comment=systemd.automount 1 0
Затем давайте перенесем папку /tmp в оперативную память, чтобы уменьшить количество операций на жестком диске:
tmpfs /tmp tmpfs defaults 0 0
Ускорение загрузки Linux отключением сервисов
Вот мы и добрались к сервисам. Оптимизация сервисов заключается в том, чтобы отключить лишнее, а также использовать только возможности, встроенные в systemd, так будет быстрее. Сначала перенесем всю функциональность на systemd.
Первым отключим rsyslog. В systemd используется свой механизм записи логов journald, поэтому вести еще один не нужно. Для отключения выполните:
sudo systemctl disable rsyslog
$ sudo systemctl mask rsyslog
Опция mask позволяет спрятать юнит, система будет думать что его не существует и не сможет загрузить. Восстановить такой юнит можно командой systemctl unmask.
Отключаем NetworkManager и включаем networkd:
sudo systemctl disable NetworkManager
sudo systemctl enable systemd-networkd
Службу networking тоже можно отключить, если не используете:
sudo systemctl disable networking
Включаем resolved, который отвечает за настройку DNS серверов:
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved
Даем символическую ссылку на файл /etc/resolv.conf
Осталось настроить динамическое получение ip адреса при загрузке:
sudo vi /etc/systemd/network/20-dhcp.network
[Match]
Name=enp*
[Network]
DHCP=yes
enp0* значит, что сеть нужно подымать только для устройств, имена которых начинаются на enp0. Готово, сеть настроена.
В systemd есть свое решение для выполнения задач по расписанию, поэтому cron можно не использовать:
sudo systemctl disable cron
С заменой разобрались, перейдем к удалению лишнего. Отключаем фаервол, на домашней машине, за маршрутизатором он не нужен:
sudo systemctl disable ufw
$ sudo systemctl mask ufw
Отключаем apport (служба отчетов об ошибках):
sudo systemctl disable apport
Я не использую ppp и мобильные соединения, поэтому и эти сервисы можно отключить.
sudo systemctl disable pppd-dns
sudo systemctl mask pppd-dns
sudo systemctl disable ModemManager
sudo systemctl mask ModemManager
Если вы не используете Avahi, его тоже можно отключить:
sudo systemctl disable avahi-daemon
Систему AppArmor тоже можно отключить:
sudo systemctl disable apparmor
Также если у вас загружаются такие программы, как postfix (почтовый сервер), apache (веб-сервер), mysql (сервер баз данных) лучше их тоже убрать из автозагрузки и запускать потом вручную.
Перезагружаемся и проверяем скорость загрузки:
Выводы
Вот и все, в этой статье мы рассмотрели как ускорить загрузку Linux. Если у вас долго грузится Linux вы уже знаете что нужно делать. Если вы знаете другие способы ускорить загрузку Linux, напишите в комментариях!
Linux служба ‘NetworkManagerDispatcher’ | Как поддерживать активное сетевое соеднинение
Демон NetworkManager пытается постоянно поддерживать активное сетевое соединение.
Средство NetworkManager предлагает инструмент NetworkManagerDispatcher, который выполняет команды в /etc/NetworkManager/dispatcher.d в соответствии с изменением состояния сетевых интерфейсов.
Все скрипты в этом каталоге вызываются для каждого изменения состояния любого сетевого интерфейса; скрипты должны решить, следует ли обрабатывать событие.
Для выполнения событий изменения состояния сети, на которые отвечает NetworkManagerDispatcher, должен работать NetworkManager.
Управление сервисом
Чтобы установить службу NetworkManagerDispatcher, установите пакет RPM NetworkManager:
Чтобы управлять службой NetworkManagerDispatcher при последующих выключениях и перезагрузках, используйте инструмент chkconfig:
Для немедленного управления службой NetworkManagerDispatcher используйте инструмент service:
Запустить этот демон:
Настройка
Ниже приведен пример скрипта, поставляемого с пакетом NetworkManager, расположенным в каталоге /etc/NetworkManager/dispatcher.d.
Заметка
Объект NetworkManager был разработан, чтобы облегчить пользователям мобильной сети, таким как пользователи ноутбуков, при переходе от одного беспроводного «hotspot» к другому. Системным администраторам следует внимательно рассмотреть вопрос о возможности включения средства NetworkManager на серверах, подключенных к фиксированной сети.
Настройка systemd-networkd на виртуальных серверах Ubuntu
systemd-networkd – это системный демон, который управляет сетевыми настройками. По мере появления он обнаруживает и настраивает сетевые устройства, также может создавать виртуальные сетевые устройства. Эта служба может быть особенно полезной для установки сложных сетевых настроек, для контейнера управляемым Systemd-nspawn или для виртуальных машин. А также отлично работает на простом соединении.
Systemd полностью поддерживается в Ubuntu 15.04 и старше.
Запуск systemd-networkd
Чтобы использовать, запустите следующие две службы и включите их работу при загрузке системы (отключив при этом другие демоны, управляющие конфигурацией сети, например netplan):
Конфигурирование
Конфигурационные файлы systemd-networkd находятся в директории /etc/systemd/network. Доступны следующие типы файлов:
Все они следуют тем же правилам:
[Match] раздел
Наиболее распространенные ключи:
[Network] раздел
Наиболее распространенные ключи:
[Address] раздел
Большинство общих ключ в разделе [Address]:
[Route] раздел
Большинство общих ключ в разделе [Route]:
Конфигурация для примера: два интерфейса со статическим IP в LAN и WAN.
Необходимо создать 4 файла в директории /etc/systemd/network/
Вот и всё: конфигурация сети завершена. Теперь можно перезапустить сервис:
В данном примере конфигурируем DHCP IPv4
Подключение типа «Мост»
Cоздает конфигурацию виртуального интерфейса:
Как выполнить пост-up скрипты с помощью netplan
Мой ник падает в сценариях с высокой пропускной способностью, если только разгрузка TSO не отключена.
Это I217-LM (драйвер e1000e).
Я делал это в интерфейсах:
Как мне сделать это с netplan на Ubuntu 18.04?
В настоящее время не поддерживается, конечно. Теперь у разработчиков Linux есть привычка менять что-то, что работает без всякой причины, и предоставлять незавершенный продукт.
Не уверен, что эта ссылка изменилась с момента публикации Bibelo, но, как говорится, netplan теперь поддерживает запуск сценариев с помощью хуков, в зависимости от вашего рендера.
Если вы используете рендер по умолчанию для networkd, вам нужно добавить пакет networkd-dispatcher. https://gitlab.com/craftyguy/networkd-dispatcher
Исходя из того, что вы пытаетесь сделать, я, вероятно, поместил бы скрипт в каталоги carrier.d и / или routable.d. На этой странице было лучшее описание того, для чего нужны разные каталоги состояний.
Посмотрите это для примера того, как я использовал networkd-dispatcher для другой цели. https://fixingitpro.com/2018/12/28/displaying-ip-info-on-console-with-netplan/
Я создал небольшой скрипт /etc/networkd-dispatcher/routable.d/50-ifup-hooks
Он запускается при каждой перезагрузке после запуска сетевых интерфейсов.
пример
Мой хук post-up необходим для поддержки маршрутизации источника, так как у меня есть две сетевые карты: