The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Создание отказоустойчивого кластера для биллинговой системы на базе Gentoo Linux (drbd replication disk cluster)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: drbd, replication, disk, cluster,  (найти похожие документы)
From: Компания NetUP <info@netup.ru.> Date: Mon, 18 Sep 2007 14:31:37 +0000 (UTC) Subject: Создание отказоустойчивого кластера для биллинговой системы на базе Gentoo Linux Оригинал: http://www.netup.ru/articles.php?n=13 Все права защищены (c) 2001-2006 NetUP (http://www.netup.ru) Перепечатка материалов разрешается только с предврительного разрешения компании NetUP (info@netup.ru) Создание отказоустойчивого кластера для биллинговой системы на базе Gentoo Linux В настоящей документации рассматриваются вопросы создания отказоустойчивого кластера для работы с биллинговой системой NetUP UTM на базе двух физических серверов. В качестве операционной системы используется Gentoo Linux. База данных mysql. Рисунок 1. Общая схема кластера Каждый сервер укомплектован двумя сетевыми картами стандарта Gigabit Ethernet и двумя жесткими дисками одинакового размера. Внутренние коммуникации между серверами осуществляются на внутренних сетевых картах, на скорости 1 Гбит/сек. При этом для большей надежности можно использовать "перевернутый" кабель (crossover) без промежуточного коммутатора. Внешние сетевые карты подключены в коммутатор и через них осуществляется связь кластера с остальной сетью. При этом для внешних устройств данный кластер доступен под одним общим адресом - 192.168.0.200. Этот адрес используется только одним сервером в один момент времени. Если на этом сервере произошел сбой, то адрес автоматически присваивается второму, резервному серверу и кластер доступен в прежнем режиме. Работу по определению сбоев осуществляет пакет heartbeat. Сетевые настройки сервера 1: Имя хоста: netup1 IP-адрес на внутренней сетевой карте. Интерфейс eth1: 172.16.0.1 IP-адрес на внешнем интерфейсе 192.168.0.200 (eth0:1). Настраивается автоматически пакетом heartbeat Сетевые настройки сервера 2: Имя хоста: netup2 IP-адрес на внутренней сетевой карте. Интерфейс eth1: 172.16.0.2 IP-адрес на внешнем интерфейсе 192.168.0.200 (eth0:1). Настраивается автоматически пакетом heartbeat. Установка операционной системы Gentoo Linux производится на первый жесткий диск - /dev/sda. Второй жесткий диск - /dev/sdb будет полностью использоваться для синхронизации данных между серверами средствами пакета drbd. Установка этого пакета осуществляется командой: emerge drbd После успешной установки создайте конфигурационный файл /etc/drbd.conf следующего содержания: resource r0 { protocol C; incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f"; startup { degr-wfc-timeout 120; # 2 minutes. } disk { on-io-error detach; } net { } syncer { rate 200M; group 1; al-extents 257; } on netup2 { device /dev/drbd0; disk /dev/sdb1; address 172.16.0.2:7788; meta-disk internal; } on netup1 { device /dev/drbd0; disk /dev/sdb1; address 172.16.0.1:7788; meta-disk internal; } } Пример конфигурационного файла с комментариями приведен в файле /usr/share/doc/drbd-0.7.11/drbd.conf.gz. Согласно приведенным настройкам синхронизация данных будет осуществляться на разделе /dev/sdb1. При этом для доступа к этому разделу необходимо использовать устройство /dev/drbd0 в противном случае синхронизация данных осуществляться не будет. Для запуска пакета drbd выполните команду на обоих серверах: /etc/init.d/drbd start На сервере 1 выполните команду: drbdadm -- --do-what-I-say primary all Если все настройки верны, то с этого момента раздел /dev/sdb1 на обоих серверах будет синхронизироваться. Для просмотра статуса можно использовать команду: /etc/init.d/drbd status Пример вывода данной команды: drbd driver OK; device status: version: 0.7.11 (api:77/proto:74) SVN Revision: 1807 build by netup@netup1, 2006-01-17 00:52:49 0: cs:Connected st:Primary/Secondary ld:Consistent В данном выводе строка ld:Consistent означает, что все данные синхронизированы между обоими серверами в кластере. В случае если идет синхронизация данных, вывод будет содержать планируемое время и текущий статус этого процесса. Далее необходимо отформатировать синхронизируемый раздел под файловую систему reiserfs и создать директорию, в которую будет монтироваться данный раздел. Для этого выполните на сервере 1 команды: mkreiserfs /dev/drbd0 mkdir /mnt/sync на сервере 2 команду: mkdir /mnt/sync Следующим этапом в настройке отказоустойчивого кластера является установка и настройка пакета heartbeat. Для установки этого пакета необходимо выполнить команду: echo "sys-cluster/heartbeat ~x86" " /etc/portage/package.keywords emerge sys-cluster/heartbeat После успешной установки необходимо создать конфигурационные файлы. На сервере 1 файл /etc/ha.d/ha.cf следующего содержания: logfacility local0 ucast eth1 172.16.0.2 auto_failback on node netup1 netup2 На сервере 2 файл /etc/ha.d/ha.cf следующего содержания: logfacility local0 ucast eth1 172.16.0.1 auto_failback on node netup1 netup2 В этих файлах мы указали имена и IP-адреса серверов используемых в кластере. Далее необходимо создать конфигурационный файл /etc/ha.d/haresources следующего содержания: netup1 192.168.0.200/24/eth0:1 drbddisk Filesystem::/dev/drbd0::/mnt/sync::reiserfs apache2 mysql utm5_core utm5_radius При этом необходимо проконтролировать, что бы данный файл был одинакового содержания на обоих серверах. В данном файле мы указали внешний IP-адрес кластера - 192.168.0.200, маску подсети - 24 и интерфейс eth0:1, на котором использовать данный IP-адрес. Так же мы указали пакеты, которые необходимо запускать, когда данный сервер берет на себя роль ведущего сервера в кластере. Запуск сервисов осуществляется в том порядке, в котором они указаны в файле. Согласно приведенному файлу первым будет запущен пакет drbddisk, который переведет данный сервер в режим "ведущего" (Primary) для пакета drbd. После этого можно производить монтирование раздела /dev/drbd0. Данную операцию производит второй пакет - Filesystem. В параметрах данный пакет принимает указание на раздел - /dev/drbd0, директорию для монтирования - /mnt/sync и тип используемой файловой системы - reiserfs. Таким образом после старта этих двух пакетов директория /mnt/sync будет содержать синхронизированные между двумя серверами данные. Записанные в эту директорию данные будут автоматически дублироваться на втором резервном сервере. В случае если на основном сервере произойдет сбой, то резервный сервер будет содержать абсолютно те же данные, что и основной сервер до сбоя. Далее по списку будут запущены прикладные сервисы - веб-сервер apache2, сервер базы данных mysql , ядро биллинговой системы utm5_core, RADIUS сервер utm5_radius. Биллинговая система NetUP UTM во время работы делает запись биллинговой информации в базу данных mysql, поэтому для синхронизации этих данных необходимо переместить директорию /var/lib/mysql на синхронизируемый раздел /mnt/sync. Данную операцию необходимо производить при остановленном сервисе mysql. Так же необходимо в конфигурационном файле /etc/mysql/my.cnf в разделе [mysqld] указать новый путь: datadir = /mnt/sync/mysql Таким образом, после запуска сервиса mysql данные по абонентам, списаниям и другая биллинговая информация хранящиеся в этой базе данных будут синхронизироваться с резервным сервером. Для корректной работы пакета heartbeat так же необходимо создать файл /etc/ha.d/authkeys с ключами для безопасной работы между серверами. В этом файле указывается тип ключа и сам ключ: auth 1 1 sha1 somethinglong Этот файл так же должен быть идентичен на обоих серверах в кластере. На этом настройка пакета heartbeat завершена и можно произвести его запуск на обоих серверах командой: /etc/init.d/heartbeat start Для проверки работоспособности кластера можно использовать утилиты ifconfig, df, ps. Сервер, который в настоящий момент является ведущим, должен иметь: 1. настроенный интерфейс eth0:1 с IP-адресом 192.168.0.200 2. смонтированную директорию /mnt/sync 3. запущенные сервисы apache2, mysql, utm5_core, utm5_radius Резервный сервер при этом не должен иметь вышеуказанные настройки. Для того, что бы резервный сервер стал основным необходимо остановить сервис heartbeat на основном сервере либо эмулировать аппаратный сбой физическим выключением основного сервера. При этом резервный сервер присваивает себе общий IP-адрес 192.168.0.1, монтирует директорию /mnt/sync и запускает сервисы apache2, mysql, utm5_core и utm5_radius. На тестовом стенде компании НетАП восстановление работы кластера после сбоя основного сервера не превышало 30 секунд. Таким образом, работа отказоустойчивого кластера позволяет минимизировать перебои в работе биллинговой системы и тем самым повысить сервис, предоставляемый абонентам. Для автоматического запуска сервисов после перезагрузки сервера необходимо на обоих серверах выполнить команды: rc-update add drbd default rc-update add heartbeat default Проблема синхронизации данных и ситуация "split-brain" В случае если по какой-то причине произошел сбой связи между серверами и в один момент времени оба сервера перешли в режим "ведущего", может произойти ситуация когда данные на синхронизируемом разделе будут отличаться между серверами. Данная ситуация называется "расщепление разума" ("split-brain"). В этом случае администратор в ручном режиме должен произвести действия по разрешению этого конфликта. Идентифицировать данную проблему можно по статусу пакета drbd. Получить статус можно командой: /etc/init.d/drbd status Вывод при конфликтной ситуации на основном сервере будет содержать строку следующего содержания: 0: cs:StandAlone st:Primary/Unknown ld:Consistent Вывод при конфликтной ситуации на резервном сервере будет содержать строку следующего содержания: 0: cs:StandAlone st:Secondary/Unknown ld:Consistent В такой ситуации администратор определяет, какой из серверов содержит наиболее актуальную информацию. Эта информация останется на дисках и будет перенесена на второй сервер. При этом изменения сделанные на другом сервер будут считаться неактуальными и будут потеряны. Ниже приводятся команды, которые необходимо выполнить для разрешения конфликта. На обоих серверах выполняем команды: drbdadm disconnect all /etc/init.d/heartbeat stop Затем на сервере с неактуальными данными выполняем команду: drbdadm secondary all и после этого на сервере с актуальными данными команду: drbdadm secondary all Далее на сервере с актуальными данными выполняем команду: drbdadm -- --human primary all После этих действий необходимо подключить устройства на обоих серверах командой: drbdadm connect all При этом автоматически неактуальные данные будут удалены, и оба сервера будут иметь актуальные и полностью идентичные данные. Проверить результат можно командой просмотра статуса: /etc/init.d/drbd status Вывод на основном сервере должен выглядеть следующим образом: drbd driver OK; device status: version: 0.7.11 (api:77/proto:74) SVN Revision: 1807 build by netup@netup1, 2006-01-17 00:52:49 0: cs:Connected st:Secondary/Primary ld:Consistent Строка "st:Secondary/Primary ld:Consistent" свидетельствует о том, что данные полностью синхронизированы между серверами и конфликт был успешно разрешен. Страница пакета drbd в Интернете - http://www.drbd.org/ Страница пакета heartbeat в Интернете - http://linux-ha.org/HeartbeatProgram

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, Мурад, 10:57, 25/08/2015 [ответить] [смотреть все]
  • +/
    "При этом резервный сервер присваивает себе общий IP-адрес 192.168.0.1"

    не 192.168.0.200?

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor