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

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
(Новая страница: «* Так как в конфиге xen-tools уже описаны основные параметры системы, в большинстве случаев д…»)
 
м
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
* Так как в конфиге xen-tools уже описаны основные параметры системы, в большинстве случаев для создания нового сервера достаточно команды
* Так как в конфиге '''xen-tools''' уже описаны основные параметры системы, в большинстве случаев для создания нового сервера достаточно команды
  xen-create-image --hostname=mytesthostname
  xen-create-image --hostname=mytesthostname
где '''mytesthostname''' - имя создаваемой машины
где '''mytesthostname''' - имя создаваемой машины
* После создания переходим в правке созданного конфига машины - /etc/xen/mytesthostname.cfg, добавляем туда  
* После создания переходим к правке созданного конфига машины - '''/etc/xen/mytesthostname.cfg''', добавляем туда  
  # Полный проход ядерного memtest'а
  # Полный проход ядерного memtest'а
  extra      = 'memtest=17'
  extra      = 'memtest=17'
Строка 9: Строка 9:
* При необходимости создаем симлинк для автозапуска домена:
* При необходимости создаем симлинк для автозапуска домена:
  ln -s /etc/xen/mytesthostname.cfg /etc/xen/auto/50_mytesthostname.cfg  
  ln -s /etc/xen/mytesthostname.cfg /etc/xen/auto/50_mytesthostname.cfg  
* Делаем некоторые правки до запуска домена. Монтируем файловую систему, делаем туда chroot и ставим пакеты reiserfsprogs, ethtool и mingetty (возможно, потребуется указание локального адреса веб-сервера в /etc/hosts):
* Делаем некоторые правки до запуска домена. Монтируем файловую систему, делаем туда chroot и ставим пакеты '''reiserfsprogs, ethtool и mingetty''' (возможно, потребуется указание локального адреса веб-сервера в '''/etc/hosts'''):
  mkdir -p /tmp/dir
  mkdir -p /tmp/dir
  mount /dev/cvg/mytesthostname-root.disk dir
  mount /dev/cvg/mytesthostname-root.disk dir
Строка 15: Строка 15:
  apt-get install reiserfsprogs mingetty ethtool vim
  apt-get install reiserfsprogs mingetty ethtool vim


* Не выходя из чрута, правим /etc/inittab. Это даст нам возможность логиниться в домены из нулевой ноды:
* Не выходя из чрута, правим '''/etc/inittab'''. Это даст нам возможность логиниться в домены из нулевой ноды:


  1:12345:respawn:/sbin/mingetty --noclear --noissue --nonewline --nohostname --autologin root hvc0
  1:12345:respawn:/sbin/mingetty --noclear --noissue --nonewline --nohostname --autologin root hvc0
  #1:2345:respawn:/sbin/getty 38400 hvc0
  #1:2345:respawn:/sbin/getty 38400 hvc0


* Правим /etc/network/interfaces, задавая там необходимый адрес для eth0:
* Правим '''/etc/network/interfaces''', задавая там необходимый адрес для '''eth0''':


  # The primary network interface
  # The primary network interface
Строка 44: Строка 44:
  xm console mytesthostname
  xm console mytesthostname


* Проверяем, что есть сеть, правим /etc/apt/sources.list, добавляя репозитории с http://mirrors.linuxoid.in/debian.html
* Проверяем, что есть сеть, правим '''/etc/apt/sources.list''', добавляя репозитории с http://mirrors.linuxoid.in/debian.html


* Ставим при необходимости пакеты для мониторинга, контроля процессов и прочие пакеты первой необходимости:
* Ставим при необходимости пакеты для мониторинга, контроля процессов и прочие пакеты первой необходимости:
  apt-get install munin-node nagios-plugins-basic ssh monit nullmailer
  apt-get install munin-node nagios-plugins-basic ssh monit nullmailer ntp


* Конфигурим nullmailer, пишем адреса смарт-хоста, адрес для локальных писем и локальное почтовое имя
* Конфигурим '''nullmailer''', пишем адреса смарт-хоста, адрес для локальных писем и локальное почтовое имя
  dpkg-reconfigure nullmailer
  dpkg-reconfigure nullmailer


Строка 55: Строка 55:
  echo test | sendmail root
  echo test | sendmail root


* Для Nagios создаем пользователя, если планируется контролировать загруженность системы, памяти, дисков и так далее:
* Для '''Nagios''' создаем пользователя, если планируется контролировать загруженность системы, памяти, дисков и так далее:
  useradd -rml nagios
  useradd -rml nagios
  mkdir -m 700 /home/nagios/.ssh
  mkdir -m 700 /home/nagios/.ssh


* Копируем публичный ключ в /home/nagios/.ssh/authorized_keys, правим владельца и права на ключ
* Копируем публичный ключ в '''/home/nagios/.ssh/authorized_keys''', правим владельца и права на ключ
* Делаем симлинк /usr/lib64 -> /usr/lib при необходимости
* Делаем симлинк /usr/lib64 -> /usr/lib при необходимости
* Создаем скрипт '''/usr/lib64/nagios/plugins/check_memory.sh''', взятый [[Nagios|отсюда]]; правим права на скрипт - 755
* Создаем скрипт '''/usr/lib64/nagios/plugins/check_memory.sh''', взятый [[Nagios|отсюда]]; правим права на скрипт - '''755'''
* Правим /etc/hosts.allow - разрешаем доступ только для сервера статистики (пока):
* Правим '''/etc/hosts.allow''' - разрешаем доступ только для сервера статистики (пока):
  sshd: 192.168.220.247/32
  sshd: 192.168.220.247/32


* Правим /etc/hosts.deny:
* Правим '''/etc/hosts.deny''':
  sshd: ALL
  sshd: ALL


* Создаем /etc/cron.allow - разрешаем кронтабы только для рута (пока):
* Создаем '''/etc/cron.allow''' - разрешаем кронтабы только для рута (пока):
  > /etc/cron.allow
  > /etc/cron.allow
  chmod 644 /etc/cron.allow
  chmod 644 /etc/cron.allow


* Правим конфиг /etc/ssh/sshd_config
* Правим конфиг '''/etc/ssh/sshd_config'''
  PermitRootLogin no
  PermitRootLogin no
  PasswordAuthentication no
  PasswordAuthentication no
Строка 79: Строка 79:
  X11Forwarding no
  X11Forwarding no


* Делаем тестовый заход с сервера статистики под юзером nagios на созданный хост по ssh для добавления его в known_hosts.
* Делаем тестовый заход с сервера статистики под юзером '''nagios''' на созданный хост по ssh для добавления его в '''known_hosts'''.
* Создаем на сервере статистики конфиг для Nagios'а в /etc/nagios3/hosts/ по аналогии с остальными. Проверяем права. Перезапускаем Nagios.
* Создаем на сервере статистики конфиг для Nagios'а в '''/etc/nagios3/hosts/''' по аналогии с остальными. Проверяем права. Перезапускаем Nagios.
* В /etc/munin/munin-node.conf добавляем
* В '''/etc/munin/munin-node.conf''' добавляем
  cidr_allow 192.168.220.247/32
  cidr_allow 192.168.220.247/32
* Добавляем/удаляем плагины в /etc/munin/plugins/
* Добавляем/удаляем плагины в '''/etc/munin/plugins/'''
* Перезапускаем munin-node
* Перезапускаем '''munin-node'''
* На сервере статистики делаем описание ноды в /etc/munin/munin.conf
* На сервере статистики делаем описание ноды в '''/etc/munin/munin.conf'''
* Правим конфиг monit, указываем таймауты для запуска, почтовые сервера (как фоллбэк можно использовать nullmailer на локалхосте) и root@localhost в качестве адреса доставки
* Правим конфиг '''monit''', указываем таймауты для запуска, почтовые сервера (как фоллбэк можно использовать '''nullmailer''' на локалхосте) и '''root@localhost''' в качестве адреса доставки
* Создаем джентльменский набор субконфигов monit'а в /etc/monit/conf.d/:
* Создаем джентльменский набор субконфигов monit'а в '''/etc/monit/conf.d/''':
<pre>
<pre>
# cat crond.rc  
# cat crond.rc  
Строка 118: Строка 118:
</pre>
</pre>


* Перезапускаем monit, убеждаемся, что пришло уведомление о запуске на почту.
* Перезапускаем '''monit''', убеждаемся, что пришло уведомление о запуске на почту.
* Делаем ограничения в ФС по [[Ограничиваем файловую систему в Debian|этому руководству]]. После правок fstab и apt.conf можно выполнить mount -a, после чего посмотреть mount
* Делаем ограничения в ФС по [[Ограничиваем файловую систему в Debian|этому руководству]]. После правок '''fstab''' и '''apt.conf''' можно выполнить '''mount -a''', после чего посмотреть '''mount'''
* Создаем файл /etc/cron.d/apt-get-update, время ставим рандомное:
* Создаем файл '''/etc/cron.d/apt-get-update''', время ставим рандомное:
  0      0      *      *      *      root    apt-get update > /dev/null 2>&1
  0      0      *      *      *      root    apt-get update > /dev/null 2>&1
* Создаем скрипт /root/bin/checkupdates.sh, делаем его исполняемым. Содержимое:
* Создаем скрипт '''/root/bin/checkupdates.sh''', делаем его исполняемым. Содержимое:
----
----
<source lang=bash>
<source lang=bash>
Строка 135: Строка 135:
</source>
</source>
----
----
* Добавляем его в crontab рута:
* Добавляем его в '''crontab''' рута:
  crontab -l
  crontab -l
  # check updates
  # check updates

Текущая версия на 17:32, 16 марта 2013

  • Так как в конфиге 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 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
  • Перезапускаем машину, убеждаемся, что все работает