Linuxoid.in: заметка по подъему новых domU на сервере

Материал из Linux Wiki
Версия от 17:03, 16 марта 2013; Rain (обсуждение | вклад) (Новая страница: «* Так как в конфиге xen-tools уже описаны основные параметры системы, в большинстве случаев д…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
  • Так как в конфиге 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
  • Ставим при необходимости пакеты для мониторинга, контроля процессов и прочие пакеты первой необходимости:
apt-get install munin-node nagios-plugins-basic ssh monit nullmailer
  • Конфигурим 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
  • Перезапускаем машину, убеждаемся, что все работает