Проект

Общее

Профиль

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

Dmitry Chernyak, 13.11.2012 09:18

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