Проект

Общее

Профиль

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

Dmitry Chernyak, 07.07.2016 01:10

1 16 Dmitry Chernyak
h1. Управление SCI сервисами
2 16 Dmitry Chernyak
3 2 Владимир Ипатов
{{toc}}
4 1 Владимир Ипатов
5 16 Dmitry Chernyak
[[OVERVIEW]] | [[INSTALL]] | [[SETUP]] | [[OPERATIONS]] | [[LICENSE]]
6 16 Dmitry Chernyak
[[ОБЗОР]] | [[УСТАНОВКА]] | [[НАСТРОЙКА]] | [[ОПЕРАЦИИ]] | [[ЛИЦЕНЗИЯ]]
7 1 Владимир Ипатов
8 1 Владимир Ипатов
h2. PUPPET
9 1 Владимир Ипатов
10 4 Dmitry Chernyak
"Puppet":http://www.puppetlabs.com - это платформа для автоматизации системного администрирования большого количества компьютеров.
11 9 Dmitry Chernyak
Puppet позволяет легко автоматизировать задачи по настройке операционных систем и используется для настройки узлов и виртуальных машин в кластере.
12 3 Владимир Ипатов
Документация можно найти здесь: http://docs.puppetlabs.com/
13 1 Владимир Ипатов
14 4 Dmitry Chernyak
Управляющий сервер - "Puppet master" установлен на сервисной виртуальной машине 'sci'.
15 3 Владимир Ипатов
16 4 Dmitry Chernyak
В комплекте поставки есть следующие модули:
17 4 Dmitry Chernyak
* Общая настройка сервера (common) - установка полезных пакетов и удобных умолчаний
18 4 Dmitry Chernyak
* locale (locale)
19 4 Dmitry Chernyak
* timezone (timezone)
20 4 Dmitry Chernyak
* Approx (approx) - прокси для пакетов обновления Debian
21 4 Dmitry Chernyak
* DNS (bind9) - запуск в chroot и пред-настройка для обслуживания кластера
22 4 Dmitry Chernyak
* DHCP (dhcpd) - пред-настройка для кластера и DDNS
23 6 Владимир Ипатов
* Почта (exim4) - настройка доставки локальной почты
24 1 Владимир Ипатов
25 9 Dmitry Chernyak
h3. Конфигурация хостов
26 9 Dmitry Chernyak
27 4 Dmitry Chernyak
Конфигурация для хостов задается в файле /etc/puppet/manifests/nodes.pp:
28 1 Владимир Ипатов
<pre>
29 1 Владимир Ипатов
node 'default' {
30 1 Владимир Ипатов
	class { sources_list_local: stage => pre0, }
31 1 Владимир Ипатов
	class { common_profile: stage => pre1, }
32 1 Владимир Ипатов
	class { timezone: zone => "Europe/Moscow", stage => main, }
33 1 Владимир Ипатов
	class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
34 1 Владимир Ипатов
}
35 1 Владимир Ипатов
36 1 Владимир Ипатов
node 'sci' {
37 1 Владимир Ипатов
	class { approx_local: stage => pre0, }
38 1 Владимир Ипатов
	class { sources_list_local: stage => pre0, }
39 1 Владимир Ипатов
	class { common_profile: stage => pre1, }
40 1 Владимир Ипатов
	class { bind9_sci: stage => main, }
41 1 Владимир Ипатов
	class { timezone: zone => "Europe/Moscow", stage => main, }
42 1 Владимир Ипатов
	class { locale: def_locale => "ru_RU.UTF-8", stage => main, }
43 1 Владимир Ипатов
	class { dhcpd: enabled => no, stage => post1, }
44 1 Владимир Ипатов
}
45 3 Владимир Ипатов
</pre>
46 1 Владимир Ипатов
Если Вы не указали хост в файле, то к нему применяются настройки default.
47 9 Dmitry Chernyak
48 9 Dmitry Chernyak
h3. Обновление рецептов
49 9 Dmitry Chernyak
50 9 Dmitry Chernyak
Настройка большинства сервисов SkyCover Infrastructure производится при помощи рецептов puppet.
51 9 Dmitry Chernyak
В вашей системе эти рецепты находятся в каталоге /etc/puppet/modules
52 9 Dmitry Chernyak
53 9 Dmitry Chernyak
Вы можете получать обновления каталога рецептов из официального репозтория https://github.com/skycover/sci-puppet при помощи следующей процедуры:
54 9 Dmitry Chernyak
55 9 Dmitry Chernyak
*Запишите изменения в своем каталоге рецептов (если вы их вносили)*
56 9 Dmitry Chernyak
57 9 Dmitry Chernyak
<pre>
58 9 Dmitry Chernyak
cd /etc/puppet
59 9 Dmitry Chernyak
git status # показать список изменений, которые вы сделали
60 9 Dmitry Chernyak
git diff --color # показать различия в виде diff
61 9 Dmitry Chernyak
git commit -am"Latest changes" # записать изменения
62 9 Dmitry Chernyak
git push
63 9 Dmitry Chernyak
</pre>
64 9 Dmitry Chernyak
65 9 Dmitry Chernyak
*Проверьте наличие обновлений*
66 9 Dmitry Chernyak
67 9 Dmitry Chernyak
<pre>
68 9 Dmitry Chernyak
cd /root/puppet
69 9 Dmitry Chernyak
git checkout master
70 9 Dmitry Chernyak
git pull
71 9 Dmitry Chernyak
</pre>
72 9 Dmitry Chernyak
73 9 Dmitry Chernyak
Если последняя команда вывела список изменившихся файлов, то можно проанализировать изменения:
74 9 Dmitry Chernyak
75 9 Dmitry Chernyak
<pre>
76 9 Dmitry Chernyak
git log
77 9 Dmitry Chernyak
</pre>
78 9 Dmitry Chernyak
79 9 Dmitry Chernyak
Затем посмотреть различия с вашей локальной версией
80 9 Dmitry Chernyak
81 9 Dmitry Chernyak
<pre>
82 9 Dmitry Chernyak
git checkout local
83 9 Dmitry Chernyak
git diff master
84 9 Dmitry Chernyak
</pre>
85 9 Dmitry Chernyak
86 9 Dmitry Chernyak
*Добавьте изменения в локальную версию*
87 9 Dmitry Chernyak
88 9 Dmitry Chernyak
<pre>
89 9 Dmitry Chernyak
git merge master
90 9 Dmitry Chernyak
</pre>
91 9 Dmitry Chernyak
92 9 Dmitry Chernyak
или
93 9 Dmitry Chernyak
94 9 Dmitry Chernyak
<pre>
95 9 Dmitry Chernyak
git cherry-pick HASHSUM
96 9 Dmitry Chernyak
</pre>
97 9 Dmitry Chernyak
98 9 Dmitry Chernyak
Все эти манипуляции не затрагивают ваш действующий каталог рецептов и могут быть отменены
99 9 Dmitry Chernyak
100 9 Dmitry Chernyak
*Перенесите обновление в действующий каталог рецептов*
101 9 Dmitry Chernyak
102 9 Dmitry Chernyak
<pre>
103 9 Dmitry Chernyak
cd /etc/puppet
104 9 Dmitry Chernyak
git pull
105 9 Dmitry Chernyak
</pre>
106 9 Dmitry Chernyak
107 9 Dmitry Chernyak
Для более подробной информации рекомендуем познакомиться с git. Начните от сюда: [[МАГИЯ GIT]]
108 1 Владимир Ипатов
109 1 Владимир Ипатов
h2. Apt
110 1 Владимир Ипатов
111 4 Dmitry Chernyak
Apt автоматически настраивается во всем кластере средствами puppet
112 1 Владимир Ипатов
113 1 Владимир Ипатов
h3. sources.list
114 1 Владимир Ипатов
115 4 Dmitry Chernyak
Шаблон для sources.list находится в @/etc/puppet/modules/approx/templates/sources.list.erb@ и настроен для работы через approx.
116 1 Владимир Ипатов
117 1 Владимир Ипатов
h3. Approx
118 1 Владимир Ипатов
119 3 Владимир Ипатов
Шаблон конфига Approx находится @/etc/puppet/modules/approx/templates/approx.conf.erb@
120 4 Dmitry Chernyak
Для быстрого применения изменений выполните:
121 1 Владимир Ипатов
<pre>
122 1 Владимир Ипатов
/etc/init.d/puppet restart
123 1 Владимир Ипатов
</pre>
124 1 Владимир Ипатов
125 1 Владимир Ипатов
h2. DNS
126 1 Владимир Ипатов
127 4 Dmitry Chernyak
DNS автоматически устанавливается на машине 'sci'.
128 1 Владимир Ипатов
129 10 Владимир Ипатов
Прямая зона лежит в файле @/etc/bind/master/$domain@
130 11 Владимир Ипатов
Обратная зона (192.168.0.0/16) лежит в файле @/etc/bind/master/in-addr@
131 12 Владимир Ипатов
Если требуется держать обратную зону для другого диапазона ip, то следует сначала поправить @/etc/bind9/named.conf.local@,
132 12 Владимир Ипатов
а уже затем поправить содержимое зоны. Пример конфига в named.conf.local для зоны 10.0.0.0/8:
133 11 Владимир Ипатов
<pre>
134 11 Владимир Ипатов
zone 10.in-addr.arpa in {
135 11 Владимир Ипатов
 type master;
136 11 Владимир Ипатов
 file "/etc/bind/master/in-addr";
137 11 Владимир Ипатов
 allow-query    { any; };
138 11 Владимир Ипатов
 allow-update{ key DHCP_UPDATE; };
139 11 Владимир Ипатов
};
140 11 Владимир Ипатов
</pre>
141 3 Владимир Ипатов
При каждом ручном изменении зоны Вы должны увеличивать счетчик в начале файла:
142 1 Владимир Ипатов
<pre>
143 1 Владимир Ипатов
0000000001 ; Serial
144 1 Владимир Ипатов
</pre>
145 3 Владимир Ипатов
Рекомендуется формат YYYYMMDDNN (NN порядковый номер изменения за этот день).
146 3 Владимир Ипатов
Вы можете изменять этот файл как угодно для того, чтобы он подходил к Вашей системе.
147 1 Владимир Ипатов
148 3 Владимир Ипатов
Новые записи должны идти после:
149 1 Владимир Ипатов
<pre>
150 1 Владимир Ипатов
; here you can put any other records
151 1 Владимир Ипатов
</pre>
152 1 Владимир Ипатов
153 3 Владимир Ипатов
Чтобы применить изменения, следует:
154 1 Владимир Ипатов
<pre>
155 1 Владимир Ипатов
/etc/init.d/bind9 reload
156 1 Владимир Ипатов
</pre>
157 1 Владимир Ипатов
158 3 Владимир Ипатов
*ПРИМЕЧАНИЕ*: Если Вы используете динамические апдейты зоны(например, от dhcp сервера),
159 3 Владимир Ипатов
до ручного изменения файла следует "заморозить" зону:
160 1 Владимир Ипатов
<pre>rndc freeze your.domain</pre>
161 3 Владимир Ипатов
для прямой зоны
162 1 Владимир Ипатов
<pre>rndc freeze 168.192.in-addr.arpa</pre>
163 3 Владимир Ипатов
для обратной зоны
164 3 Владимир Ипатов
а после изменения файла следует "разморозить" зону:
165 1 Владимир Ипатов
<pre>rndc unfreeze your.domain</pre>
166 3 Владимир Ипатов
или
167 1 Владимир Ипатов
<pre>rndc unfreeze 168.192.in-addr.arpa</pre>
168 1 Владимир Ипатов
169 1 Владимир Ипатов
h2. DHCP
170 1 Владимир Ипатов
171 3 Владимир Ипатов
isc-dhcp-server настроен на машине sci, но отключен по умолчанию.
172 3 Владимир Ипатов
Если Вы хотите его включить, Вам следует сменить строчку в nodes.pp:
173 1 Владимир Ипатов
<pre>
174 3 Владимир Ипатов
	class { dhcpd: enabled => no, stage => post1, }
175 3 Владимир Ипатов
</pre>
176 3 Владимир Ипатов
на:
177 3 Владимир Ипатов
<pre>
178 3 Владимир Ипатов
	class { dhcpd: enabled => yes, stage => post1, }
179 3 Владимир Ипатов
</pre>
180 3 Владимир Ипатов
Если у Вас есть отдельный lan сегмент, то dhcp настраивается на него, если нет - на основной сегмент.
181 3 Владимир Ипатов
Дефолтный конфиг выглядит наподобие этого:
182 3 Владимир Ипатов
<pre>
183 1 Владимир Ипатов
ddns-update-style interim;
184 1 Владимир Ипатов
ddns-updates on;
185 1 Владимир Ипатов
allow-unknown-clients;
186 1 Владимир Ипатов
autoritative;
187 1 Владимир Ипатов
ddns-domainname "your.domain";
188 1 Владимир Ипатов
update-static-leases on;
189 1 Владимир Ипатов
allow client-updates;
190 1 Владимир Ипатов
191 1 Владимир Ипатов
key DHCP_UPDATE {
192 1 Владимир Ипатов
	algorithm HMAC-MD5;
193 1 Владимир Ипатов
	secret secret-generated-md5;
194 1 Владимир Ипатов
};
195 1 Владимир Ипатов
196 1 Владимир Ипатов
197 1 Владимир Ипатов
198 1 Владимир Ипатов
subnet 192.168.5.0 netmask 255.255.255.0 {
199 1 Владимир Ипатов
	authoritative;
200 1 Владимир Ипатов
	ddns-updates on;
201 1 Владимир Ипатов
	range 192.168.5.11 192.168.5.254;
202 1 Владимир Ипатов
	option routers 192.168.5.35;
203 1 Владимир Ипатов
	option domain-name-servers 192.168.5.35;
204 1 Владимир Ипатов
	option domain-name "your.domain";
205 1 Владимир Ипатов
	default-lease-time 604800;
206 1 Владимир Ипатов
	max-lease-time 2592000;
207 1 Владимир Ипатов
	}
208 1 Владимир Ипатов
209 1 Владимир Ипатов
210 1 Владимир Ипатов
zone your.domain. {
211 1 Владимир Ипатов
	primary 127.0.0.1;
212 1 Владимир Ипатов
	key DHCP_UPDATE;
213 1 Владимир Ипатов
}
214 1 Владимир Ипатов
215 1 Владимир Ипатов
zone 168.192.in-addr.arpa. {
216 1 Владимир Ипатов
	primary 127.0.0.1;
217 1 Владимир Ипатов
	key DHCP_UPDATE;
218 1 Владимир Ипатов
}
219 1 Владимир Ипатов
</pre>
220 1 Владимир Ипатов
221 3 Владимир Ипатов
h2. Локаль
222 1 Владимир Ипатов
223 8 Владимир Ипатов
Локаль в кластере настраивается с помощью puppet. По умолчанию она - ru_RU.UTF-8.
224 8 Владимир Ипатов
При создании машины sci локаль берется из sci.conf(переменная LOCALE) и вносится в nodes.pp.
225 1 Владимир Ипатов
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
226 1 Владимир Ипатов
<pre>class { locale: def_locale => "ru_RU.cp1251", stage => main, }</pre>
227 8 Владимир Ипатов
228 8 Владимир Ипатов
h2. Часовой пояс
229 8 Владимир Ипатов
230 8 Владимир Ипатов
Настраивается через puppet модулем timezone. По умолчанию - Europe/Moscow.
231 8 Владимир Ипатов
При создании машины sci часовой пояс берется из sci.conf(переменная TIMEZONE) и вносится в nodes.pp.
232 8 Владимир Ипатов
Если Вам уже после создания понадобилась другая локаль, назначьте ее в @/etc/puppet/manifests/nodes.pp@
233 8 Владимир Ипатов
<pre>class { timezone: zone => "Europe/Berlin", stage => main, }</pre>
234 5 Владимир Ипатов
235 5 Владимир Ипатов
h2. Системная почта
236 5 Владимир Ипатов
237 5 Владимир Ипатов
Реализовано два подхода к доставке системной почты:
238 5 Владимир Ипатов
1) Вся почта поступает на одну машину (sci по умолчанию) в локальный почтовый ящик указанного пользователя
239 5 Владимир Ипатов
2) Все почта поступает на сторонний почтовый ящик. Это более удобный подход, но для него требуется смартхост, который может доставлять почту через интернет, поэтому по умолчанию используется первый подход.
240 5 Владимир Ипатов
241 5 Владимир Ипатов
Этот модуль конфигурируется аргументами из nodes.pp. Для первой схемы он выглядит так:
242 5 Владимир Ипатов
<pre>
243 5 Владимир Ипатов
node 'default' {
244 5 Владимир Ипатов
...........
245 5 Владимир Ипатов
	class { exim4: smarthost => "default", forward_to => 'admin', stage => main, }
246 5 Владимир Ипатов
}
247 5 Владимир Ипатов
248 5 Владимир Ипатов
node 'sci' {
249 5 Владимир Ипатов
...........
250 5 Владимир Ипатов
	class { exim4: mailhub => yes, forward_to => 'admin', stage => main, }
251 5 Владимир Ипатов
}
252 5 Владимир Ипатов
</pre>
253 5 Владимир Ипатов
Вся почта приходит пользователю admin (по умолчанию root) на машину sci.
254 5 Владимир Ипатов
255 5 Владимир Ипатов
А вот пример для внешнего ящика:
256 5 Владимир Ипатов
<pre>
257 5 Владимир Ипатов
node 'default' {
258 5 Владимир Ипатов
...........
259 5 Владимир Ипатов
	class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
260 5 Владимир Ипатов
}
261 5 Владимир Ипатов
262 5 Владимир Ипатов
node 'sci' {
263 5 Владимир Ипатов
...........
264 5 Владимир Ипатов
	class { exim4: smarthost => "my-smarthost.localdomain", forward_to => 'notify@other.domain', stage => main, }
265 5 Владимир Ипатов
}
266 5 Владимир Ипатов
</pre>
267 13 Владимир Ипатов
268 14 Владимир Ипатов
h2. Web сервер
269 13 Владимир Ипатов
270 13 Владимир Ипатов
для применения модуля в nodes.pp нужно добавить:
271 13 Владимир Ипатов
<pre>
272 15 Евгений Антонов
node 'web' inherits default {
273 13 Владимир Ипатов
   class { web: stage => main, }
274 13 Владимир Ипатов
}
275 13 Владимир Ипатов
</pre>
276 13 Владимир Ипатов
Где web - хостнейм веб сервера.
277 13 Владимир Ипатов
278 13 Владимир Ипатов
Затем дать команду service puppetmaster reload
279 13 Владимир Ипатов
280 13 Владимир Ипатов
281 13 Владимир Ипатов
Данный модуль поставит nginx, php-fpm, mysql, а также скрипт для быстрого добавления сайтов add-site.
282 13 Владимир Ипатов
<pre>
283 13 Владимир Ипатов
# add-site
284 13 Владимир Ипатов
usage: /usr/local/sbin/add-site user [sitename]
285 13 Владимир Ипатов
/usr/local/sbin/add-site user creates user and home dirs if not exist
286 13 Владимир Ипатов
287 13 Владимир Ипатов
/usr/local/sbin/add-site user sitename creates user if not exist and create
288 13 Владимир Ипатов
/home/$user/www/$sitename directory
289 13 Владимир Ипатов
creates /etc/nginx/sites-available/$sitename and
290 13 Владимир Ипатов
/etc/php5/pfm/pool.d/$sitename.conf from templates
291 13 Владимир Ипатов
creates mysqlbase $sitename and mysql user $sitename
292 13 Владимир Ипатов
grant all privileges to new user on new base
293 13 Владимир Ипатов
generate password for new user and echo it on console
294 13 Владимир Ипатов
</pre>
295 13 Владимир Ипатов
Для начала нужно создать окружение пользователя:
296 13 Владимир Ипатов
<pre>
297 13 Владимир Ипатов
add-site user01 
298 13 Владимир Ипатов
</pre>
299 13 Владимир Ипатов
создает системного пользователя, генерирует ему пароль, чтобы под ним можно было заходить по ssh.
300 13 Владимир Ипатов
Также он создает ~/www - там будут лежать директориями с сайтами пользователя и ~/logs - там будут лежать логи этих сайтов.
301 13 Владимир Ипатов
Затем нужно создать сайт:
302 13 Владимир Ипатов
<pre>
303 13 Владимир Ипатов
add-site user01 example.com
304 13 Владимир Ипатов
</pre>
305 13 Владимир Ипатов
306 13 Владимир Ипатов
Эта команда создаст директорию /home/user01/www/example.com, конфиг vhost для nginx, конфиг vhost для php-fpm
307 13 Владимир Ипатов
Шаблоны для конфигов лежат в /etc/add-site, их можно менять.
308 13 Владимир Ипатов
Затем скрипт создаст mysql базу example.com и пользователя mysql example.com.
309 13 Владимир Ипатов
Пользователю назначит права на базу, сгенерирует пароль и выведет его на экран.
310 13 Владимир Ипатов
Все, что останется сделать руками - залить от имени пользователя по ssh файлы сайта в ~/www/example.com
311 13 Владимир Ипатов
Задать параметры подключения к mysql в конфиге сайта, выполнить активацию нового вхоста:
312 13 Владимир Ипатов
<pre>
313 13 Владимир Ипатов
nginx_ensite example.com
314 13 Владимир Ипатов
service php5-fpm reload
315 13 Владимир Ипатов
</pre>
316 13 Владимир Ипатов
Ну и настроить днс для домена example.com