Проект

Общее

Профиль

FAILOVER-процедуры » История » Версия 14

Владимир Ипатов, 13.11.2012 18:09

1 1 Dmitry Chernyak
.
2 1 Dmitry Chernyak
3 1 Dmitry Chernyak
{{>toc}}
4 1 Dmitry Chernyak
5 1 Dmitry Chernyak
h1. FAILOVER-процедуры
6 1 Dmitry Chernyak
7 1 Dmitry Chernyak
Обозначения:
8 1 Dmitry Chernyak
<pre>
9 1 Dmitry Chernyak
gnt# - запуск команды на мастер-узле
10 1 Dmitry Chernyak
gntX# - запуск команды на обычном узле
11 1 Dmitry Chernyak
gntY# - запуск команды на другом узле
12 1 Dmitry Chernyak
# - запуск команды на любом узле
13 1 Dmitry Chernyak
</pre>
14 1 Dmitry Chernyak
15 12 Dmitry Chernyak
h2. Запуск на одном действующем мастер-узле
16 1 Dmitry Chernyak
17 1 Dmitry Chernyak
При запуске на одном узле, управление кластером ganeti-masterd не стартует автоматически, даже на master-узле.
18 1 Dmitry Chernyak
Это связано с тем, что невозможно отличить крах второго узла от потери связи, когда на втором узле продолжают работать запущенные виртуалки.
19 1 Dmitry Chernyak
20 12 Dmitry Chernyak
h3. Запуск управляющего демона:
21 12 Dmitry Chernyak
22 1 Dmitry Chernyak
<pre>
23 1 Dmitry Chernyak
gnt# ganeti-masterd --no-voting
24 11 Dmitry Chernyak
</pre>
25 11 Dmitry Chernyak
26 11 Dmitry Chernyak
h3. Перенос виртуальных машин с аварийного узла
27 11 Dmitry Chernyak
28 13 Dmitry Chernyak
Эта операция выполняется один раз. Она поменяет узел запуска для виртуальной машины.
29 13 Dmitry Chernyak
Перенесенные машины автоматически запустятся, если таково их состояние по-умолчанию.
30 13 Dmitry Chernyak
31 13 Dmitry Chernyak
Лучше мигрировать или перезапустить виртуальные машины в штатном режиме, до того, как их узел будет отключен.
32 13 Dmitry Chernyak
Однако, если это случилось внезапно, тогда необходимо дать команду:
33 13 Dmitry Chernyak
34 11 Dmitry Chernyak
<pre>
35 11 Dmitry Chernyak
gnt# gnt-node failover --ignore-consistency gntX
36 11 Dmitry Chernyak
</pre>
37 11 Dmitry Chernyak
38 11 Dmitry Chernyak
39 11 Dmitry Chernyak
h3. Запуск всех виртуальных машин
40 11 Dmitry Chernyak
41 11 Dmitry Chernyak
<pre>
42 11 Dmitry Chernyak
gnt# gnt-instance startup --force --all
43 11 Dmitry Chernyak
</pre>
44 11 Dmitry Chernyak
45 1 Dmitry Chernyak
h2. Штатное переключение master-узла
46 1 Dmitry Chernyak
47 1 Dmitry Chernyak
Оба узла запущены, смена master-узла производится в штатном режиме.
48 1 Dmitry Chernyak
На master-candidate (gntX):
49 1 Dmitry Chernyak
<pre>
50 1 Dmitry Chernyak
gntX# gnt-cluster master-failover
51 1 Dmitry Chernyak
</pre>
52 1 Dmitry Chernyak
53 1 Dmitry Chernyak
h2. Выход из строя master-узла
54 1 Dmitry Chernyak
55 1 Dmitry Chernyak
Основной узел (в примере - gnt1) оказывается выключен в результате аппаратной аварии.
56 1 Dmitry Chernyak
57 1 Dmitry Chernyak
Запустить управляющий демон на узле master-candidate (gntX):
58 1 Dmitry Chernyak
<pre>
59 1 Dmitry Chernyak
gntX# ganeti-masterd --no-voting
60 1 Dmitry Chernyak
</pre>
61 1 Dmitry Chernyak
62 1 Dmitry Chernyak
Активировать новый master-узел:
63 1 Dmitry Chernyak
<pre>
64 1 Dmitry Chernyak
gntX# gnt-cluster master-failover --no-voting
65 1 Dmitry Chernyak
</pre>
66 9 Dmitry Chernyak
67 9 Dmitry Chernyak
Пометить отключенный узел offline, чтобы master в него не долбился
68 9 Dmitry Chernyak
-С = master-candidate
69 9 Dmitry Chernyak
-O = offline
70 9 Dmitry Chernyak
<pre>
71 9 Dmitry Chernyak
gnt# gnt-node modify -C no -O yes gntY
72 9 Dmitry Chernyak
</pre>
73 10 Dmitry Chernyak
74 9 Dmitry Chernyak
Запустить все виртуалки отключенного узла на резервном:
75 9 Dmitry Chernyak
<pre>
76 9 Dmitry Chernyak
gnt# gnt-node failover --ignore-consistency gnt1
77 9 Dmitry Chernyak
</pre>
78 9 Dmitry Chernyak
79 1 Dmitry Chernyak
h2. Возврат основного узла в строй
80 1 Dmitry Chernyak
81 1 Dmitry Chernyak
Старый основной узел не будет автоматически запускать управляющего демона.
82 1 Dmitry Chernyak
* если не найдет парного узла,
83 1 Dmitry Chernyak
* если найдет парный узел и узнает, что он стал новым master-ом.
84 1 Dmitry Chernyak
85 1 Dmitry Chernyak
Если на узле сохранились данные, то для включения его обратно в кластер:
86 1 Dmitry Chernyak
87 1 Dmitry Chernyak
Скопировать на него свежую конфигурацию с нового master-а
88 1 Dmitry Chernyak
<pre>
89 1 Dmitry Chernyak
gnt# gnt-cluster redist-conf
90 1 Dmitry Chernyak
</pre>
91 1 Dmitry Chernyak
92 1 Dmitry Chernyak
Запустить на нем ganeti-демоны
93 1 Dmitry Chernyak
<pre>
94 1 Dmitry Chernyak
gntX# /etc/init.d/ganeti restart
95 1 Dmitry Chernyak
</pre>
96 1 Dmitry Chernyak
97 2 Владимир Ипатов
h2. Плановый вывод узла из эксплуатации
98 3 Владимир Ипатов
99 2 Владимир Ипатов
Мигрируем виртуальные машины:
100 2 Владимир Ипатов
<pre>
101 8 Dmitry Chernyak
gnt# gnt-instance migrate имя_машины
102 2 Владимир Ипатов
</pre>
103 2 Владимир Ипатов
104 8 Dmitry Chernyak
Если выводимый узел - мастер, то нужно назначить нового мастера(см. выше *Штатное переключение master узла*).
105 1 Dmitry Chernyak
106 8 Dmitry Chernyak
Вывести узел из списка кандидатов на мастера и перевести его в режим offline (это предотвратит появление сообщений об "аварии"):
107 2 Владимир Ипатов
<pre>
108 8 Dmitry Chernyak
gnt# gnt-node modify -C no -O yes УЗЕЛ
109 2 Владимир Ипатов
</pre>
110 2 Владимир Ипатов
111 2 Владимир Ипатов
Далее узел можно просто выключить.
112 1 Dmitry Chernyak
113 1 Dmitry Chernyak
h3. Возврат узла в кластер
114 1 Dmitry Chernyak
115 8 Dmitry Chernyak
После включения узла нужно сообщить кластеру, что узел вернулся в строй:
116 1 Dmitry Chernyak
<pre>
117 8 Dmitry Chernyak
gnt# gnt-node modify -C yes -O no УЗЕЛ
118 8 Dmitry Chernyak
</pre>
119 8 Dmitry Chernyak
120 8 Dmitry Chernyak
Однако, если у вас имеются сомнения в том, что узел остался в рабочем состоянии, то лучше выполнить:
121 8 Dmitry Chernyak
<pre>
122 8 Dmitry Chernyak
gnt# gnt-node add --readd УЗЕЛ
123 2 Владимир Ипатов
</pre> 
124 8 Dmitry Chernyak
125 8 Dmitry Chernyak
В любом случае, после этого нужно подождать около 5 минут, чтобы демон watcher поднял drbd, либо инициировать процесс вручную:
126 7 Dmitry Chernyak
<pre>
127 8 Dmitry Chernyak
gnt# gnt-cluster verify-disks
128 5 Владимир Ипатов
</pre>
129 8 Dmitry Chernyak
130 2 Владимир Ипатов
131 1 Dmitry Chernyak
h2. Замена узла на новый
132 1 Dmitry Chernyak
133 1 Dmitry Chernyak
Добавить узел в кластер
134 1 Dmitry Chernyak
<pre>
135 1 Dmitry Chernyak
gnt# gnt-node add --readd gntX
136 1 Dmitry Chernyak
</pre>
137 1 Dmitry Chernyak
138 5 Владимир Ипатов
Для всех виртуалок, которые имеют secondary на подключенном узле:
139 1 Dmitry Chernyak
<pre>
140 1 Dmitry Chernyak
gnt# gnt-instance replace-disks --submit -s INSTANCE
141 1 Dmitry Chernyak
</pre>
142 1 Dmitry Chernyak
143 1 Dmitry Chernyak
Перерегистрировать узел в puppet
144 1 Dmitry Chernyak
<pre>
145 1 Dmitry Chernyak
gnt# gnt-instance console sci
146 1 Dmitry Chernyak
sci# puppetca --clean gnt1.fqdn
147 1 Dmitry Chernyak
</pre>
148 1 Dmitry Chernyak
149 1 Dmitry Chernyak
<pre>
150 1 Dmitry Chernyak
gntX# /var/lib/puppet/ssl/*
151 1 Dmitry Chernyak
gntX# /etc/init.d/puppet restart
152 1 Dmitry Chernyak
</pre>
153 1 Dmitry Chernyak
154 1 Dmitry Chernyak
h2. Замена жесткого диска
155 1 Dmitry Chernyak
156 1 Dmitry Chernyak
Скопировать разметку с существующего (только для дисков одной модели!)
157 1 Dmitry Chernyak
<pre>
158 1 Dmitry Chernyak
# sfdisk -d /dev/sda|sfdisk /dev/sdX
159 1 Dmitry Chernyak
</pre>
160 1 Dmitry Chernyak
Проверить
161 1 Dmitry Chernyak
<pre>
162 1 Dmitry Chernyak
# fdisk -l
163 1 Dmitry Chernyak
</pre>
164 1 Dmitry Chernyak
Добавить в RAID
165 1 Dmitry Chernyak
<pre>
166 1 Dmitry Chernyak
# mdadm --manage /dev/md0 --add /dev/sdX1
167 1 Dmitry Chernyak
# mdadm --manage /dev/md1 --add /dev/sdX2
168 1 Dmitry Chernyak
# mdadm --manage /dev/md2 --add /dev/sdX3
169 1 Dmitry Chernyak
</pre>
170 1 Dmitry Chernyak
Проверить
171 1 Dmitry Chernyak
<pre>
172 1 Dmitry Chernyak
cat /proc/mdstat
173 1 Dmitry Chernyak
</pre>
174 14 Владимир Ипатов
175 14 Владимир Ипатов
*ПРИМЕЧАНИЕ*: На данный момент существует проблема, при которой некоторые действия с виртуальными машинами во время ребилда
176 14 Владимир Ипатов
рейд массива могут привести к дедлоку и последующей остановке работы всего кластера. На данный момент известно, что это
177 14 Владимир Ипатов
с большой долей вероятности происходит при старте виртуальной машины и при создании новой виртуальной машины во время ребилда.
178 14 Владимир Ипатов
В связи с этим настоятельно рекомендуется ребилдить массивы на ноде в режиме оффлайн, лишенной всякой дисковой нагрузки.
179 14 Владимир Ипатов
Как привести ноду в это состояние, описано выше.
180 14 Владимир Ипатов
Здесь можно подробнее прочитать про технические подробности проблемы: (здесь ссылка на баг)