Проект

Общее

Профиль

Управление SCI сервисами » История » Версия 5

Владимир Ипатов, 06.12.2012 16:45

1 1 Владимир Ипатов
{{toc}}
2 2 Владимир Ипатов
3 1 Владимир Ипатов
h1. Управление SCI сервисами
4 1 Владимир Ипатов
5 1 Владимир Ипатов
h2. PUPPET
6 1 Владимир Ипатов
7 4 Dmitry Chernyak
"Puppet":http://www.puppetlabs.com - это платформа для автоматизации системного администрирования большого количества компьютеров.
8 4 Dmitry Chernyak
Puppet позволяет легко автоматизировать задачи по настройке операционных систем и используется для автоматической настройки узлов и виртуальных машин в кластере.
9 3 Владимир Ипатов
Документация можно найти здесь: http://docs.puppetlabs.com/
10 1 Владимир Ипатов
11 4 Dmitry Chernyak
Управляющий сервер - "Puppet master" установлен на сервисной виртуальной машине 'sci'.
12 3 Владимир Ипатов
13 4 Dmitry Chernyak
В комплекте поставки есть следующие модули:
14 4 Dmitry Chernyak
* Общая настройка сервера (common) - установка полезных пакетов и удобных умолчаний
15 4 Dmitry Chernyak
* locale (locale)
16 4 Dmitry Chernyak
* timezone (timezone)
17 4 Dmitry Chernyak
* Approx (approx) - прокси для пакетов обновления Debian
18 4 Dmitry Chernyak
* DNS (bind9) - запуск в chroot и пред-настройка для обслуживания кластера
19 4 Dmitry Chernyak
* DHCP (dhcpd) - пред-настройка для кластера и DDNS
20 1 Владимир Ипатов
21 4 Dmitry Chernyak
Конфигурация для хостов задается в файле /etc/puppet/manifests/nodes.pp:
22 1 Владимир Ипатов
<pre>
23 1 Владимир Ипатов
node 'default' {
24 1 Владимир Ипатов
	class { sources_list_local: stage => pre0, }
25 1 Владимир Ипатов
	class { common_profile: stage => pre1, }
26 1 Владимир Ипатов
	class { timezone: zone => "Europe/Moscow", stage => main, }
27 1 Владимир Ипатов
	class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
28 1 Владимир Ипатов
}
29 1 Владимир Ипатов
30 1 Владимир Ипатов
node 'sci' {
31 1 Владимир Ипатов
	class { approx_local: stage => pre0, }
32 1 Владимир Ипатов
	class { sources_list_local: stage => pre0, }
33 1 Владимир Ипатов
	class { common_profile: stage => pre1, }
34 1 Владимир Ипатов
	class { bind9_sci: stage => main, }
35 1 Владимир Ипатов
	class { timezone: zone => "Europe/Moscow", stage => main, }
36 1 Владимир Ипатов
	class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
37 1 Владимир Ипатов
	class { dhcpd: enabled => no, stage => post1, }
38 1 Владимир Ипатов
}
39 3 Владимир Ипатов
</pre>
40 4 Dmitry Chernyak
Если Вы не указали хост в файле, то к нему применяются настройки default.
41 1 Владимир Ипатов
42 1 Владимир Ипатов
h2. Apt
43 1 Владимир Ипатов
44 4 Dmitry Chernyak
Apt автоматически настраивается во всем кластере средствами puppet
45 1 Владимир Ипатов
46 1 Владимир Ипатов
h3. sources.list
47 1 Владимир Ипатов
48 4 Dmitry Chernyak
Шаблон для sources.list находится в @/etc/puppet/modules/approx/templates/sources.list.erb@ и настроен для работы через approx.
49 1 Владимир Ипатов
50 1 Владимир Ипатов
h3. Approx
51 1 Владимир Ипатов
52 3 Владимир Ипатов
Шаблон конфига Approx находится @/etc/puppet/modules/approx/templates/approx.conf.erb@
53 4 Dmitry Chernyak
Для быстрого применения изменений выполните:
54 1 Владимир Ипатов
<pre>
55 1 Владимир Ипатов
/etc/init.d/puppet restart
56 1 Владимир Ипатов
</pre>
57 1 Владимир Ипатов
58 1 Владимир Ипатов
h2. DNS
59 1 Владимир Ипатов
60 4 Dmitry Chernyak
DNS автоматически устанавливается на машине 'sci'.
61 1 Владимир Ипатов
62 3 Владимир Ипатов
Шаблон прямой зоны находится в @/etc/puppet/modules/bind9/templates/sci/zone.erb@
63 3 Владимир Ипатов
В системе она будет в @/etc/bind/master/$domain@
64 3 Владимир Ипатов
Шаблон обратной зоны находится в @/etc/puppet/modules/bind9/templates/sci/in-addr.erb@
65 3 Владимир Ипатов
В системе она будет в @/etc/bind/master/in-addr@
66 3 Владимир Ипатов
При каждом ручном изменении зоны Вы должны увеличивать счетчик в начале файла:
67 1 Владимир Ипатов
<pre>
68 1 Владимир Ипатов
0000000001 ; Serial
69 1 Владимир Ипатов
</pre>
70 3 Владимир Ипатов
Рекомендуется формат YYYYMMDDNN (NN порядковый номер изменения за этот день).
71 3 Владимир Ипатов
Вы можете изменять этот файл как угодно для того, чтобы он подходил к Вашей системе.
72 1 Владимир Ипатов
73 3 Владимир Ипатов
Новые записи должны идти после:
74 1 Владимир Ипатов
<pre>
75 1 Владимир Ипатов
; here you can put any other records
76 1 Владимир Ипатов
</pre>
77 1 Владимир Ипатов
78 3 Владимир Ипатов
Чтобы применить изменения, следует:
79 1 Владимир Ипатов
<pre>
80 1 Владимир Ипатов
/etc/init.d/bind9 reload
81 1 Владимир Ипатов
</pre>
82 1 Владимир Ипатов
83 3 Владимир Ипатов
*ПРИМЕЧАНИЕ*: Если Вы используете динамические апдейты зоны(например, от dhcp сервера),
84 3 Владимир Ипатов
до ручного изменения файла следует "заморозить" зону:
85 1 Владимир Ипатов
<pre>rndc freeze your.domain</pre>
86 3 Владимир Ипатов
для прямой зоны
87 1 Владимир Ипатов
<pre>rndc freeze 168.192.in-addr.arpa</pre>
88 3 Владимир Ипатов
для обратной зоны
89 3 Владимир Ипатов
а после изменения файла следует "разморозить" зону:
90 1 Владимир Ипатов
<pre>rndc unfreeze your.domain</pre>
91 3 Владимир Ипатов
или
92 1 Владимир Ипатов
<pre>rndc unfreeze 168.192.in-addr.arpa</pre>
93 1 Владимир Ипатов
94 1 Владимир Ипатов
h2. DHCP
95 1 Владимир Ипатов
96 3 Владимир Ипатов
isc-dhcp-server настроен на машине sci, но отключен по умолчанию.
97 3 Владимир Ипатов
Если Вы хотите его включить, Вам следует сменить строчку в nodes.pp:
98 1 Владимир Ипатов
<pre>
99 3 Владимир Ипатов
	class { dhcpd: enabled => no, stage => post1, }
100 3 Владимир Ипатов
</pre>
101 3 Владимир Ипатов
на:
102 3 Владимир Ипатов
<pre>
103 3 Владимир Ипатов
	class { dhcpd: enabled => yes, stage => post1, }
104 3 Владимир Ипатов
</pre>
105 3 Владимир Ипатов
Если у Вас есть отдельный lan сегмент, то dhcp настраивается на него, если нет - на основной сегмент.
106 3 Владимир Ипатов
Дефолтный конфиг выглядит наподобие этого:
107 3 Владимир Ипатов
<pre>
108 1 Владимир Ипатов
ddns-update-style interim;
109 1 Владимир Ипатов
ddns-updates on;
110 1 Владимир Ипатов
allow-unknown-clients;
111 1 Владимир Ипатов
autoritative;
112 1 Владимир Ипатов
ddns-domainname "your.domain";
113 1 Владимир Ипатов
update-static-leases on;
114 1 Владимир Ипатов
allow client-updates;
115 1 Владимир Ипатов
116 1 Владимир Ипатов
key DHCP_UPDATE {
117 1 Владимир Ипатов
	algorithm HMAC-MD5;
118 1 Владимир Ипатов
	secret secret-generated-md5;
119 1 Владимир Ипатов
};
120 1 Владимир Ипатов
121 1 Владимир Ипатов
122 1 Владимир Ипатов
123 1 Владимир Ипатов
subnet 192.168.5.0 netmask 255.255.255.0 {
124 1 Владимир Ипатов
	authoritative;
125 1 Владимир Ипатов
	ddns-updates on;
126 1 Владимир Ипатов
	range 192.168.5.11 192.168.5.254;
127 1 Владимир Ипатов
	option routers 192.168.5.35;
128 1 Владимир Ипатов
	option domain-name-servers 192.168.5.35;
129 1 Владимир Ипатов
	option domain-name "your.domain";
130 1 Владимир Ипатов
	default-lease-time 604800;
131 1 Владимир Ипатов
	max-lease-time 2592000;
132 1 Владимир Ипатов
	}
133 1 Владимир Ипатов
134 1 Владимир Ипатов
135 1 Владимир Ипатов
zone your.domain. {
136 1 Владимир Ипатов
	primary 127.0.0.1;
137 1 Владимир Ипатов
	key DHCP_UPDATE;
138 1 Владимир Ипатов
}
139 1 Владимир Ипатов
140 1 Владимир Ипатов
zone 168.192.in-addr.arpa. {
141 1 Владимир Ипатов
	primary 127.0.0.1;
142 1 Владимир Ипатов
	key DHCP_UPDATE;
143 1 Владимир Ипатов
}
144 1 Владимир Ипатов
</pre>
145 1 Владимир Ипатов
146 3 Владимир Ипатов
h2. Локаль
147 1 Владимир Ипатов
148 3 Владимир Ипатов
Локаль в кластере настраивается с помощью puppet. По умолчанию она - ru_RU.UTF-8
149 3 Владимир Ипатов
Если Вам нужна другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
150 3 Владимир Ипатов
<pre>class { locale: def_locale => "ru_RU.cp1251", stage => main, }</pre>
151 3 Владимир Ипатов
Также Вы должны внести нужную локаль в список генерируемых локалей @/etc/puppet/modules/locale/templates/locale.gen.erb@
152 3 Владимир Ипатов
если этой локали нет в этом списке:
153 1 Владимир Ипатов
<pre>en_US ISO-8859-1
154 1 Владимир Ипатов
en_US UTF-8
155 1 Владимир Ипатов
ru_RU UTF-8
156 1 Владимир Ипатов
ru_RU KOI8-R
157 1 Владимир Ипатов
ru_RU CP1251
158 1 Владимир Ипатов
ru_RU ISO8859-5</pre>
159 3 Владимир Ипатов
*ПРИМЕЧАНИЕ*: нужную локаль следует вносить *ДО* этой строки:
160 1 Владимир Ипатов
<pre><%= def_locale["."] = " "; def_locale %></pre>
161 5 Владимир Ипатов
162 5 Владимир Ипатов
h2. Системная почта
163 5 Владимир Ипатов
164 5 Владимир Ипатов
Реализовано два подхода к доставке системной почты:
165 5 Владимир Ипатов
1) Вся почта поступает на одну машину (sci по умолчанию) в локальный почтовый ящик указанного пользователя
166 5 Владимир Ипатов
2) Все почта поступает на сторонний почтовый ящик. Это более удобный подход, но для него требуется смартхост, который может доставлять почту через интернет, поэтому по умолчанию используется первый подход.
167 5 Владимир Ипатов
168 5 Владимир Ипатов
Этот модуль конфигурируется аргументами из nodes.pp. Для первой схемы он выглядит так:
169 5 Владимир Ипатов
<pre>
170 5 Владимир Ипатов
node 'default' {
171 5 Владимир Ипатов
...........
172 5 Владимир Ипатов
	class { exim4: smarthost => "default", forward_to => 'admin', stage => main, }
173 5 Владимир Ипатов
}
174 5 Владимир Ипатов
175 5 Владимир Ипатов
node 'sci' {
176 5 Владимир Ипатов
...........
177 5 Владимир Ипатов
	class { exim4: mailhub => yes, forward_to => 'admin', stage => main, }
178 5 Владимир Ипатов
}
179 5 Владимир Ипатов
</pre>
180 5 Владимир Ипатов
Вся почта приходит пользователю admin (по умолчанию root) на машину sci.
181 5 Владимир Ипатов
182 5 Владимир Ипатов
А вот пример для внешнего ящика:
183 5 Владимир Ипатов
<pre>
184 5 Владимир Ипатов
node 'default' {
185 5 Владимир Ипатов
...........
186 5 Владимир Ипатов
	class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
187 5 Владимир Ипатов
}
188 5 Владимир Ипатов
189 5 Владимир Ипатов
node 'sci' {
190 5 Владимир Ипатов
...........
191 5 Владимир Ипатов
	class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
192 5 Владимир Ипатов
}
193 5 Владимир Ипатов
</pre>