LXF100-101:Hardcore Linux
Kipruss (обсуждение | вклад) м (→Три файла конфигурации) |
Kipruss (обсуждение | вклад) м (оформление) |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 4: | Строка 4: | ||
− | Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так: | + | Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте http://www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так: |
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером. | # В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером. | ||
Строка 12: | Строка 12: | ||
===Начинаем: компоненты системы=== | ===Начинаем: компоненты системы=== | ||
− | + | [[Изображение:Img_100_87_1.png|thumb|400px|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]] | |
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает. | Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает. | ||
− | На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на | + | На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на Рис. 1. |
===Установка heartbeat-соединения=== | ===Установка heartbeat-соединения=== | ||
Строка 24: | Строка 24: | ||
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду: | Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду: | ||
− | < | + | <source lang="bash"> |
cat /dev/ttyS0 | cat /dev/ttyS0 | ||
− | </ | + | </source> |
а на запасном – команду: | а на запасном – команду: | ||
− | < | + | <source lang="bash"> |
cat /etc/fstab > /dev/ttyS0 | cat /etc/fstab > /dev/ttyS0 | ||
− | </ | + | </source> |
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении. | На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении. | ||
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя. | ''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя. | ||
− | |||
− | |||
===Настройка сетевых интерфейсов=== | ===Настройка сетевых интерфейсов=== | ||
Строка 58: | Строка 56: | ||
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет: | Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет: | ||
− | < | + | <source lang="ini" line="GESHI_NORMAL_LINE_NUMBERS"> |
− | + | udpport 694 | |
− | + | bcast eth1 | |
− | + | serial /dev/ttyS0 | |
− | + | baud 9600 | |
− | + | keepalive 2 | |
− | + | deadtime 20 | |
− | + | initdead 60 | |
− | + | node primary.example.com | |
− | + | node backup.example.com | |
− | </ | + | </source> |
Строки <font color=darkred>1</font> и <font color=darkred>2</font> задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках <font color=darkred>3</font> и <font color=darkred>3</font> задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки <font color=darkred>1</font> и <font color=darkred>2</font>. В строке <font color=darkred>5</font> задается тайм-аут между сообщениями, а строка <font color=darkred>6</font> определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке <font color=darkred>7</font> указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках <font color=darkred>8</font> и <font color=darkred>9</font> задаются имена хостов для основного и запасного серверов (те, что возвращает команда <font color=darkred>uname -n</font>). | Строки <font color=darkred>1</font> и <font color=darkred>2</font> задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках <font color=darkred>3</font> и <font color=darkred>3</font> задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки <font color=darkred>1</font> и <font color=darkred>2</font>. В строке <font color=darkred>5</font> задается тайм-аут между сообщениями, а строка <font color=darkred>6</font> определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке <font color=darkred>7</font> указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках <font color=darkred>8</font> и <font color=darkred>9</font> задаются имена хостов для основного и запасного серверов (те, что возвращает команда <font color=darkred>uname -n</font>). | ||
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду <font color=darkred>logger</font>, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит: | Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду <font color=darkred>logger</font>, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит: | ||
− | < | + | <source lang="bash"> |
− | + | #!/bin/bash | |
− | + | logger $0 called with argument $1 | |
− | </ | + | </source> |
Скрипт нужно сделать исполняемым, например, так: | Скрипт нужно сделать исполняемым, например, так: | ||
− | < | + | <source lang="bash"> |
− | + | chmod 755 tester | |
− | </ | + | </source> |
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” <font color=blue>[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]</font>. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка: | В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” <font color=blue>[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]</font>. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка: | ||
Строка 95: | Строка 93: | ||
Нужно позаботиться, чтобы читать этот файл мог только администратор: | Нужно позаботиться, чтобы читать этот файл мог только администратор: | ||
− | < | + | <source lang="bash"> |
chmod 600 authkeys | chmod 600 authkeys | ||
− | </ | + | </source> |
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится. | Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится. | ||
Строка 104: | Строка 102: | ||
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите <font color=darkred>tail -f</font> для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды: | Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите <font color=darkred>tail -f</font> для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды: | ||
− | < | + | <source lang="bash"> |
/etc/init.d/heartbeat start | /etc/init.d/heartbeat start | ||
− | </ | + | </source> |
{{Врезка | {{Врезка | ||
Строка 130: | Строка 128: | ||
heartbeat: [9615]: WARN: No STONITH device configured. | heartbeat: [9615]: WARN: No STONITH device configured. | ||
heartbeat: [9615]: WARN: Shared disks are not protected. | heartbeat: [9615]: WARN: Shared disks are not protected. | ||
− | heartbeat: [9615]: info: Resources being acquired from primary.example. | + | heartbeat: [9615]: info: Resources being acquired from primary.example.com. |
− | + | ||
heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead. | heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead. | ||
− | heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/ | + | heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/ResourceManager listkeys backup.example.com] to acquire. |
− | + | ||
harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status | harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status | ||
mach_down[10329]: [10350]: info: Taking over resource group tester | mach_down[10329]: [10350]: info: Taking over resource group tester | ||
− | ResourceManager[10351]: [10362]: info: Acquiring resource group: | + | ResourceManager[10351]: [10362]: info: Acquiring resource group:primary.example.com tester |
− | + | ||
logger: /etc/ha.d/resource.d/tester called with argument status | logger: /etc/ha.d/resource.d/tester called with argument status | ||
− | ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/ | + | ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/tester start |
− | + | ||
logger: /etc/ha.d/resource.d/tester called with argument start | logger: /etc/ha.d/resource.d/tester called with argument start | ||
− | mach_down[10329]: [10384]: info: mach_down takeover complete for | + | mach_down[10329]: [10384]: info: mach_down takeover complete for node primary.example.com. |
− | node primary.example.com. | + | |
</code> | </code> | ||
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'': | Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'': | ||
− | < | + | <source lang="bash"> |
/etc/init.d/httpd start | /etc/init.d/httpd start | ||
− | </ | + | </source> |
− | и проверьте, что, открыв в браузере адрес | + | и проверьте, что, открыв в браузере адрес <font color=blue><nowiki>http://localhost</nowiki></font>, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами: |
− | < | + | <source lang="bash"> |
/etc/init.d/httpd stop | /etc/init.d/httpd stop | ||
chkconfig httpd --del | chkconfig httpd --del | ||
− | </ | + | </source> |
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его. | Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его. | ||
Строка 170: | Строка 163: | ||
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них: | После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них: | ||
− | < | + | <source lang="bash"> |
/etc/init.d/heartbeat start | /etc/init.d/heartbeat start | ||
− | </ | + | </source> |
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите: | Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите: | ||
Строка 179: | Строка 172: | ||
</code> | </code> | ||
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере <font color=darkred>192.168.0.50</font>) на наш сетевой интерфейс. Также запустите команду | и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере <font color=darkred>192.168.0.50</font>) на наш сетевой интерфейс. Также запустите команду | ||
− | < | + | <source lang="bash"> |
ps -ef | grep httpd | ps -ef | grep httpd | ||
− | </ | + | </source> |
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется. | которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется. | ||
Строка 188: | Строка 181: | ||
192.168.0.50 www.example.com | 192.168.0.50 www.example.com | ||
</code> | </code> | ||
− | в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес | + | в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес <font color=blue><nowiki>www.example.com</nowiki></font> с компьютера клиента. Откройте в браузере на клиентском компьютере страницу <font color=blue><nowiki>http://www.example.com</nowiki></font>. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду |
− | < | + | <source lang="bash"> |
arp -a | arp -a | ||
− | </ | + | </source> |
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким: | и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким: | ||
<code> | <code> | ||
Строка 200: | Строка 193: | ||
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой: | Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой: | ||
− | < | + | <source lang="bash"> |
/etc/init.d/heartbeat stop | /etc/init.d/heartbeat stop | ||
− | </ | + | </source> |
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил): | Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил): | ||
Строка 212: | Строка 205: | ||
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр <font color=darkred>deadtime</font> в файле '''ha.cf'''). | В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр <font color=darkred>deadtime</font> в файле '''ha.cf'''). | ||
− | На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу | + | На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу <font color=blue><nowiki>www.example.com</nowiki></font> в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда <font color=darkred>arp –a</font> вернула следующий результат: |
<code> | <code> | ||
www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0 | www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0 |
Текущая версия на 23:12, 7 марта 2009
|
|
|
Содержание |
[править] Кластеры: Повышаем отказоустойчивость.
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. Д-р Крис Браун покажет, как удержаться на плаву.
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа Heartbeat, найти которую можно на сайте http://www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). Heartbeat будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом Apache (httpd), но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:
- В обычном режиме необходимые сервисы (типа httpd) предоставляются основным сервером.
- Основной и запасной серверы постоянно обмениваются друг с другом сообщениями Heartbeat [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.
- Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера httpd).
- Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.
[править] Начинаем: компоненты системы
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами Heartbeat на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на Рис. 1.
[править] Установка heartbeat-соединения
Если обмен сигналами Heartbeat будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:
cat /dev/ttyS0
а на запасном – команду:
cat /etc/fstab > /dev/ttyS0
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.
Heartbeat будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик Heartbeat в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.
[править] Настройка сетевых интерфейсов
Оба сетевых интерфейса, которые участвуют в Heartbeat-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. Heartbeat назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.
[править] Три файла конфигурации
Сразу после установки Heartbeat нужно создать в каталоге /etc/ha.d три (да, три!) файла конфигурации, а именно:
- ha.cf Файл содержит настройки самого Heartbeat; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.
- haresources Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.
- authkey В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.
Начнем с ha.cf. Пример этого файла можно найти в документации на Heartbeat (/usr/share/doc/heartbeat/ha.cf). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в /etc/ha.d и использовать как отправную точку, или создать свой файл с нуля.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:
udpport 694
bcast eth1
serial /dev/ttyS0
baud 9600
keepalive 2
deadtime 20
initdead 60
node primary.example.com
node backup.example.com
Строки 1 и 2 задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках 3 и 3 задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки 1 и 2. В строке 5 задается тайм-аут между сообщениями, а строка 6 определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке 7 указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего Heartbeat начинает функционировать. В строках 8 и 9 задаются имена хостов для основного и запасного серверов (те, что возвращает команда uname -n).
Для начала попробуем управлять полностью фиктивным сервисом tester. Мы напишем скрипт, /etc/ha.d/resources.d/tester, вызываемый Heartbeat. Он будет всего лишь вызывать команду logger, которая сообщит нам (через syslogd), что скрипт был запущен. Вот как он выглядит:
#!/bin/bash logger $0 called with argument $1
Скрипт нужно сделать исполняемым, например, так:
chmod 755 tester
В следующем файле, haresources, содержится список ресурсов, которыми управляет Heartbeat. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” [англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации (/usr/share/doc/Heartbeat) – можете просто скопировать его в /etc/ha.d или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:
primary.example.com tester
Также нужно создать файл /etc/ha.d/authkeys, содержащий ключи, используемые для аутентификации Heartbeat-сообщений, например:
auth1 1 sha1 foobar
Нужно позаботиться, чтобы читать этот файл мог только администратор:
chmod 600 authkeys
Если права доступа к этому файлу есть у кого-то еще, Heartbeat не запустится.
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл ha.cf, возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.
Теперь можно запустить Heartbeat. Для отслеживания сообщений Heartbeat на обоих компьютерах запустите tail -f для файла журнала (/var/log/messages). Запустите программу с помощью команды:
/etc/init.d/heartbeat start
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
На обоих компьютерах действия Heartbeat будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:
logger: /etc/ha.d/resource.d/tester called with argument start
Оно означает, что основной сервер, как и ожидалось, запустил сервис tester.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Heartbeat запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис tester. Вот соответствующие строки журнала:
heartbeat: [9615]: WARN: node primary.example.com: is dead heartbeat: [9615]: WARN: No STONITH device configured. heartbeat: [9615]: WARN: Shared disks are not protected. heartbeat: [9615]: info: Resources being acquired from primary.example.com. heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead. heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/ResourceManager listkeys backup.example.com] to acquire. harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status mach_down[10329]: [10350]: info: Taking over resource group tester ResourceManager[10351]: [10362]: info: Acquiring resource group:primary.example.com tester logger: /etc/ha.d/resource.d/tester called with argument status ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/tester start logger: /etc/ha.d/resource.d/tester called with argument start mach_down[10329]: [10384]: info: mach_down takeover complete for node primary.example.com.
Первая проверка завершилась успешно, и пора поручить Heartbeat управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что Apache установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла /var/www/html/index.html, по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите httpd:
/etc/init.d/httpd start
и проверьте, что, открыв в браузере адрес http://localhost, вы видите эти файлы. Теперь остановите Apache и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:
/etc/init.d/httpd stop chkconfig httpd --del
Это важно, потому что Apache должен запуститься не во время загрузки, а только если Heartbeat запустил его.
Теперь нужно изменить файл haresources так:
primary.example.com httpd primary.example.com 192.168.0.50
В первой строке указывается сервис, которым будет управлять Heartbeat, а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске Heartbeat этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия Heartbeat, запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.
Предполагается, что Heartbeat будет управлять сервисами путем запуска скрипта, указанного в haresources, с аргументами start, stop или status. Конечно, это те самые аргументы скриптов каталога /etc/init.d, что используются для запуска сервисов во время загрузки системы, и, по правде говоря, Heartbeat будет автоматически искать скрипт httpd в каталоге /etc/init.d.
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить Heartbeat на каждом из них:
/etc/init.d/heartbeat start
Когда Heartbeat войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:
ip addr show
и проверьте, что Heartbeat назначил второй IP-адрес (в нашем примере 192.168.0.50) на наш сетевой интерфейс. Также запустите команду
ps -ef | grep httpd
которая проверит, что сервис httpd запущен. На запасной сервер второй IP-адрес не назначается, а сервис httpd на нем не выполняется.
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку
192.168.0.50 www.example.com
в файл /etc/hosts. Проверьте, пингуется ли адрес www.example.com с компьютера клиента. Откройте в браузере на клиентском компьютере страницу http://www.example.com. Вы должны увидеть файл index.html основного сервера. На клиенте также можно проверить кэш arp, запустив команду
arp -a
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:
www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0
[править] Ладно, и как это работает?
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил Heartbeat на основном сервере командой:
/etc/init.d/heartbeat stop
Остановившись, Heartbeat остановит httpd на основном сервере и проинформирует запасной сервер об отключении основного (через Heartbeat-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала (/var/log/messages) появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):
Running /etc/init.d/httpd start Registering new address record for 192.168.0.50 on eth0
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр deadtime в файле ha.cf).
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу www.example.com в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда arp –a вернула следующий результат:
www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0
Это означает, что пакеты, предназначенные для адреса 192.168.0.50, теперь будут направляться на запасной сервер.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда Heartbeat перезапускается, он сообщает об этом запасному серверу через Heartbeat-соединение. В журнале запасного сервера появятся такие строки:
Heartbeat restart on node primary.example.com Releasing resource group: primary.example.com httpd Running /etc/init.d/httpd stop Withdrawing address record for 192.168.0.50 on eth0
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. Heartbeat может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (rsync или unison). LXF