Проект

Общее

Профиль

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

Владимир Ипатов, 28.01.2015 04:04

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