Проект

Общее

Профиль

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

Dmitry Chernyak, 14.02.2013 17:39

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 15 Dmitry Chernyak
Если при отключении узла он помечался как offline (см. выше), то надо вернуть его в строй:
86 15 Dmitry Chernyak
<pre>
87 15 Dmitry Chernyak
gnt# gnt-node modify -C yes -O no gntX
88 15 Dmitry Chernyak
</pre>
89 15 Dmitry Chernyak
90 1 Dmitry Chernyak
Если на узле сохранились данные, то для включения его обратно в кластер:
91 1 Dmitry Chernyak
92 1 Dmitry Chernyak
Скопировать на него свежую конфигурацию с нового master-а
93 1 Dmitry Chernyak
<pre>
94 1 Dmitry Chernyak
gnt# gnt-cluster redist-conf
95 1 Dmitry Chernyak
</pre>
96 1 Dmitry Chernyak
97 1 Dmitry Chernyak
Запустить на нем ganeti-демоны
98 1 Dmitry Chernyak
<pre>
99 1 Dmitry Chernyak
gntX# /etc/init.d/ganeti restart
100 1 Dmitry Chernyak
</pre>
101 1 Dmitry Chernyak
102 2 Владимир Ипатов
h2. Плановый вывод узла из эксплуатации
103 3 Владимир Ипатов
104 2 Владимир Ипатов
Мигрируем виртуальные машины:
105 2 Владимир Ипатов
<pre>
106 8 Dmitry Chernyak
gnt# gnt-instance migrate имя_машины
107 2 Владимир Ипатов
</pre>
108 2 Владимир Ипатов
109 8 Dmitry Chernyak
Если выводимый узел - мастер, то нужно назначить нового мастера(см. выше *Штатное переключение master узла*).
110 1 Dmitry Chernyak
111 8 Dmitry Chernyak
Вывести узел из списка кандидатов на мастера и перевести его в режим offline (это предотвратит появление сообщений об "аварии"):
112 2 Владимир Ипатов
<pre>
113 8 Dmitry Chernyak
gnt# gnt-node modify -C no -O yes УЗЕЛ
114 2 Владимир Ипатов
</pre>
115 2 Владимир Ипатов
116 2 Владимир Ипатов
Далее узел можно просто выключить.
117 1 Dmitry Chernyak
118 1 Dmitry Chernyak
h3. Возврат узла в кластер
119 1 Dmitry Chernyak
120 8 Dmitry Chernyak
После включения узла нужно сообщить кластеру, что узел вернулся в строй:
121 1 Dmitry Chernyak
<pre>
122 8 Dmitry Chernyak
gnt# gnt-node modify -C yes -O no УЗЕЛ
123 8 Dmitry Chernyak
</pre>
124 8 Dmitry Chernyak
125 8 Dmitry Chernyak
Однако, если у вас имеются сомнения в том, что узел остался в рабочем состоянии, то лучше выполнить:
126 8 Dmitry Chernyak
<pre>
127 8 Dmitry Chernyak
gnt# gnt-node add --readd УЗЕЛ
128 2 Владимир Ипатов
</pre> 
129 8 Dmitry Chernyak
130 8 Dmitry Chernyak
В любом случае, после этого нужно подождать около 5 минут, чтобы демон watcher поднял drbd, либо инициировать процесс вручную:
131 7 Dmitry Chernyak
<pre>
132 8 Dmitry Chernyak
gnt# gnt-cluster verify-disks
133 5 Владимир Ипатов
</pre>
134 8 Dmitry Chernyak
135 2 Владимир Ипатов
136 1 Dmitry Chernyak
h2. Замена узла на новый
137 1 Dmitry Chernyak
138 17 Dmitry Chernyak
Удалить старый узел из /root/.ssh/known_hosts
139 17 Dmitry Chernyak
140 1 Dmitry Chernyak
Добавить узел в кластер
141 1 Dmitry Chernyak
<pre>
142 1 Dmitry Chernyak
gnt# gnt-node add --readd gntX
143 1 Dmitry Chernyak
</pre>
144 1 Dmitry Chernyak
145 5 Владимир Ипатов
Для всех виртуалок, которые имеют secondary на подключенном узле:
146 1 Dmitry Chernyak
<pre>
147 1 Dmitry Chernyak
gnt# gnt-instance replace-disks --submit -s INSTANCE
148 1 Dmitry Chernyak
</pre>
149 1 Dmitry Chernyak
150 18 Dmitry Chernyak
Если предыдущая команда выдает ошибку, вроде:
151 18 Dmitry Chernyak
<pre>
152 18 Dmitry Chernyak
Failure: command execution error:
153 18 Dmitry Chernyak
Can't find disk/0 on node gntX: disk not found
154 18 Dmitry Chernyak
</pre>
155 18 Dmitry Chernyak
156 18 Dmitry Chernyak
то надо использовать:
157 18 Dmitry Chernyak
<pre>
158 18 Dmitry Chernyak
gnt# gnt-instance replace-disks --submit --auto INSTANCE
159 18 Dmitry Chernyak
</pre>
160 18 Dmitry Chernyak
161 1 Dmitry Chernyak
Перерегистрировать узел в puppet
162 1 Dmitry Chernyak
<pre>
163 1 Dmitry Chernyak
gnt# gnt-instance console sci
164 17 Dmitry Chernyak
sci# puppetca --clean gntX.fqdn
165 1 Dmitry Chernyak
</pre>
166 1 Dmitry Chernyak
167 1 Dmitry Chernyak
<pre>
168 17 Dmitry Chernyak
gntX# rm -r /var/lib/puppet/ssl/*
169 1 Dmitry Chernyak
gntX# /etc/init.d/puppet restart
170 1 Dmitry Chernyak
</pre>
171 1 Dmitry Chernyak
172 1 Dmitry Chernyak
h2. Замена жесткого диска
173 1 Dmitry Chernyak
174 1 Dmitry Chernyak
Скопировать разметку с существующего (только для дисков одной модели!)
175 1 Dmitry Chernyak
<pre>
176 1 Dmitry Chernyak
# sfdisk -d /dev/sda|sfdisk /dev/sdX
177 1 Dmitry Chernyak
</pre>
178 1 Dmitry Chernyak
Проверить
179 1 Dmitry Chernyak
<pre>
180 1 Dmitry Chernyak
# fdisk -l
181 1 Dmitry Chernyak
</pre>
182 1 Dmitry Chernyak
Добавить в RAID
183 1 Dmitry Chernyak
<pre>
184 1 Dmitry Chernyak
# mdadm --manage /dev/md0 --add /dev/sdX1
185 1 Dmitry Chernyak
# mdadm --manage /dev/md1 --add /dev/sdX2
186 1 Dmitry Chernyak
# mdadm --manage /dev/md2 --add /dev/sdX3
187 1 Dmitry Chernyak
</pre>
188 1 Dmitry Chernyak
Проверить
189 1 Dmitry Chernyak
<pre>
190 1 Dmitry Chernyak
cat /proc/mdstat
191 1 Dmitry Chernyak
</pre>
192 14 Владимир Ипатов
193 16 Dmitry Chernyak
*ПРИМЕЧАНИЕ*: Мы настоятельно рекомендуем освбождать узел, на котором происходит воссоздание RAID-массива
194 16 Dmitry Chernyak
от выполняющихся виртуальных машин и переносить их (предварительно) на парный узел.
195 16 Dmitry Chernyak
196 16 Dmitry Chernyak
В период воссоздания RAID-массива отдельные системные процессы, связанные с виртуализацией могут вызвать нестабильность
197 16 Dmitry Chernyak
системы и привести к зависанию виртуальных машин.