Управление SCI сервисами » История » Версия 14
Версия 13 (Владимир Ипатов, 27.06.2014 17:15) → Версия 14/16 (Владимир Ипатов, 27.06.2014 17:16)
{{toc}}
h1. Управление SCI сервисами
h2. PUPPET
"Puppet":http://www.puppetlabs.com - это платформа для автоматизации системного администрирования большого количества компьютеров.
Puppet позволяет легко автоматизировать задачи по настройке операционных систем и используется для настройки узлов и виртуальных машин в кластере.
Документация можно найти здесь: http://docs.puppetlabs.com/
Управляющий сервер - "Puppet master" установлен на сервисной виртуальной машине 'sci'.
В комплекте поставки есть следующие модули:
* Общая настройка сервера (common) - установка полезных пакетов и удобных умолчаний
* locale (locale)
* timezone (timezone)
* Approx (approx) - прокси для пакетов обновления Debian
* DNS (bind9) - запуск в chroot и пред-настройка для обслуживания кластера
* DHCP (dhcpd) - пред-настройка для кластера и DDNS
* Почта (exim4) - настройка доставки локальной почты
h3. Конфигурация хостов
Конфигурация для хостов задается в файле /etc/puppet/manifests/nodes.pp:
<pre>
node 'default' {
class { sources_list_local: stage => pre0, }
class { common_profile: stage => pre1, }
class { timezone: zone => "Europe/Moscow", stage => main, }
class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
}
node 'sci' {
class { approx_local: stage => pre0, }
class { sources_list_local: stage => pre0, }
class { common_profile: stage => pre1, }
class { bind9_sci: stage => main, }
class { timezone: zone => "Europe/Moscow", stage => main, }
class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
class { dhcpd: enabled => no, stage => post1, }
}
</pre>
Если Вы не указали хост в файле, то к нему применяются настройки default.
h3. Обновление рецептов
Настройка большинства сервисов SkyCover Infrastructure производится при помощи рецептов puppet.
В вашей системе эти рецепты находятся в каталоге /etc/puppet/modules
Вы можете получать обновления каталога рецептов из официального репозтория https://github.com/skycover/sci-puppet при помощи следующей процедуры:
*Запишите изменения в своем каталоге рецептов (если вы их вносили)*
<pre>
cd /etc/puppet
git status # показать список изменений, которые вы сделали
git diff --color # показать различия в виде diff
git commit -am"Latest changes" # записать изменения
git push
</pre>
*Проверьте наличие обновлений*
<pre>
cd /root/puppet
git checkout master
git pull
</pre>
Если последняя команда вывела список изменившихся файлов, то можно проанализировать изменения:
<pre>
git log
</pre>
Затем посмотреть различия с вашей локальной версией
<pre>
git checkout local
git diff master
</pre>
*Добавьте изменения в локальную версию*
<pre>
git merge master
</pre>
или
<pre>
git cherry-pick HASHSUM
</pre>
Все эти манипуляции не затрагивают ваш действующий каталог рецептов и могут быть отменены
*Перенесите обновление в действующий каталог рецептов*
<pre>
cd /etc/puppet
git pull
</pre>
Для более подробной информации рекомендуем познакомиться с git. Начните от сюда: [[МАГИЯ GIT]]
h2. Apt
Apt автоматически настраивается во всем кластере средствами puppet
h3. sources.list
Шаблон для sources.list находится в @/etc/puppet/modules/approx/templates/sources.list.erb@ и настроен для работы через approx.
h3. Approx
Шаблон конфига Approx находится @/etc/puppet/modules/approx/templates/approx.conf.erb@
Для быстрого применения изменений выполните:
<pre>
/etc/init.d/puppet restart
</pre>
h2. DNS
DNS автоматически устанавливается на машине 'sci'.
Прямая зона лежит в файле @/etc/bind/master/$domain@
Обратная зона (192.168.0.0/16) лежит в файле @/etc/bind/master/in-addr@
Если требуется держать обратную зону для другого диапазона ip, то следует сначала поправить @/etc/bind9/named.conf.local@,
а уже затем поправить содержимое зоны. Пример конфига в named.conf.local для зоны 10.0.0.0/8:
<pre>
zone 10.in-addr.arpa in {
type master;
file "/etc/bind/master/in-addr";
allow-query { any; };
allow-update{ key DHCP_UPDATE; };
};
</pre>
При каждом ручном изменении зоны Вы должны увеличивать счетчик в начале файла:
<pre>
0000000001 ; Serial
</pre>
Рекомендуется формат YYYYMMDDNN (NN порядковый номер изменения за этот день).
Вы можете изменять этот файл как угодно для того, чтобы он подходил к Вашей системе.
Новые записи должны идти после:
<pre>
; here you can put any other records
</pre>
Чтобы применить изменения, следует:
<pre>
/etc/init.d/bind9 reload
</pre>
*ПРИМЕЧАНИЕ*: Если Вы используете динамические апдейты зоны(например, от dhcp сервера),
до ручного изменения файла следует "заморозить" зону:
<pre>rndc freeze your.domain</pre>
для прямой зоны
<pre>rndc freeze 168.192.in-addr.arpa</pre>
для обратной зоны
а после изменения файла следует "разморозить" зону:
<pre>rndc unfreeze your.domain</pre>
или
<pre>rndc unfreeze 168.192.in-addr.arpa</pre>
h2. DHCP
isc-dhcp-server настроен на машине sci, но отключен по умолчанию.
Если Вы хотите его включить, Вам следует сменить строчку в nodes.pp:
<pre>
class { dhcpd: enabled => no, stage => post1, }
</pre>
на:
<pre>
class { dhcpd: enabled => yes, stage => post1, }
</pre>
Если у Вас есть отдельный lan сегмент, то dhcp настраивается на него, если нет - на основной сегмент.
Дефолтный конфиг выглядит наподобие этого:
<pre>
ddns-update-style interim;
ddns-updates on;
allow-unknown-clients;
autoritative;
ddns-domainname "your.domain";
update-static-leases on;
allow client-updates;
key DHCP_UPDATE {
algorithm HMAC-MD5;
secret secret-generated-md5;
};
subnet 192.168.5.0 netmask 255.255.255.0 {
authoritative;
ddns-updates on;
range 192.168.5.11 192.168.5.254;
option routers 192.168.5.35;
option domain-name-servers 192.168.5.35;
option domain-name "your.domain";
default-lease-time 604800;
max-lease-time 2592000;
}
zone your.domain. {
primary 127.0.0.1;
key DHCP_UPDATE;
}
zone 168.192.in-addr.arpa. {
primary 127.0.0.1;
key DHCP_UPDATE;
}
</pre>
h2. Локаль
Локаль в кластере настраивается с помощью puppet. По умолчанию она - ru_RU.UTF-8.
При создании машины sci локаль берется из sci.conf(переменная LOCALE) и вносится в nodes.pp.
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
<pre>class { locale: def_locale => "ru_RU.cp1251", stage => main, }</pre>
h2. Часовой пояс
Настраивается через puppet модулем timezone. По умолчанию - Europe/Moscow.
При создании машины sci часовой пояс берется из sci.conf(переменная TIMEZONE) и вносится в nodes.pp.
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
<pre>class { timezone: zone => "Europe/Berlin", stage => main, }</pre>
h2. Системная почта
Реализовано два подхода к доставке системной почты:
1) Вся почта поступает на одну машину (sci по умолчанию) в локальный почтовый ящик указанного пользователя
2) Все почта поступает на сторонний почтовый ящик. Это более удобный подход, но для него требуется смартхост, который может доставлять почту через интернет, поэтому по умолчанию используется первый подход.
Этот модуль конфигурируется аргументами из nodes.pp. Для первой схемы он выглядит так:
<pre>
node 'default' {
...........
class { exim4: smarthost => "default", forward_to => 'admin', stage => main, }
}
node 'sci' {
...........
class { exim4: mailhub => yes, forward_to => 'admin', stage => main, }
}
</pre>
Вся почта приходит пользователю admin (по умолчанию root) на машину sci.
А вот пример для внешнего ящика:
<pre>
node 'default' {
...........
class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
}
node 'sci' {
...........
class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
}
</pre>
h2. h3. Web сервер
для применения модуля в nodes.pp нужно добавить:
<pre>
node 'web' inretits default {
class { web: stage => main, }
}
</pre>
Где web - хостнейм веб сервера.
Затем дать команду service puppetmaster reload
Данный модуль поставит nginx, php-fpm, mysql, а также скрипт для быстрого добавления сайтов add-site.
<pre>
# add-site
usage: /usr/local/sbin/add-site user [sitename]
/usr/local/sbin/add-site user creates user and home dirs if not exist
/usr/local/sbin/add-site user sitename creates user if not exist and create
/home/$user/www/$sitename directory
creates /etc/nginx/sites-available/$sitename and
/etc/php5/pfm/pool.d/$sitename.conf from templates
creates mysqlbase $sitename and mysql user $sitename
grant all privileges to new user on new base
generate password for new user and echo it on console
</pre>
Для начала нужно создать окружение пользователя:
<pre>
add-site user01
</pre>
создает системного пользователя, генерирует ему пароль, чтобы под ним можно было заходить по ssh.
Также он создает ~/www - там будут лежать директориями с сайтами пользователя и ~/logs - там будут лежать логи этих сайтов.
Затем нужно создать сайт:
<pre>
add-site user01 example.com
</pre>
Эта команда создаст директорию /home/user01/www/example.com, конфиг vhost для nginx, конфиг vhost для php-fpm
Шаблоны для конфигов лежат в /etc/add-site, их можно менять.
Затем скрипт создаст mysql базу example.com и пользователя mysql example.com.
Пользователю назначит права на базу, сгенерирует пароль и выведет его на экран.
Все, что останется сделать руками - залить от имени пользователя по ssh файлы сайта в ~/www/example.com
Задать параметры подключения к mysql в конфиге сайта, выполнить активацию нового вхоста:
<pre>
nginx_ensite example.com
service php5-fpm reload
</pre>
Ну и настроить днс для домена example.com
h1. Управление SCI сервисами
h2. PUPPET
"Puppet":http://www.puppetlabs.com - это платформа для автоматизации системного администрирования большого количества компьютеров.
Puppet позволяет легко автоматизировать задачи по настройке операционных систем и используется для настройки узлов и виртуальных машин в кластере.
Документация можно найти здесь: http://docs.puppetlabs.com/
Управляющий сервер - "Puppet master" установлен на сервисной виртуальной машине 'sci'.
В комплекте поставки есть следующие модули:
* Общая настройка сервера (common) - установка полезных пакетов и удобных умолчаний
* locale (locale)
* timezone (timezone)
* Approx (approx) - прокси для пакетов обновления Debian
* DNS (bind9) - запуск в chroot и пред-настройка для обслуживания кластера
* DHCP (dhcpd) - пред-настройка для кластера и DDNS
* Почта (exim4) - настройка доставки локальной почты
h3. Конфигурация хостов
Конфигурация для хостов задается в файле /etc/puppet/manifests/nodes.pp:
<pre>
node 'default' {
class { sources_list_local: stage => pre0, }
class { common_profile: stage => pre1, }
class { timezone: zone => "Europe/Moscow", stage => main, }
class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
}
node 'sci' {
class { approx_local: stage => pre0, }
class { sources_list_local: stage => pre0, }
class { common_profile: stage => pre1, }
class { bind9_sci: stage => main, }
class { timezone: zone => "Europe/Moscow", stage => main, }
class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
class { dhcpd: enabled => no, stage => post1, }
}
</pre>
Если Вы не указали хост в файле, то к нему применяются настройки default.
h3. Обновление рецептов
Настройка большинства сервисов SkyCover Infrastructure производится при помощи рецептов puppet.
В вашей системе эти рецепты находятся в каталоге /etc/puppet/modules
Вы можете получать обновления каталога рецептов из официального репозтория https://github.com/skycover/sci-puppet при помощи следующей процедуры:
*Запишите изменения в своем каталоге рецептов (если вы их вносили)*
<pre>
cd /etc/puppet
git status # показать список изменений, которые вы сделали
git diff --color # показать различия в виде diff
git commit -am"Latest changes" # записать изменения
git push
</pre>
*Проверьте наличие обновлений*
<pre>
cd /root/puppet
git checkout master
git pull
</pre>
Если последняя команда вывела список изменившихся файлов, то можно проанализировать изменения:
<pre>
git log
</pre>
Затем посмотреть различия с вашей локальной версией
<pre>
git checkout local
git diff master
</pre>
*Добавьте изменения в локальную версию*
<pre>
git merge master
</pre>
или
<pre>
git cherry-pick HASHSUM
</pre>
Все эти манипуляции не затрагивают ваш действующий каталог рецептов и могут быть отменены
*Перенесите обновление в действующий каталог рецептов*
<pre>
cd /etc/puppet
git pull
</pre>
Для более подробной информации рекомендуем познакомиться с git. Начните от сюда: [[МАГИЯ GIT]]
h2. Apt
Apt автоматически настраивается во всем кластере средствами puppet
h3. sources.list
Шаблон для sources.list находится в @/etc/puppet/modules/approx/templates/sources.list.erb@ и настроен для работы через approx.
h3. Approx
Шаблон конфига Approx находится @/etc/puppet/modules/approx/templates/approx.conf.erb@
Для быстрого применения изменений выполните:
<pre>
/etc/init.d/puppet restart
</pre>
h2. DNS
DNS автоматически устанавливается на машине 'sci'.
Прямая зона лежит в файле @/etc/bind/master/$domain@
Обратная зона (192.168.0.0/16) лежит в файле @/etc/bind/master/in-addr@
Если требуется держать обратную зону для другого диапазона ip, то следует сначала поправить @/etc/bind9/named.conf.local@,
а уже затем поправить содержимое зоны. Пример конфига в named.conf.local для зоны 10.0.0.0/8:
<pre>
zone 10.in-addr.arpa in {
type master;
file "/etc/bind/master/in-addr";
allow-query { any; };
allow-update{ key DHCP_UPDATE; };
};
</pre>
При каждом ручном изменении зоны Вы должны увеличивать счетчик в начале файла:
<pre>
0000000001 ; Serial
</pre>
Рекомендуется формат YYYYMMDDNN (NN порядковый номер изменения за этот день).
Вы можете изменять этот файл как угодно для того, чтобы он подходил к Вашей системе.
Новые записи должны идти после:
<pre>
; here you can put any other records
</pre>
Чтобы применить изменения, следует:
<pre>
/etc/init.d/bind9 reload
</pre>
*ПРИМЕЧАНИЕ*: Если Вы используете динамические апдейты зоны(например, от dhcp сервера),
до ручного изменения файла следует "заморозить" зону:
<pre>rndc freeze your.domain</pre>
для прямой зоны
<pre>rndc freeze 168.192.in-addr.arpa</pre>
для обратной зоны
а после изменения файла следует "разморозить" зону:
<pre>rndc unfreeze your.domain</pre>
или
<pre>rndc unfreeze 168.192.in-addr.arpa</pre>
h2. DHCP
isc-dhcp-server настроен на машине sci, но отключен по умолчанию.
Если Вы хотите его включить, Вам следует сменить строчку в nodes.pp:
<pre>
class { dhcpd: enabled => no, stage => post1, }
</pre>
на:
<pre>
class { dhcpd: enabled => yes, stage => post1, }
</pre>
Если у Вас есть отдельный lan сегмент, то dhcp настраивается на него, если нет - на основной сегмент.
Дефолтный конфиг выглядит наподобие этого:
<pre>
ddns-update-style interim;
ddns-updates on;
allow-unknown-clients;
autoritative;
ddns-domainname "your.domain";
update-static-leases on;
allow client-updates;
key DHCP_UPDATE {
algorithm HMAC-MD5;
secret secret-generated-md5;
};
subnet 192.168.5.0 netmask 255.255.255.0 {
authoritative;
ddns-updates on;
range 192.168.5.11 192.168.5.254;
option routers 192.168.5.35;
option domain-name-servers 192.168.5.35;
option domain-name "your.domain";
default-lease-time 604800;
max-lease-time 2592000;
}
zone your.domain. {
primary 127.0.0.1;
key DHCP_UPDATE;
}
zone 168.192.in-addr.arpa. {
primary 127.0.0.1;
key DHCP_UPDATE;
}
</pre>
h2. Локаль
Локаль в кластере настраивается с помощью puppet. По умолчанию она - ru_RU.UTF-8.
При создании машины sci локаль берется из sci.conf(переменная LOCALE) и вносится в nodes.pp.
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
<pre>class { locale: def_locale => "ru_RU.cp1251", stage => main, }</pre>
h2. Часовой пояс
Настраивается через puppet модулем timezone. По умолчанию - Europe/Moscow.
При создании машины sci часовой пояс берется из sci.conf(переменная TIMEZONE) и вносится в nodes.pp.
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
<pre>class { timezone: zone => "Europe/Berlin", stage => main, }</pre>
h2. Системная почта
Реализовано два подхода к доставке системной почты:
1) Вся почта поступает на одну машину (sci по умолчанию) в локальный почтовый ящик указанного пользователя
2) Все почта поступает на сторонний почтовый ящик. Это более удобный подход, но для него требуется смартхост, который может доставлять почту через интернет, поэтому по умолчанию используется первый подход.
Этот модуль конфигурируется аргументами из nodes.pp. Для первой схемы он выглядит так:
<pre>
node 'default' {
...........
class { exim4: smarthost => "default", forward_to => 'admin', stage => main, }
}
node 'sci' {
...........
class { exim4: mailhub => yes, forward_to => 'admin', stage => main, }
}
</pre>
Вся почта приходит пользователю admin (по умолчанию root) на машину sci.
А вот пример для внешнего ящика:
<pre>
node 'default' {
...........
class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
}
node 'sci' {
...........
class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
}
</pre>
h2. h3. Web сервер
для применения модуля в nodes.pp нужно добавить:
<pre>
node 'web' inretits default {
class { web: stage => main, }
}
</pre>
Где web - хостнейм веб сервера.
Затем дать команду service puppetmaster reload
Данный модуль поставит nginx, php-fpm, mysql, а также скрипт для быстрого добавления сайтов add-site.
<pre>
# add-site
usage: /usr/local/sbin/add-site user [sitename]
/usr/local/sbin/add-site user creates user and home dirs if not exist
/usr/local/sbin/add-site user sitename creates user if not exist and create
/home/$user/www/$sitename directory
creates /etc/nginx/sites-available/$sitename and
/etc/php5/pfm/pool.d/$sitename.conf from templates
creates mysqlbase $sitename and mysql user $sitename
grant all privileges to new user on new base
generate password for new user and echo it on console
</pre>
Для начала нужно создать окружение пользователя:
<pre>
add-site user01
</pre>
создает системного пользователя, генерирует ему пароль, чтобы под ним можно было заходить по ssh.
Также он создает ~/www - там будут лежать директориями с сайтами пользователя и ~/logs - там будут лежать логи этих сайтов.
Затем нужно создать сайт:
<pre>
add-site user01 example.com
</pre>
Эта команда создаст директорию /home/user01/www/example.com, конфиг vhost для nginx, конфиг vhost для php-fpm
Шаблоны для конфигов лежат в /etc/add-site, их можно менять.
Затем скрипт создаст mysql базу example.com и пользователя mysql example.com.
Пользователю назначит права на базу, сгенерирует пароль и выведет его на экран.
Все, что останется сделать руками - залить от имени пользователя по ssh файлы сайта в ~/www/example.com
Задать параметры подключения к mysql в конфиге сайта, выполнить активацию нового вхоста:
<pre>
nginx_ensite example.com
service php5-fpm reload
</pre>
Ну и настроить днс для домена example.com