Системы управления 
кластерами 
Симаков Алексей
Кластер - разновидность параллельной или 
распределенной системы, которая состоит 
из нескольких комьютеров и используется 
как единый ресурс 
ru.wikipedia.org
4 
Сначала было приложение… 
App
5 
База 
App 
DB
6 
Балансировка 
App 
DB 
LB 
App App
7 
App 
App App 
DB 
LB 
DB 
App 
LB 
Дублирование
8 
Адаптация 
App 
App App 
Cache 
LB 
Cache 
App 
LB 
DB DB 
Cache
9 
App 
Production Testing 
App App 
Cache 
LB 
Cache 
App 
LB 
DB DB 
Cache 
App 
Cache 
DB 
Окружения
10 
Задача #1 
Управление конфигурацией 
Задача #2 
Оркестрация
The Heartbleed Bug 
1. Обновить openssl 
2. Перезапустить сервисы 
11
Системы управления кластерами 
Chef
13 
Лирическое отступление #1 
Термины 
〉Императивность 
〉Декларативность 
〉Идемпотентность
Декларация 
net.core.somaxconn: 
sysctl: 
- value: 10240 
14 
Лирическое отступление #1 
Императив 
#! /bin/sh 
echo ‘net.core.somaxconn = 10240’ > /etc/sysctl.conf 
sysctl -p
15 
Лирическое отступление #1 
Идемпотентность 
#! /bin/sh 
if grep -q ^net.core.somaxconn /etc/sysctl.conf ; then 
sed 's#net.core.somaxconn.*#net.core.somaxconn = 10240#’  
-i /etc/sysctl.conf ; 
else 
echo 'net.core.somaxconn = 10240' > sysctl.conf; 
fi
Chef 0.10 (2011) Технологии 
〉couchdb 
〉ruby 
〉solr 
〉rabbitmq 
〉pull only 
16
Chef 
〉role 
〉node 
〉environment 
〉cookbook 
〉recipe 
〉attribute 
17
18 
Лирическое отступление #2 
Отделить код от данных 
Data Code
19 
Лирическое отступление #2 
Code 
Dev 
Test 
Prod
Chef 0.12 (2014) 
〉postgresql 
〉ruby + erlang 
〉solr 
〉one-liner 
〉pull & push 
20
21
Системы управления кластерами 
Ansible
Ansible 
〉python 
〉serverless 
〉ssh/paramiko 
〉yaml 
23
Системы управления кластерами 
Salt
25 
Salt. Execution framework 
salt -E ‘hdp.*’ cmd.run uptime 
salt -E ‘web.*’ -B 25% cmd.run /etc/init.d/nginx restart
26 
Salt. Основы 
Grains - информация о локальной системе 
States - состояние до которого нужно довести 
Pillar - хранилище глобальных переменных
27 
Salt. Grains 
# salt ‘hdp001g*’ grains.items 
hdp001g.yandex.net: 
---------- 
SSDs: 
biosreleasedate: 
08/08/2013 
biosversion: 
3.0a
28 
Salt. State 
/etc/salt/nginx/init.sls 
nginx: 
pkg: 
- installed 
service: 
- running 
- require: 
- pkg: nginx
29 
Salt. Pillar 
/srv/pillar/packag es.sls 
{% if grains['os'] == 'RedHat' %} 
apache: httpd 
git: git 
{% elif grains['os'] == 'Debian' %} 
apache: apache2 
git: git-core 
{% endif %}
30 
Salt. Pillar. #1 
/srv/pillar/packag es.sls 
{% if grains['os'] == 'RedHat' %} 
apache: httpd 
git: git 
{% elif grains['os'] == 'Debian' %} 
apache: apache2 
git: git-core 
{% endif %}
31 
Salt. Pillar. #2 
apache: 
pkg: 
- installed 
- name: {{ pillar['apache'] }} 
git: 
pkg: 
- installed 
- name: {{ pillar['git'] }}
base: 
'web*.yandex.net': 
- system 
- web 
'db*..yandex.net': 
- system 
- mysql 
32 
Salt.
33 
Salt. Архитектура 
gitfs 
конфигурация salt-master 
salt-minion salt-minion 
salt-syndic 
salt-minion salt-minion 
zeromq
34 
Reclass 
Recursive external node classification
35 
Salt и reclass 
reclass concept salt terminology 
nodes hosts 
classes (none) 
applications states 
parameters pillar 
environment environment
36 
Reclass. Class #1 
versions.yml 
--- 
applications: 
- hadoop.cdh 
parameters: 
cloudera: 
version: 5.0.1 
jdk: 
package: yandex-jdk7
37 
Reclass. Application 
cdh.sls 
{% if grains['os'] == 'Ubuntu'%} 
/etc/apt/sources.list.d/cdh.list: 
file.managed: 
- source: salt://hadoop/cdh.list 
- template: jinja 
- require: 
- cmd: cdh-repo-key 
- order: 1 
- failhard: True
38 
Reclass. Class #2 
hadoop/base.yml 
--- 
classes: 
- hadoop.versions 
applications: 
- hadoop 
parameters: 
hadoop: 
metrics: 
- jvm
39 
Reclass. Class #3 
marmot/base.yml 
--- 
classes: 
- hadoop.base 
parameters: 
cluster: marmot 
zookeeper: 
client_port: 2181
Системы управления кластерами 
CFEngine
Особенности 
〉свой DSL 
〉написан на C 
〉легковесный 
〉10 миллионов серверов 
на Enterprise версии 
41
как выбрать?
Системы управления кластерами 
Экзотика
juju - service orchestration на Go 
NixOS - функциональный подход к 
управлению пакетами 
44 
Экзотика
Контакты 
Симаков Алексей 
зам. руководителя отдела эксплуатации 
asimakov@yandex-team.ru @jinrou
Конец

Симаков Алексей - Системы управления кластерами