Linuxoid.in: заметка по подъему новых domU на сервере
Материал из Linux Wiki
Версия от 17:32, 16 марта 2013; Rain (обсуждение | вклад)
- Так как в конфиге xen-tools уже описаны основные параметры системы, в большинстве случаев для создания нового сервера достаточно команды
xen-create-image --hostname=mytesthostname
где mytesthostname - имя создаваемой машины
- После создания переходим к правке созданного конфига машины - /etc/xen/mytesthostname.cfg, добавляем туда
# Полный проход ядерного memtest'а extra = 'memtest=17' # Правим бридж, к которому должна подключаться машина vif = [ 'mac=00:16:3E:0F:3D:FB,bridge=br0' ]
- При необходимости создаем симлинк для автозапуска домена:
ln -s /etc/xen/mytesthostname.cfg /etc/xen/auto/50_mytesthostname.cfg
- Делаем некоторые правки до запуска домена. Монтируем файловую систему, делаем туда chroot и ставим пакеты reiserfsprogs, ethtool и mingetty (возможно, потребуется указание локального адреса веб-сервера в /etc/hosts):
mkdir -p /tmp/dir mount /dev/cvg/mytesthostname-root.disk dir chroot dir apt-get install reiserfsprogs mingetty ethtool vim
- Не выходя из чрута, правим /etc/inittab. Это даст нам возможность логиниться в домены из нулевой ноды:
1:12345:respawn:/sbin/mingetty --noclear --noissue --nonewline --nohostname --autologin root hvc0 #1:2345:respawn:/sbin/getty 38400 hvc0
- Правим /etc/network/interfaces, задавая там необходимый адрес для eth0:
# The primary network interface auto eth0 iface eth0 inet static post-up ethtool -K eth0 tx off address 192.168.220.1 network 192.168.220.0 netmask 255.255.255.0 gateway 192.168.220.254 nameserver 192.168.0.250 nameserver 8.8.8.8
- Выходим из чрута, отмонтируем файловую систему
exit umount dir rm -rf dir
- Система готова к первому запуску. Запускаем:
xm create /etc/xen/mytesthostname.cfg
- Подключаемся к консоли запущенного домена:
xm console mytesthostname
- Проверяем, что есть сеть, правим /etc/apt/sources.list, добавляя репозитории с http://mirrors.linuxoid.in/debian.html
- Ставим при необходимости пакеты для мониторинга, контроля процессов и прочие пакеты первой необходимости:
apt-get install munin-node nagios-plugins-basic ssh monit nullmailer ntp
- Конфигурим nullmailer, пишем адреса смарт-хоста, адрес для локальных писем и локальное почтовое имя
dpkg-reconfigure nullmailer
- Проверяем работу nullmailer'а:
echo test | sendmail root
- Для Nagios создаем пользователя, если планируется контролировать загруженность системы, памяти, дисков и так далее:
useradd -rml nagios mkdir -m 700 /home/nagios/.ssh
- Копируем публичный ключ в /home/nagios/.ssh/authorized_keys, правим владельца и права на ключ
- Делаем симлинк /usr/lib64 -> /usr/lib при необходимости
- Создаем скрипт /usr/lib64/nagios/plugins/check_memory.sh, взятый отсюда; правим права на скрипт - 755
- Правим /etc/hosts.allow - разрешаем доступ только для сервера статистики (пока):
sshd: 192.168.220.247/32
- Правим /etc/hosts.deny:
sshd: ALL
- Создаем /etc/cron.allow - разрешаем кронтабы только для рута (пока):
> /etc/cron.allow chmod 644 /etc/cron.allow
- Правим конфиг /etc/ssh/sshd_config
PermitRootLogin no PasswordAuthentication no AllowUsers nagios AllowTcpForwarding no X11Forwarding no
- Делаем тестовый заход с сервера статистики под юзером nagios на созданный хост по ssh для добавления его в known_hosts.
- Создаем на сервере статистики конфиг для Nagios'а в /etc/nagios3/hosts/ по аналогии с остальными. Проверяем права. Перезапускаем Nagios.
- В /etc/munin/munin-node.conf добавляем
cidr_allow 192.168.220.247/32
- Добавляем/удаляем плагины в /etc/munin/plugins/
- Перезапускаем munin-node
- На сервере статистики делаем описание ноды в /etc/munin/munin.conf
- Правим конфиг monit, указываем таймауты для запуска, почтовые сервера (как фоллбэк можно использовать nullmailer на локалхосте) и root@localhost в качестве адреса доставки
- Создаем джентльменский набор субконфигов monit'а в /etc/monit/conf.d/:
# cat crond.rc check process crond with pidfile '/var/run/crond.pid' start program = "/etc/init.d/cron start" stop program = "/etc/init.d/cron stop" if 3 restarts within 10 cycles then timeout # cat munin-node.rc check process munin-node with pidfile '/var/run/munin/munin-node.pid' start program = "/etc/init.d/munin-node start" stop program = "/etc/init.d/munin-node stop" if 3 restarts within 10 cycles then timeout # cat rsyslogd.rc check process rsyslogd with pidfile '/var/run/rsyslogd.pid' start program = "/etc/init.d/rsyslog start" stop program = "/etc/init.d/rsyslog stop" if 3 restarts within 10 cycles then timeout # cat sshd.rc check process sshd with pidfile '/var/run/sshd.pid' start program = "/etc/init.d/ssh start" stop program = "/etc/init.d/ssh stop" if 3 restarts within 10 cycles then timeout
- Перезапускаем monit, убеждаемся, что пришло уведомление о запуске на почту.
- Делаем ограничения в ФС по этому руководству. После правок fstab и apt.conf можно выполнить mount -a, после чего посмотреть mount
- Создаем файл /etc/cron.d/apt-get-update, время ставим рандомное:
0 0 * * * root apt-get update > /dev/null 2>&1
- Создаем скрипт /root/bin/checkupdates.sh, делаем его исполняемым. Содержимое:
#!/bin/bash
[ -e '/etc/mailname' ] && f="root@$(cat /etc/mailname)" || f="root@$(hostname -f)"
t='root@localhost'
data="$(echo n | LANG=C apt-get dist-upgrade 2>/dev/null | sed -n "/^The following packages/,/^Need to get/s/^/$HOSTNAME: | /p")"
[ ! -z "${data}" ] && echo -en "to:$t\nsubject:New updates available\n\n${data}" | /usr/sbin/sendmail -F "$f" "$t"
- Добавляем его в crontab рута:
crontab -l # check updates 0 1 * * * /root/bin/checkupdates.sh
- Перезапускаем машину, убеждаемся, что все работает