Heartbeat + DRBD

Есть и такой ОС.

Модератор: weec

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Dembi
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-04-30 9:36:24

Heartbeat + DRBD

Непрочитанное сообщение Dembi » 2009-07-05 18:54:42

Привет Всем!
Есть два сервера:
cl1 – 10.0.1.210
cl3 – 10.0.1.45
Virtual IP – 10.0.1.245
ОС – Debian

Установил DRBD8, heartbeat 2.1.3-6lenny1

Задача:
1. Сделать полное резервирование одного раздела жесткого диска на обеих машинах
2. Объединить машины в один кластер с одним виртуальным IP

Ниже конфигурационный файл DRBD8, он одинаковый на двух серверах:


resource r0 {
protocol C;

startup { wfc-timeout 30; degr-wfc-timeout 120; }
disk { on-io-error detach; }
syncer {
rate 200M;
al-extents 257;
}


on cl1 {
device /dev/drbd1;
disk /dev/hda9;
address 10.0.1.210:7788;
meta-disk internal;
}

on cl3 {
device /dev/drbd1;
disk /dev/hda9;
address 10.0.1.45:7788;
meta-disk internal;
}

}



Ниже конфигурационный файл ha.cf, он одинаковый на серверах, за исключением параметра «ucast eth0 10.0.1.45». На cl1 он имеет IP cl3. На cl3 он имеет IP cl1.


logfacility local0
logfile /var/log/ha-log
debugfile /var/log/ha-debug
use_logd on
udpport 694
keepalive 1 # 1 second
warntime 5
deadtime 10
auto_failback on
use_logd yes
bcast eth0
node cl1
node cl3
ucast eth0 10.0.1.45
udp eth0
crm off
[/html]
Ниже конфигурационный файл haresources, он одинаковый на двух серверах:
cl1 IPaddr::10.0.1.245/24/eth0/10.0.1.255
cl1 drbddisk::r0 Filesystem::/dev/drbd1::/home

Вопросы:

1, почему при выполнение команды cat /proc/drbd:

cl1:~# cat /proc/drbd
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33

1: cs:WFConnection st:Primary/Unknown ds:UpToDate/DUnknown C r---
ns:0 nr:0 dw:40 dr:849 al:2 bm:2 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:8 misses:2 starving:0 dirty:0 changed:2

я вижу статус только первого сервера «Primary» на cl1 и «Secondary» на cl2. То есть почему если cl1 есть «Primary» а cl2 «Secondary» я не вижу следующего на cl1:

cs:WFConnection st:Primary/Secondary ds:UpToDate/DUnknown C r---

И следующего на cl2:

cs:StandAlone st:Secondary/ Primary ds:UpToDate/DUnknown r---

2. Почему не пишется лог в ha-log ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Heartbeat + DRBD

Непрочитанное сообщение paix » 2009-07-05 21:30:33

может быть научимся уважать правила форума ? теги code слабо юзать?

а также читать документацию?

http://ru.gentoo-wiki.com/wiki/Создание ... ой_системы
http://www.samag.ru/art/05.2006/05.2006_03.html
http://xgu.ru/wiki/DRBD

из ваших описаний нифига не понятно, а выдавливать информацию не сильно то хочется.
Попробуйте сделать как описано в документации и возвращайтесь с конкретными вопросами.
With best wishes, Sergej Kandyla

Dembi
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-04-30 9:36:24

Re: Heartbeat + DRBD

Непрочитанное сообщение Dembi » 2009-07-10 12:39:22

В предыдущей конфигурации у меня возникала ситуация split-brain.
Я внес изменения описывающие разрешения ситуации split-brain в мой конфигурационный файл drbd.conf в раздел net {}. После этого все заработало корректно:

cl1:/etc# drbd-overview
1:r0 Connected Primary/Secondary UpToDate/UpToDate C r--- /home ext3 1.9G 251M 1.6G 15%

cl3:~# drbd-overview
1:r0 Connected Secondary/Primary UpToDate/UpToDate C r---

Ниже приведен пример моего конфига:

drbd.conf

global {
usage-count yes;
}
resource r0 {
protocol C;
handlers {
outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";
}

disk { on-io-error detach;
fencing resource-only;
}

syncer {
rate 40M;
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
on cl1 {
device /dev/drbd1;
disk /dev/hda9;
address 10.0.1.210:7788;
meta-disk internal;
}

on cl3 {
device /dev/drbd1;
disk /dev/hda9;
address 10.0.1.45:7788;
meta-disk internal;
}

}

Так же настроил heartbeat. Ниже приведен его конфигурационный файл:

ha.cf
autojoin none
logfacility none
logfile /var/log/ha-log

debug 3
debugfile /var/log/ha-debug

# Отправка одного сигнала heartbeat каждую секунду
keepalive 2 # 1 second

# Предупреждение об опаздывающих сигналах heartbeats
warntime 15

deadping 80

# Объявляем узлы отключенными после 10 секунд
deadtime 40

initdead 120

udpport 694

bcast eth0

auto_failback on

# Перечень компонентов кластера (реальных серверов)
node cl1
node cl3

ucast eth0 10.0.1.210
ucast eth0 10.0.1.45

crm off

respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster



При ручной миграции сервисов с одного хоста на другой:

cl1:/etc# /usr/lib/heartbeat/hb_standby

все отработано корректно:
Сервисы: Virtual IP и /dev/drbd1 перешли с cl1 перешел к cl3

Но есть проблема

Если я отключаю сетевую карточку у cl3. Virtual IP и /dev/drbd1 переезжают на cl1
Но вот когда я подымаю сетевую карточку на cl3 у меня появляется Split-Brain, ниже лог:

drbd1: state = {cs:WFReportParams st:Primary/Unknown ds:UpToDate/DUnknown r---}
drbd1: wanted = {cs:WFReportParams st:Secondary/Unknown ds:UpToDate/DUnknown r---}
drbd1: Split-Brain detected, dropping connection!
drbd1: error receiving ReportSate, 1:4!

Я так понимаю нужно колдовать с drbd.conf c разделом net {}. Может кто-то может подсказать исходя из своего опыта какие параметры лучше использовать, чтобы избежать Split-Brain????

Аватара пользователя
koffu
сержант
Сообщения: 154
Зарегистрирован: 2008-03-23 0:51:18
Откуда: Киев
Контактная информация:

Re: Heartbeat + DRBD

Непрочитанное сообщение koffu » 2009-07-10 13:51:34

Подобный вопрос уже поднимался в этой теме Linux + Postgres. Или просто Кластер

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Heartbeat + DRBD

Непрочитанное сообщение m0ps » 2009-07-10 14:49:02

paix писал(а):может быть научимся уважать правила форума ? теги code слабо юзать?
он издевается :evil:

Guest_000
проходил мимо

Re: Heartbeat + DRBD

Непрочитанное сообщение Guest_000 » 2009-07-10 17:25:58

Спасибо за статью она интересная но к сожалению я не нашел ответа на свой вопрос.
Каким образом можно предотвратить ситуацию Split-Brain ??

Аватара пользователя
koffu
сержант
Сообщения: 154
Зарегистрирован: 2008-03-23 0:51:18
Откуда: Киев
Контактная информация:

Re: Heartbeat + DRBD

Непрочитанное сообщение koffu » 2009-07-10 17:40:39

Уже давно касался этого вопроса, в DRBD7 я использовал такой конфиг

Код: Выделить всё

resource storage {
        protocol C;
        incon-degr-cmd "echo 'DRBD: primary requested but inconsistent!' | wall; sleep 300000";
disk {
    on-io-error detach;
}
syncer {
        rate 50M;
}
Соответственно у меня при рассинхронизации массива на все консоли падало сообщение и массив отключался, чтобы вернуть нужно было либо перезагрузить машину либо, при серъезном сбое, снова синхронизировать.

Joe
проходил мимо

Re: Heartbeat + DRBD

Непрочитанное сообщение Joe » 2009-09-02 14:08:46

Всем привет.

У меня уст. heartbeat-2
Есть три ресурса,
Fs0
Public-IP
PostgreSQLDB

Если я убиваю все процессы для PostgreSQL, то он у меня не перезапускается, и все ресурсы не переезжают на другой сервер.

В логе я вижу ошибку:

pgsql[12183]: 2009/09/02_14:07:24 INFO: PostgreSQL is down
pgsql[12290]: 2009/09/02_14:07:29 INFO: PostgreSQL is down
pgsql[12397]: 2009/09/02_14:07:34 INFO: PostgreSQL is down
pgsql[12504]: 2009/09/02_14:07:39 INFO: PostgreSQL is down


Как мне сделать так чтобы ресурс перезапускался в случае ошибки или если он не сможет запуститься на этот сервере, чтобы все ресурсы переехали на другой сервер??????????

Вот мой cib.xml

Код: Выделить всё

<cib admin_epoch="0" have_quorum="true" ignore_dtd="false" num_peers="2" cib_feature_revision="2.0" epoch="261" ccm_transiti
on="22" generated="true" dc_uuid="e73c1384-a799-42d9-8f9c-40174f416413" num_updates="1" cib-last-written="Wed Sep  2 14:06:17 2009">
   <configuration>
     <crm_config>
       <cluster_property_set id="cib-bootstrap-options">
         <attributes>
           <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="2.1.3-node: 552305612591183b1628baa5bc6e903e0f1e26a3"/>
           <nvpair id="cib-bootstrap-options-stop-orphan-resource" name="stop-orphan-resource" value="true"/>
           <nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
           <nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="true"/>
           <nvpair id="cib-bootstrap-options-stonith-action" name="stonith-action" value="reboot"/>
           <nvpair id="cib-bootstrap-options-symmetric-cluster" name="symmetric-cluster" value="true"/>
           <nvpair id="cib-bootstrap-options-stop-orphan-actions" name="stop-orphan-actions" value="true"/>
         </attributes>
       </cluster_property_set>
     </crm_config>
     <nodes>
       <node id="e73c1384-a799-42d9-8f9c-40174f416413" uname="bilingserver-2" type="normal"/>
       <node id="b223515b-0d75-4f9c-8c97-3fd0e7ab6452" uname="bilingserver-1" type="normal">
         <instance_attributes id="nodes-b223515b-0d75-4f9c-8c97-3fd0e7ab6452">
           <attributes>
             <nvpair id="standby-b223515b-0d75-4f9c-8c97-3fd0e7ab6452" name="standby" value="bilingserver-1"/>
           </attributes>
         </instance_attributes>
       </node>
     </nodes>
     <resources>
       <clone id="fencing">
         <instance_attributes id="f9e1d5b5-b063-4d4b-af9c-5ab4b10c5031">
           <attributes>
             <nvpair name="clone_max" value="2" id="38d6f452-165e-400c-8a08-f18fcced3402"/>
             <nvpair name="clone_node_max" value="1" id="dc1308d6-bf32-4544-a4fd-1bb32a235fb6"/>
           </attributes>
         </instance_attributes>
         <primitive id="child_fencing" class="stonith" type="ssh" provider="heartbeat">
           <operations>
             <op id="stonith-op-mon" name="monitor" interval="5s"/>
           </operations>
           <instance_attributes id="ia-child_fencing">
             <attributes>
               <nvpair id="stonoth-attr" name="hostlist" value="bilingserver-1 bilingserver-2"/>
             </attributes>
           </instance_attributes>
         </primitive>
       </clone>
       <master_slave id="ms-drbd0">
         <meta_attributes id="ma-ms-drbd0">
           <attributes>
             <nvpair id="ma-ms-drbd0-1" name="clone_max" value="2"/>
             <nvpair id="ma-ms-drbd0-2" name="clone_node_max" value="1"/>
             <nvpair id="ma-ms-drbd0-3" name="master_max" value="1"/>
             <nvpair id="ma-ms-drbd0-4" name="master_node_max" value="1"/>
           </attributes>
         </meta_attributes>
         <primitive id="drbd0" class="ocf" provider="heartbeat" type="drbd">
           <instance_attributes id="ia-drbd0">
             <attributes>
               <nvpair id="ia-drbd0-1" name="drbd_resource" value="r0"/>
             </attributes>
           </instance_attributes>
           <operations>
             <op id="op-drbd0-1" name="monitor" interval="5s" timeout="10s" role="Master"/>
             <op id="op-drbd0-2" name="monitor" interval="6s" timeout="10s" role="Slave"/>
             <op id="op-drbd0-3" name="monitor" interval="5s" timeout="10s" on_fail="restart"/>
           </operations>
         </primitive>
       </master_slave>
       <group id="biling_group">
         <meta_attributes id="ma-biling">
           <attributes>
             <nvpair id="ma-biling-1" name="target_role" value="started"/>
           </attributes>
         </meta_attributes>
         <primitive class="ocf" provider="heartbeat" type="Filesystem" id="fs0">
           <operations>
             <op id="Filesystem_monitor" name="monitor" interval="5s" on_fail="restart"/>
           </operations>
           <instance_attributes id="ia-fs0">
             <attributes>
               <nvpair id="ia-fs0-1" name="fstype" value="ext3"/>
               <nvpair id="ia-fs0-2" name="directory" value="/opt"/>
               <nvpair id="ia-fs0-3" name="device" value="/dev/drbd0"/>
             </attributes>
           </instance_attributes>
         </primitive>
         <primitive id="Public-IP" class="ocf" type="IPaddr2" provider="heartbeat">
           <operations>
             <op id="public-ip-check" name="monitor" interval="5s"/>
           </operations>
           <instance_attributes id="params-public-ip">
             <attributes>
               <nvpair id="public-ip-addr" name="ip" value="10.11.3.1"/>
               <nvpair id="public-mask-addr" name="netmask" value="16"/>
               <nvpair id="public-nic-addr" name="nic" value="eth0"/>
             </attributes>
           </instance_attributes>
         </primitive>
         <primitive id="PostgreSQLDB" class="ocf" type="pgsql" provider="heartbeat">
           <operations>
             <op id="PostgreSQLDB_monitor" name="monitor" interval="5s" on_fail="restart"/>
           </operations>
           <instance_attributes id="PostgreSQLDB_attr">
             <attributes>
               <nvpair id="pgctl01" name="pgctl" value="/usr/lib/postgresql/8.3/bin/pg_ctl"/>
               <nvpair id="psql01" name="psql" value="/usr/lib/postgresql/8.3/bin/psql"/>
               <nvpair id="pgdata01" name="pgdata" value="/opt/pgsql/data"/>
               <nvpair id="pgdba01" name="pgdba" value="postgres"/>
               <nvpair id="pgdb01" name="pgdb" value="template1"/>
               <nvpair id="logfile01" name="logfile" value="/var/log/pgsql.log"/>
             </attributes>
           </instance_attributes>
         </primitive>
       </group>
     </resources>
     <constraints>
       <rsc_order id="drbd0_before_apache_group" from="biling_group" action="start" to="ms-drbd0" to_action="promote"/>
       <rsc_colocation id="biling_group_on_drbd0" to="ms-drbd0" to_role="master" from="biling_group" score="infinity"/>
       <rsc_location id="drbd0_master_on_bilingserver-2" rsc="ms-drbd0">
         <rule id="drbd0_master_on_bilingserver-2_rule1" role="master" score="100">
           <expression id="drbd0_master_on_bilingserver-2_expression1" attribute="#uname" operation="eq" value="bilingserver-2"/>
         </rule>
       </rsc_location>
     </constraints>
   </configuration>
 </cib>