Проект

Общее

Профиль

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

Владимир Ипатов, 21.08.2014 17:27

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 24 Владимир Ипатов
для ganeti 2.10:
26 24 Владимир Ипатов
<pre>
27 24 Владимир Ипатов
su - gnt-masterd -s /bin/bash -c "/usr/sbin/ganeti-masterd --no-voting"
28 24 Владимир Ипатов
</pre>
29 11 Dmitry Chernyak
30 11 Dmitry Chernyak
h3. Перенос виртуальных машин с аварийного узла
31 11 Dmitry Chernyak
32 13 Dmitry Chernyak
Эта операция выполняется один раз. Она поменяет узел запуска для виртуальной машины.
33 13 Dmitry Chernyak
Перенесенные машины автоматически запустятся, если таково их состояние по-умолчанию.
34 13 Dmitry Chernyak
35 13 Dmitry Chernyak
Лучше мигрировать или перезапустить виртуальные машины в штатном режиме, до того, как их узел будет отключен.
36 13 Dmitry Chernyak
Однако, если это случилось внезапно, тогда необходимо дать команду:
37 13 Dmitry Chernyak
38 11 Dmitry Chernyak
<pre>
39 11 Dmitry Chernyak
gnt# gnt-node failover --ignore-consistency gntX
40 11 Dmitry Chernyak
</pre>
41 11 Dmitry Chernyak
42 11 Dmitry Chernyak
43 11 Dmitry Chernyak
h3. Запуск всех виртуальных машин
44 11 Dmitry Chernyak
45 11 Dmitry Chernyak
<pre>
46 11 Dmitry Chernyak
gnt# gnt-instance startup --force --all
47 11 Dmitry Chernyak
</pre>
48 11 Dmitry Chernyak
49 1 Dmitry Chernyak
h2. Штатное переключение master-узла
50 1 Dmitry Chernyak
51 1 Dmitry Chernyak
Оба узла запущены, смена master-узла производится в штатном режиме.
52 1 Dmitry Chernyak
На master-candidate (gntX):
53 1 Dmitry Chernyak
<pre>
54 1 Dmitry Chernyak
gntX# gnt-cluster master-failover
55 1 Dmitry Chernyak
</pre>
56 1 Dmitry Chernyak
57 1 Dmitry Chernyak
h2. Выход из строя master-узла
58 1 Dmitry Chernyak
59 1 Dmitry Chernyak
Основной узел (в примере - gnt1) оказывается выключен в результате аппаратной аварии.
60 1 Dmitry Chernyak
61 1 Dmitry Chernyak
Запустить управляющий демон на узле master-candidate (gntX):
62 1 Dmitry Chernyak
<pre>
63 1 Dmitry Chernyak
gntX# ganeti-masterd --no-voting
64 1 Dmitry Chernyak
</pre>
65 1 Dmitry Chernyak
66 1 Dmitry Chernyak
Активировать новый master-узел:
67 1 Dmitry Chernyak
<pre>
68 1 Dmitry Chernyak
gntX# gnt-cluster master-failover --no-voting
69 1 Dmitry Chernyak
</pre>
70 9 Dmitry Chernyak
71 9 Dmitry Chernyak
Пометить отключенный узел offline, чтобы master в него не долбился
72 9 Dmitry Chernyak
-С = master-candidate
73 9 Dmitry Chernyak
-O = offline
74 9 Dmitry Chernyak
<pre>
75 9 Dmitry Chernyak
gnt# gnt-node modify -C no -O yes gntY
76 9 Dmitry Chernyak
</pre>
77 10 Dmitry Chernyak
78 9 Dmitry Chernyak
Запустить все виртуалки отключенного узла на резервном:
79 9 Dmitry Chernyak
<pre>
80 9 Dmitry Chernyak
gnt# gnt-node failover --ignore-consistency gnt1
81 9 Dmitry Chernyak
</pre>
82 9 Dmitry Chernyak
83 1 Dmitry Chernyak
h2. Возврат основного узла в строй
84 1 Dmitry Chernyak
85 1 Dmitry Chernyak
Старый основной узел не будет автоматически запускать управляющего демона.
86 1 Dmitry Chernyak
* если не найдет парного узла,
87 1 Dmitry Chernyak
* если найдет парный узел и узнает, что он стал новым master-ом.
88 1 Dmitry Chernyak
89 15 Dmitry Chernyak
Если при отключении узла он помечался как offline (см. выше), то надо вернуть его в строй:
90 15 Dmitry Chernyak
<pre>
91 15 Dmitry Chernyak
gnt# gnt-node modify -C yes -O no gntX
92 15 Dmitry Chernyak
</pre>
93 15 Dmitry Chernyak
94 1 Dmitry Chernyak
Если на узле сохранились данные, то для включения его обратно в кластер:
95 1 Dmitry Chernyak
96 1 Dmitry Chernyak
Скопировать на него свежую конфигурацию с нового master-а
97 1 Dmitry Chernyak
<pre>
98 1 Dmitry Chernyak
gnt# gnt-cluster redist-conf
99 1 Dmitry Chernyak
</pre>
100 1 Dmitry Chernyak
101 1 Dmitry Chernyak
Запустить на нем ganeti-демоны
102 1 Dmitry Chernyak
<pre>
103 1 Dmitry Chernyak
gntX# /etc/init.d/ganeti restart
104 1 Dmitry Chernyak
</pre>
105 1 Dmitry Chernyak
106 2 Владимир Ипатов
h2. Плановый вывод узла из эксплуатации
107 3 Владимир Ипатов
108 2 Владимир Ипатов
Мигрируем виртуальные машины:
109 2 Владимир Ипатов
<pre>
110 8 Dmitry Chernyak
gnt# gnt-instance migrate имя_машины
111 2 Владимир Ипатов
</pre>
112 2 Владимир Ипатов
113 8 Dmitry Chernyak
Если выводимый узел - мастер, то нужно назначить нового мастера(см. выше *Штатное переключение master узла*).
114 1 Dmitry Chernyak
115 8 Dmitry Chernyak
Вывести узел из списка кандидатов на мастера и перевести его в режим offline (это предотвратит появление сообщений об "аварии"):
116 2 Владимир Ипатов
<pre>
117 8 Dmitry Chernyak
gnt# gnt-node modify -C no -O yes УЗЕЛ
118 2 Владимир Ипатов
</pre>
119 2 Владимир Ипатов
120 2 Владимир Ипатов
Далее узел можно просто выключить.
121 1 Dmitry Chernyak
122 1 Dmitry Chernyak
h3. Возврат узла в кластер
123 1 Dmitry Chernyak
124 8 Dmitry Chernyak
После включения узла нужно сообщить кластеру, что узел вернулся в строй:
125 1 Dmitry Chernyak
<pre>
126 8 Dmitry Chernyak
gnt# gnt-node modify -C yes -O no УЗЕЛ
127 8 Dmitry Chernyak
</pre>
128 8 Dmitry Chernyak
129 8 Dmitry Chernyak
Однако, если у вас имеются сомнения в том, что узел остался в рабочем состоянии, то лучше выполнить:
130 8 Dmitry Chernyak
<pre>
131 8 Dmitry Chernyak
gnt# gnt-node add --readd УЗЕЛ
132 2 Владимир Ипатов
</pre> 
133 8 Dmitry Chernyak
134 8 Dmitry Chernyak
В любом случае, после этого нужно подождать около 5 минут, чтобы демон watcher поднял drbd, либо инициировать процесс вручную:
135 7 Dmitry Chernyak
<pre>
136 8 Dmitry Chernyak
gnt# gnt-cluster verify-disks
137 5 Владимир Ипатов
</pre>
138 8 Dmitry Chernyak
139 2 Владимир Ипатов
140 1 Dmitry Chernyak
h2. Замена узла на новый
141 1 Dmitry Chernyak
142 17 Dmitry Chernyak
Удалить старый узел из /root/.ssh/known_hosts
143 17 Dmitry Chernyak
144 1 Dmitry Chernyak
Добавить узел в кластер
145 1 Dmitry Chernyak
<pre>
146 1 Dmitry Chernyak
gnt# gnt-node add --readd gntX
147 1 Dmitry Chernyak
</pre>
148 1 Dmitry Chernyak
149 5 Владимир Ипатов
Для всех виртуалок, которые имеют secondary на подключенном узле:
150 1 Dmitry Chernyak
<pre>
151 19 Dmitry Chernyak
gnt# gnt-instance replace-disks --auto [--submit] INSTANCE
152 18 Dmitry Chernyak
</pre>
153 18 Dmitry Chernyak
154 1 Dmitry Chernyak
Перерегистрировать узел в puppet
155 1 Dmitry Chernyak
<pre>
156 1 Dmitry Chernyak
gnt# gnt-instance console sci
157 17 Dmitry Chernyak
sci# puppetca --clean gntX.fqdn
158 1 Dmitry Chernyak
</pre>
159 1 Dmitry Chernyak
160 1 Dmitry Chernyak
<pre>
161 17 Dmitry Chernyak
gntX# rm -r /var/lib/puppet/ssl/*
162 1 Dmitry Chernyak
gntX# /etc/init.d/puppet restart
163 1 Dmitry Chernyak
</pre>
164 1 Dmitry Chernyak
165 1 Dmitry Chernyak
h2. Замена жесткого диска
166 1 Dmitry Chernyak
167 1 Dmitry Chernyak
Скопировать разметку с существующего (только для дисков одной модели!)
168 1 Dmitry Chernyak
<pre>
169 1 Dmitry Chernyak
# sfdisk -d /dev/sda|sfdisk /dev/sdX
170 1 Dmitry Chernyak
</pre>
171 1 Dmitry Chernyak
Проверить
172 1 Dmitry Chernyak
<pre>
173 1 Dmitry Chernyak
# fdisk -l
174 1 Dmitry Chernyak
</pre>
175 1 Dmitry Chernyak
Добавить в RAID
176 1 Dmitry Chernyak
<pre>
177 1 Dmitry Chernyak
# mdadm --manage /dev/md0 --add /dev/sdX1
178 1 Dmitry Chernyak
# mdadm --manage /dev/md1 --add /dev/sdX2
179 1 Dmitry Chernyak
# mdadm --manage /dev/md2 --add /dev/sdX3
180 1 Dmitry Chernyak
</pre>
181 1 Dmitry Chernyak
Проверить
182 1 Dmitry Chernyak
<pre>
183 1 Dmitry Chernyak
cat /proc/mdstat
184 1 Dmitry Chernyak
</pre>
185 21 Владимир Ипатов
186 21 Владимир Ипатов
h2. Восстановление при split-brain:
187 21 Владимир Ипатов
188 21 Владимир Ипатов
Если при activate-disks или при команде запуска/фейловера drbd ругается следующим образом в dmesg:
189 21 Владимир Ипатов
<pre>
190 21 Владимир Ипатов
[10893282.055705] block drbd21: Handshake successful: Agreed network protocol version 96
191 21 Владимир Ипатов
[10893282.056003] block drbd21: Peer authenticated using 16 bytes of 'md5' HMAC
192 21 Владимир Ипатов
[10893282.056008] block drbd21: conn( WFConnection -> WFReportParams ) 
193 21 Владимир Ипатов
[10893282.056031] block drbd21: Starting asender thread (from drbd21_receiver [20355])
194 21 Владимир Ипатов
[10893282.056303] block drbd21: data-integrity-alg: <not-used>
195 21 Владимир Ипатов
[10893282.056319] block drbd21: drbd_sync_handshake:
196 21 Владимир Ипатов
[10893282.056322] block drbd21: self 5323ED521900E1F9:FCBCCB0FBF14BA04:480CD30FE2A601EA:480BD30FE2A601EB bits:46 flags:0
197 21 Владимир Ипатов
[10893282.056324] block drbd21: peer F3B949426796C7F8:FCBCCB0FBF14BA05:480CD30FE2A601EB:480BD30FE2A601EB bits:12288 flags:2
198 21 Владимир Ипатов
[10893282.056326] block drbd21: uuid_compare()=100 by rule 90
199 21 Владимир Ипатов
[10893282.056329] block drbd21: helper command: /bin/true initial-split-brain minor-21
200 21 Владимир Ипатов
[10893282.073918] block drbd21: meta connection shut down by peer.
201 21 Владимир Ипатов
[10893282.073976] block drbd21: conn( WFReportParams -> NetworkFailure ) 
202 21 Владимир Ипатов
[10893282.073981] block drbd21: asender terminated
203 21 Владимир Ипатов
[10893282.073983] block drbd21: Terminating drbd21_asender
204 21 Владимир Ипатов
[10893282.080752] block drbd21: helper command: /bin/true initial-split-brain minor-21 exit code 0 (0x0)
205 21 Владимир Ипатов
[10893282.080754] block drbd21: Split-Brain detected but unresolved, dropping connection!
206 21 Владимир Ипатов
[10893282.080844] block drbd21: helper command: /bin/true split-brain minor-21
207 21 Владимир Ипатов
[10893282.081481] block drbd21: helper command: /bin/true split-brain minor-21 exit code 0 (0x0)
208 21 Владимир Ипатов
[10893282.081484] block drbd21: conn( NetworkFailure -> Disconnecting ) 
209 21 Владимир Ипатов
[10893282.081487] block drbd21: error receiving ReportState, l: 4!
210 21 Владимир Ипатов
[10893282.081577] block drbd21: Connection closed
211 21 Владимир Ипатов
[10893282.081582] block drbd21: conn( Disconnecting -> StandAlone ) 
212 21 Владимир Ипатов
[10893282.081603] block drbd21: receiver terminated
213 21 Владимир Ипатов
[10893282.081604] block drbd21: Terminating drbd21_receiver
214 21 Владимир Ипатов
[10893282.711704] block drbd22: Handshake successful: Agreed network protocol version 96
215 21 Владимир Ипатов
[10893282.712019] block drbd22: Peer authenticated using 16 bytes of 'md5' HMAC
216 21 Владимир Ипатов
[10893282.712024] block drbd22: conn( WFConnection -> WFReportParams ) 
217 21 Владимир Ипатов
[10893282.712047] block drbd22: Starting asender thread (from drbd22_receiver [23709])
218 21 Владимир Ипатов
[10893282.712301] block drbd22: data-integrity-alg: <not-used>
219 21 Владимир Ипатов
[10893282.712332] block drbd22: drbd_sync_handshake:
220 21 Владимир Ипатов
[10893282.712334] block drbd22: self CD794FB0989E2B95:DD71B308E6D3FE88:AD335B3ED83CE576:AD325B3ED83CE577 bits:7 flags:0
221 21 Владимир Ипатов
[10893282.712336] block drbd22: peer 17B47E98FD204408:DD71B308E6D3FE89:AD335B3ED83CE577:AD325B3ED83CE577 bits:3072 flags:2
222 21 Владимир Ипатов
[10893282.712338] block drbd22: uuid_compare()=100 by rule 90
223 21 Владимир Ипатов
[10893282.712341] block drbd22: helper command: /bin/true initial-split-brain minor-22
224 21 Владимир Ипатов
[10893282.713155] block drbd22: helper command: /bin/true initial-split-brain minor-22 exit code 0 (0x0)
225 21 Владимир Ипатов
[10893282.713157] block drbd22: Split-Brain detected but unresolved, dropping connection!
226 21 Владимир Ипатов
[10893282.713251] block drbd22: helper command: /bin/true split-brain minor-22
227 21 Владимир Ипатов
[10893282.713820] block drbd22: meta connection shut down by peer.
228 21 Владимир Ипатов
[10893282.713889] block drbd22: conn( WFReportParams -> NetworkFailure ) 
229 21 Владимир Ипатов
[10893282.713895] block drbd22: asender terminated
230 21 Владимир Ипатов
[10893282.713897] block drbd22: Terminating drbd22_asender
231 21 Владимир Ипатов
[10893282.713945] block drbd22: helper command: /bin/true split-brain minor-22 exit code 0 (0x0)
232 21 Владимир Ипатов
[10893282.713948] block drbd22: conn( NetworkFailure -> Disconnecting ) 
233 21 Владимир Ипатов
[10893282.713952] block drbd22: error receiving ReportState, l: 4!
234 21 Владимир Ипатов
[10893282.714046] block drbd22: Connection closed
235 21 Владимир Ипатов
[10893282.714050] block drbd22: conn( Disconnecting -> StandAlone ) 
236 21 Владимир Ипатов
[10893282.714070] block drbd22: receiver terminated
237 21 Владимир Ипатов
[10893282.714072] block drbd22: Terminating drbd22_receiver
238 21 Владимир Ипатов
[10893283.140310] block drbd21: conn( StandAlone -> Unconnected ) 
239 21 Владимир Ипатов
[10893283.140323] block drbd21: Starting receiver thread (from drbd21_worker [23682])
240 21 Владимир Ипатов
[10893283.140363] block drbd21: receiver (re)started
241 21 Владимир Ипатов
[10893283.140366] block drbd21: conn( Unconnected -> WFConnection ) 
242 21 Владимир Ипатов
[10893283.498632] block drbd22: conn( StandAlone -> Unconnected ) 
243 21 Владимир Ипатов
[10893283.498646] block drbd22: Starting receiver thread (from drbd22_worker [23702])
244 21 Владимир Ипатов
[10893283.498705] block drbd22: receiver (re)started
245 21 Владимир Ипатов
[10893283.498710] block drbd22: conn( Unconnected -> WFConnection ) 
246 21 Владимир Ипатов
</pre>
247 21 Владимир Ипатов
Здесь мы видим:
248 21 Владимир Ипатов
<pre>
249 21 Владимир Ипатов
[10893282.713155] block drbd22: helper command: /bin/true initial-split-brain minor-22 exit code 0 (0x0)
250 21 Владимир Ипатов
[10893282.713157] block drbd22: Split-Brain detected but unresolved, dropping connection!
251 21 Владимир Ипатов
</pre>
252 21 Владимир Ипатов
253 21 Владимир Ипатов
то, во-первых, нужно установить, где находятся актуальные данные.
254 21 Владимир Ипатов
Когда когда точно установлено, где актуальные данные, мы идем на ноду, где данные *битые*, и там даем команду:
255 21 Владимир Ипатов
<pre>
256 21 Владимир Ипатов
drbdsetup /dev/drbd23 invalidate
257 21 Владимир Ипатов
</pre>
258 21 Владимир Ипатов
Затем на мастере дать activate-disks для этого инстанса, и проследить, что все drbd ресурсы отсинкались.
259 22 Dmitry Chernyak
260 22 Dmitry Chernyak
h2. Восстановление outdated диска
261 22 Dmitry Chernyak
262 22 Dmitry Chernyak
Ситуация: primary узел умер, диск на secondary узле считает себя outdated.
263 22 Dmitry Chernyak
Watcher пишет письма, содержащие в логе такую строку:
264 22 Dmitry Chernyak
<pre>
265 23 Dmitry Chernyak
Error while assembling disk: drbd7: can't make drbd device primary:
266 23 Dmitry Chernyak
 /dev/drbd7: State change failed: (-2) Need access to UpToDate data\n
267 22 Dmitry Chernyak
</pre>
268 22 Dmitry Chernyak
269 22 Dmitry Chernyak
Виртуалка не поднимается, диски не собираются (точнее собираются и отключаются обратно).
270 22 Dmitry Chernyak
Требуется собрать диск вручную и сказать ему что он primary
271 22 Dmitry Chernyak
272 22 Dmitry Chernyak
<pre>
273 22 Dmitry Chernyak
root@gnt1:~# gnt-instance info ИНСТАНС
274 22 Dmitry Chernyak
[skip]
275 22 Dmitry Chernyak
    - disk/0: drbd8, size 117.2G
276 22 Dmitry Chernyak
      access mode: rw
277 22 Dmitry Chernyak
      nodeA:       gnt2.XXXX.ru, minor=2
278 22 Dmitry Chernyak
      nodeB:       gnt3.XXXX.ru, minor=0
279 22 Dmitry Chernyak
      port:        11012
280 22 Dmitry Chernyak
      auth key:    06ca8046f1323d0b154c500f41c0d625cbd796c3
281 22 Dmitry Chernyak
      on primary:  /dev/drbd2 (147:2) in sync, status *DEGRADED*
282 22 Dmitry Chernyak
      child devices:
283 22 Dmitry Chernyak
        - child 0: lvm, size 117.2G
284 22 Dmitry Chernyak
          logical_id: xenvg/813feab3-f7a5-41bb-8a34-5b053ad1c8a6.disk0_data
285 22 Dmitry Chernyak
          on primary: /dev/xenvg/813feab3-f7a5-41bb-8a34-5b053ad1c8a6.disk0_data (253:11)
286 22 Dmitry Chernyak
        - child 1: lvm, size 128M
287 22 Dmitry Chernyak
          logical_id: xenvg/813feab3-f7a5-41bb-8a34-5b053ad1c8a6.disk0_meta
288 22 Dmitry Chernyak
          on primary: /dev/xenvg/813feab3-f7a5-41bb-8a34-5b053ad1c8a6.disk0_meta (253:12)
289 22 Dmitry Chernyak
290 22 Dmitry Chernyak
</pre>
291 1 Dmitry Chernyak
292 1 Dmitry Chernyak
<pre>
293 23 Dmitry Chernyak
root@gnt2:~# drbdsetup /dev/drbd8 disk /dev/xenvg/813feab3-f7a5-41bb-8a34-5b053ad1c8a6.disk0_data \
294 23 Dmitry Chernyak
 /dev/xenvg/813feab3-f7a5-41bb-8a34-5b053ad1c8a6.disk0_meta 0
295 22 Dmitry Chernyak
</pre>
296 22 Dmitry Chernyak
297 22 Dmitry Chernyak
<pre>
298 22 Dmitry Chernyak
root@gnt2:~# drbd-overview 
299 22 Dmitry Chernyak
  0:??not-found??  Connected  Secondary/Primary UpToDate/UpToDate C      r----- 
300 22 Dmitry Chernyak
  8:??not-found??  StandAlone Secondary/Unknown Outdated/DUnknown r-----
301 22 Dmitry Chernyak
</pre> 
302 22 Dmitry Chernyak
303 22 Dmitry Chernyak
root@gnt2:~# drbdsetup /dev/drbd8 primary -f
304 22 Dmitry Chernyak
305 22 Dmitry Chernyak
<pre>
306 22 Dmitry Chernyak
root@gnt2:~# drbd-overview 
307 22 Dmitry Chernyak
  0:??not-found??  Connected  Secondary/Primary UpToDate/UpToDate C      r----- 
308 22 Dmitry Chernyak
  8:??not-found??  StandAlone Primary/Unknown   UpToDate/DUnknown r-----
309 22 Dmitry Chernyak
</pre> 
310 22 Dmitry Chernyak
311 22 Dmitry Chernyak
<pre>
312 22 Dmitry Chernyak
root@gnt2:~# drbdsetup /dev/drbd8 down
313 22 Dmitry Chernyak
</pre>