Проект

Общее

Профиль

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

Владимир Ипатов, 05.02.2013 02:06

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 9 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 6 Владимир Ипатов
* Почта (exim4) - настройка доставки локальной почты
21 1 Владимир Ипатов
22 9 Dmitry Chernyak
h3. Конфигурация хостов
23 9 Dmitry Chernyak
24 4 Dmitry Chernyak
Конфигурация для хостов задается в файле /etc/puppet/manifests/nodes.pp:
25 1 Владимир Ипатов
<pre>
26 1 Владимир Ипатов
node 'default' {
27 1 Владимир Ипатов
	class { sources_list_local: stage => pre0, }
28 1 Владимир Ипатов
	class { common_profile: stage => pre1, }
29 1 Владимир Ипатов
	class { timezone: zone => "Europe/Moscow", stage => main, }
30 1 Владимир Ипатов
	class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
31 1 Владимир Ипатов
}
32 1 Владимир Ипатов
33 1 Владимир Ипатов
node 'sci' {
34 1 Владимир Ипатов
	class { approx_local: stage => pre0, }
35 1 Владимир Ипатов
	class { sources_list_local: stage => pre0, }
36 1 Владимир Ипатов
	class { common_profile: stage => pre1, }
37 1 Владимир Ипатов
	class { bind9_sci: stage => main, }
38 1 Владимир Ипатов
	class { timezone: zone => "Europe/Moscow", stage => main, }
39 1 Владимир Ипатов
	class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
40 1 Владимир Ипатов
	class { dhcpd: enabled => no, stage => post1, }
41 1 Владимир Ипатов
}
42 3 Владимир Ипатов
</pre>
43 1 Владимир Ипатов
Если Вы не указали хост в файле, то к нему применяются настройки default.
44 9 Dmitry Chernyak
45 9 Dmitry Chernyak
h3. Обновление рецептов
46 9 Dmitry Chernyak
47 9 Dmitry Chernyak
Настройка большинства сервисов SkyCover Infrastructure производится при помощи рецептов puppet.
48 9 Dmitry Chernyak
В вашей системе эти рецепты находятся в каталоге /etc/puppet/modules
49 9 Dmitry Chernyak
50 9 Dmitry Chernyak
Вы можете получать обновления каталога рецептов из официального репозтория https://github.com/skycover/sci-puppet при помощи следующей процедуры:
51 9 Dmitry Chernyak
52 9 Dmitry Chernyak
*Запишите изменения в своем каталоге рецептов (если вы их вносили)*
53 9 Dmitry Chernyak
54 9 Dmitry Chernyak
<pre>
55 9 Dmitry Chernyak
cd /etc/puppet
56 9 Dmitry Chernyak
git status # показать список изменений, которые вы сделали
57 9 Dmitry Chernyak
git diff --color # показать различия в виде diff
58 9 Dmitry Chernyak
git commit -am"Latest changes" # записать изменения
59 9 Dmitry Chernyak
git push
60 9 Dmitry Chernyak
</pre>
61 9 Dmitry Chernyak
62 9 Dmitry Chernyak
*Проверьте наличие обновлений*
63 9 Dmitry Chernyak
64 9 Dmitry Chernyak
<pre>
65 9 Dmitry Chernyak
cd /root/puppet
66 9 Dmitry Chernyak
git checkout master
67 9 Dmitry Chernyak
git pull
68 9 Dmitry Chernyak
</pre>
69 9 Dmitry Chernyak
70 9 Dmitry Chernyak
Если последняя команда вывела список изменившихся файлов, то можно проанализировать изменения:
71 9 Dmitry Chernyak
72 9 Dmitry Chernyak
<pre>
73 9 Dmitry Chernyak
git log
74 9 Dmitry Chernyak
</pre>
75 9 Dmitry Chernyak
76 9 Dmitry Chernyak
Затем посмотреть различия с вашей локальной версией
77 9 Dmitry Chernyak
78 9 Dmitry Chernyak
<pre>
79 9 Dmitry Chernyak
git checkout local
80 9 Dmitry Chernyak
git diff master
81 9 Dmitry Chernyak
</pre>
82 9 Dmitry Chernyak
83 9 Dmitry Chernyak
*Добавьте изменения в локальную версию*
84 9 Dmitry Chernyak
85 9 Dmitry Chernyak
<pre>
86 9 Dmitry Chernyak
git merge master
87 9 Dmitry Chernyak
</pre>
88 9 Dmitry Chernyak
89 9 Dmitry Chernyak
или
90 9 Dmitry Chernyak
91 9 Dmitry Chernyak
<pre>
92 9 Dmitry Chernyak
git cherry-pick HASHSUM
93 9 Dmitry Chernyak
</pre>
94 9 Dmitry Chernyak
95 9 Dmitry Chernyak
Все эти манипуляции не затрагивают ваш действующий каталог рецептов и могут быть отменены
96 9 Dmitry Chernyak
97 9 Dmitry Chernyak
*Перенесите обновление в действующий каталог рецептов*
98 9 Dmitry Chernyak
99 9 Dmitry Chernyak
<pre>
100 9 Dmitry Chernyak
cd /etc/puppet
101 9 Dmitry Chernyak
git pull
102 9 Dmitry Chernyak
</pre>
103 9 Dmitry Chernyak
104 9 Dmitry Chernyak
Для более подробной информации рекомендуем познакомиться с git. Начните от сюда: [[МАГИЯ GIT]]
105 1 Владимир Ипатов
106 1 Владимир Ипатов
h2. Apt
107 1 Владимир Ипатов
108 4 Dmitry Chernyak
Apt автоматически настраивается во всем кластере средствами puppet
109 1 Владимир Ипатов
110 1 Владимир Ипатов
h3. sources.list
111 1 Владимир Ипатов
112 4 Dmitry Chernyak
Шаблон для sources.list находится в @/etc/puppet/modules/approx/templates/sources.list.erb@ и настроен для работы через approx.
113 1 Владимир Ипатов
114 1 Владимир Ипатов
h3. Approx
115 1 Владимир Ипатов
116 3 Владимир Ипатов
Шаблон конфига Approx находится @/etc/puppet/modules/approx/templates/approx.conf.erb@
117 4 Dmitry Chernyak
Для быстрого применения изменений выполните:
118 1 Владимир Ипатов
<pre>
119 1 Владимир Ипатов
/etc/init.d/puppet restart
120 1 Владимир Ипатов
</pre>
121 1 Владимир Ипатов
122 1 Владимир Ипатов
h2. DNS
123 1 Владимир Ипатов
124 4 Dmitry Chernyak
DNS автоматически устанавливается на машине 'sci'.
125 1 Владимир Ипатов
126 10 Владимир Ипатов
Прямая зона лежит в файле @/etc/bind/master/$domain@
127 10 Владимир Ипатов
Обратная зона зона лежит в файле @/etc/bind/master/in-addr@
128 3 Владимир Ипатов
При каждом ручном изменении зоны Вы должны увеличивать счетчик в начале файла:
129 1 Владимир Ипатов
<pre>
130 1 Владимир Ипатов
0000000001 ; Serial
131 1 Владимир Ипатов
</pre>
132 3 Владимир Ипатов
Рекомендуется формат YYYYMMDDNN (NN порядковый номер изменения за этот день).
133 3 Владимир Ипатов
Вы можете изменять этот файл как угодно для того, чтобы он подходил к Вашей системе.
134 1 Владимир Ипатов
135 3 Владимир Ипатов
Новые записи должны идти после:
136 1 Владимир Ипатов
<pre>
137 1 Владимир Ипатов
; here you can put any other records
138 1 Владимир Ипатов
</pre>
139 1 Владимир Ипатов
140 3 Владимир Ипатов
Чтобы применить изменения, следует:
141 1 Владимир Ипатов
<pre>
142 1 Владимир Ипатов
/etc/init.d/bind9 reload
143 1 Владимир Ипатов
</pre>
144 1 Владимир Ипатов
145 3 Владимир Ипатов
*ПРИМЕЧАНИЕ*: Если Вы используете динамические апдейты зоны(например, от dhcp сервера),
146 3 Владимир Ипатов
до ручного изменения файла следует "заморозить" зону:
147 1 Владимир Ипатов
<pre>rndc freeze your.domain</pre>
148 3 Владимир Ипатов
для прямой зоны
149 1 Владимир Ипатов
<pre>rndc freeze 168.192.in-addr.arpa</pre>
150 3 Владимир Ипатов
для обратной зоны
151 3 Владимир Ипатов
а после изменения файла следует "разморозить" зону:
152 1 Владимир Ипатов
<pre>rndc unfreeze your.domain</pre>
153 3 Владимир Ипатов
или
154 1 Владимир Ипатов
<pre>rndc unfreeze 168.192.in-addr.arpa</pre>
155 1 Владимир Ипатов
156 1 Владимир Ипатов
h2. DHCP
157 1 Владимир Ипатов
158 3 Владимир Ипатов
isc-dhcp-server настроен на машине sci, но отключен по умолчанию.
159 3 Владимир Ипатов
Если Вы хотите его включить, Вам следует сменить строчку в nodes.pp:
160 1 Владимир Ипатов
<pre>
161 3 Владимир Ипатов
	class { dhcpd: enabled => no, stage => post1, }
162 3 Владимир Ипатов
</pre>
163 3 Владимир Ипатов
на:
164 3 Владимир Ипатов
<pre>
165 3 Владимир Ипатов
	class { dhcpd: enabled => yes, stage => post1, }
166 3 Владимир Ипатов
</pre>
167 3 Владимир Ипатов
Если у Вас есть отдельный lan сегмент, то dhcp настраивается на него, если нет - на основной сегмент.
168 3 Владимир Ипатов
Дефолтный конфиг выглядит наподобие этого:
169 3 Владимир Ипатов
<pre>
170 1 Владимир Ипатов
ddns-update-style interim;
171 1 Владимир Ипатов
ddns-updates on;
172 1 Владимир Ипатов
allow-unknown-clients;
173 1 Владимир Ипатов
autoritative;
174 1 Владимир Ипатов
ddns-domainname "your.domain";
175 1 Владимир Ипатов
update-static-leases on;
176 1 Владимир Ипатов
allow client-updates;
177 1 Владимир Ипатов
178 1 Владимир Ипатов
key DHCP_UPDATE {
179 1 Владимир Ипатов
	algorithm HMAC-MD5;
180 1 Владимир Ипатов
	secret secret-generated-md5;
181 1 Владимир Ипатов
};
182 1 Владимир Ипатов
183 1 Владимир Ипатов
184 1 Владимир Ипатов
185 1 Владимир Ипатов
subnet 192.168.5.0 netmask 255.255.255.0 {
186 1 Владимир Ипатов
	authoritative;
187 1 Владимир Ипатов
	ddns-updates on;
188 1 Владимир Ипатов
	range 192.168.5.11 192.168.5.254;
189 1 Владимир Ипатов
	option routers 192.168.5.35;
190 1 Владимир Ипатов
	option domain-name-servers 192.168.5.35;
191 1 Владимир Ипатов
	option domain-name "your.domain";
192 1 Владимир Ипатов
	default-lease-time 604800;
193 1 Владимир Ипатов
	max-lease-time 2592000;
194 1 Владимир Ипатов
	}
195 1 Владимир Ипатов
196 1 Владимир Ипатов
197 1 Владимир Ипатов
zone your.domain. {
198 1 Владимир Ипатов
	primary 127.0.0.1;
199 1 Владимир Ипатов
	key DHCP_UPDATE;
200 1 Владимир Ипатов
}
201 1 Владимир Ипатов
202 1 Владимир Ипатов
zone 168.192.in-addr.arpa. {
203 1 Владимир Ипатов
	primary 127.0.0.1;
204 1 Владимир Ипатов
	key DHCP_UPDATE;
205 1 Владимир Ипатов
}
206 1 Владимир Ипатов
</pre>
207 1 Владимир Ипатов
208 3 Владимир Ипатов
h2. Локаль
209 1 Владимир Ипатов
210 8 Владимир Ипатов
Локаль в кластере настраивается с помощью puppet. По умолчанию она - ru_RU.UTF-8.
211 8 Владимир Ипатов
При создании машины sci локаль берется из sci.conf(переменная LOCALE) и вносится в nodes.pp.
212 1 Владимир Ипатов
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
213 1 Владимир Ипатов
<pre>class { locale: def_locale => "ru_RU.cp1251", stage => main, }</pre>
214 8 Владимир Ипатов
215 8 Владимир Ипатов
h2. Часовой пояс
216 8 Владимир Ипатов
217 8 Владимир Ипатов
Настраивается через puppet модулем timezone. По умолчанию - Europe/Moscow.
218 8 Владимир Ипатов
При создании машины sci часовой пояс берется из sci.conf(переменная TIMEZONE) и вносится в nodes.pp.
219 8 Владимир Ипатов
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
220 8 Владимир Ипатов
<pre>class { timezone: zone => "Europe/Berlin", stage => main, }</pre>
221 5 Владимир Ипатов
222 5 Владимир Ипатов
h2. Системная почта
223 5 Владимир Ипатов
224 5 Владимир Ипатов
Реализовано два подхода к доставке системной почты:
225 5 Владимир Ипатов
1) Вся почта поступает на одну машину (sci по умолчанию) в локальный почтовый ящик указанного пользователя
226 5 Владимир Ипатов
2) Все почта поступает на сторонний почтовый ящик. Это более удобный подход, но для него требуется смартхост, который может доставлять почту через интернет, поэтому по умолчанию используется первый подход.
227 5 Владимир Ипатов
228 5 Владимир Ипатов
Этот модуль конфигурируется аргументами из nodes.pp. Для первой схемы он выглядит так:
229 5 Владимир Ипатов
<pre>
230 5 Владимир Ипатов
node 'default' {
231 5 Владимир Ипатов
...........
232 5 Владимир Ипатов
	class { exim4: smarthost => "default", forward_to => 'admin', stage => main, }
233 5 Владимир Ипатов
}
234 5 Владимир Ипатов
235 5 Владимир Ипатов
node 'sci' {
236 5 Владимир Ипатов
...........
237 5 Владимир Ипатов
	class { exim4: mailhub => yes, forward_to => 'admin', stage => main, }
238 5 Владимир Ипатов
}
239 5 Владимир Ипатов
</pre>
240 5 Владимир Ипатов
Вся почта приходит пользователю admin (по умолчанию root) на машину sci.
241 5 Владимир Ипатов
242 5 Владимир Ипатов
А вот пример для внешнего ящика:
243 5 Владимир Ипатов
<pre>
244 5 Владимир Ипатов
node 'default' {
245 5 Владимир Ипатов
...........
246 5 Владимир Ипатов
	class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
247 5 Владимир Ипатов
}
248 5 Владимир Ипатов
249 5 Владимир Ипатов
node 'sci' {
250 5 Владимир Ипатов
...........
251 5 Владимир Ипатов
	class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
252 5 Владимир Ипатов
}
253 5 Владимир Ипатов
</pre>