Oracle DBA Forum  

Вернуться   Oracle DBA Forum > Clustering | High Ability > DRBD, VVR, Lustre > DRBD, VVR, Lustre

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 04.05.2011, 09:52
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Clusters: Distributed Replicated Block Device (DRBD) [oel55, active/active, ocfs2]

Clusters: Distributed Replicated Block Device (DRBD) [oel55, active/active, ocfs]

DRBD, открытое решение LINBIT для синхронной репликации, является частью ядра Linux (начиная с версии 2.6.33 ) и широко используется в системах высокой готовности базах данных, системах виртуализации и т.п.

DRBD - упрощённо - сервис, позволяющий зеркалировать (делать копии на-лету) выделенных разделов одного физического сервера на такие же выделенные разделы другого сервера по сети.


Может работать в режиме Primary/Secondary и Primary/Primary


Primary/Secondary

Демон должен быть на одном (рабочем) сервере в состоянии Primary и раздел примонтирован в файловую систему сервера, а на другом (резервном) в Secondary и раздел должен быть отмонтирован. В случае падения основного сервера - второй делаем Primary, монтируем раздел и работа продолжается.

Primary/Primary

В данном режиме два сервера могут быть запущены как активные и реплицироваться между собой в обе стороны. Для этого необходимо использовать кластерные файловые системы. В данном документе рассматривается пример с использованием OCFS2.


=========================================
Рекомендуется ознакомиться с материалами по DRBD на русском языке
http://odba.ru/showthread.php?t=479
=========================================

---------------------
Пакет DRBD обеспечивает постоянную синхронизацию.
Пакет Heartbeat - используется для обнаружения сбоев и управления ресурсами кластера.

Для Heartbeat - DRBD представляет собой ресурс (он называется datadisk), который необходимо запускать или останавливать (делать первичным или вторичным) по мере надобности.

Heartbeat - рассматривается отдельно в теме:
http://odba.ru/showthread.php?t=418

============================================

# - команды выполняются от пользователя root

Команды редактора VI
http://odba.ru/showthread.php?t=331
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 10:40.
Ответить с цитированием
  #2  
Старый 04.05.2011, 09:57
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Программы входящие в состав пакета DRBD:
  • drbdadm - Основная программа администрирования DRBD, все параметры она получает из конфигурационного файла /etc/drbd.conf. drbdadm выступает в качестве фронтенда для такие программ как drbdsetup и drbdmeta;
  • drbdsetup - Программа конфигурирования модуля DRBD, параметры задаются из командной строки что делает программу гибкой, но повышает сложность для новичков, используется редко;
  • drbdmeta - Программа позволяет создавать, резервировать и восстанавливать DRBD meta data structures, используется редко.



Для описания устройства хранения (storage) используется понятие ресурса, которое описывает все его аспекты, такие как:
  • Имя ресурса имя не должно содержать пробелы, в последствие мы будет использовать это имя чтобы ссылаться на какое либо устройство.
  • DRBD устройство это виртуальное блочное устройство управляемое DRDB. Ассоциированное блочное устройство всегда именуется как /dev/drbdm, где m младший номер устройства, который начинается с 0. Старший номер устройства равняется 147.
  • Disk configuration физический диск или раздел содержащий данные.
  • Network configuration IP-адрес и порт дублирующей ноды.



В DRBD каждый ресурс играет свою роль, - первичную (primary) или вторичную (secondary). В случае если DRBD устройство является primary,
оно может читать и записывать данные без ограничений, создавать и монтировать файловые системы и т.д.

Если DRBD устройство является secondary то оно получает все обновления данных с primary (любые добавления, изменения или удаления данных) но не дает прямой доступ к устройству. То есть приложения не смогут читать и писать данные на устройство. Роль ресурса может изменяться вручную или автоматически.


DRBD поддерживает три режима репликации:

  • Protocol A. Протокол асинхронной репликации, данные на primary node считаются полностью записанными тогда, когда запись завершается на локальном носители и пакет отправлен в TCP буфер отправки. Этот режим может повлечь за собой потерю данных, если сбой произойдет раньше чем данные будут продублированы на вторичной ноде.
  • Protocol B. Протокол полусинхронной репликации (Memory synchronous), данные считаются полностью записанными тогда, когда запись завершается на локальном носители и пакет достигает удаленной системы (peer node).
  • Protocol C. Протокол синхронной репликации, данные на primary node считаются полностью записанными тогда, когда запись завершается на локальном носителе и получено подтверждение о том, что данные успешно записаны на удаленной ноде. Конечно и с этим протоколом возможна потеря данных, если данные на обоих узлах будут разрушены одновременно.



DRBD управляется с помощью одного конфигурационного файла /etc/drbd.conf. Структуру файла можно представить тремя секциями.

Global section секция может быть описана только один раз и содержит в себе глобальные настройки распространяемые на все ресурсы.
Common section секция полезна если используется несколько ресурсов и необходимо предоставлять ряд настроек для конкретных ресурсов.
Resource section секция описания ресурса, в ней также должна быть подсекция on host, для каждой кластерной ноды.
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 13:10.
Ответить с цитированием
  #3  
Старый 04.05.2011, 09:57
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Шаг 1.

// Уменьшили время для выбора ядра пользователем.
# vi /etc/grub.conf
timeout=1


# vi /etc/selinux/config
SELINUX=disabled


Шаг 2.

// создаем фал с описанием параметров подключения к репозиторию
# vi /etc/yum.repos.d/centosRepo.repo


Код:
[Centos5_extras_PublicRepo]
name=Centos Linux $releasever - $basearch - latest
baseurl=http://mirror.centos.org/centos/5.6/extras/x86_64/
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
gpgcheck=1
enabled=1

# vi /etc/yum.repos.d/oracleLinuxRepo.repo

Код:
[OEL55_PublicRepo]
name=Enterprise Linux $releasever - $basearch - latest
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/6/base/x86_64/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1

// Для проверки правильности созданного файла, воспользуйтесь командой
# yum list


Устанавливаем дополнительные пакеты:

#
{
yum install mc -y
yum install screen -y
yum install vsftpd -y
yum install xinetd -y
yum install net-snmp -y
yum install sysstat -y
}


// На всех виртуальных машинах устанавливаем пакеты drbd

# yum install -y \
drbd83 \
kmod-drbd83



# rpm -qa|grep drbd

Код:
drbd83-8.3.8-1.el5.centos
kmod-drbd83-8.3.8-1.el5.centos
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 09.06.2011 в 15:59.
Ответить с цитированием
  #4  
Старый 04.05.2011, 09:58
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Шаг 3.

Настраиваем автозапуск только определенных программ на нодах кластера

Сначала отменим автозапуск всех программ, а после определим какие программы должны стартовать при запуске.

В ручную с помощью утилиты ntsysv отключаем все на всех виртуальных машинах.

export LANG=C
ntsysv 3

или выполнить:


#
Код:
{

chkconfig NetworkManager  --level 345 off
chkconfig acpid  --level 345 off
chkconfig anacron  --level 345 off
chkconfig atd  --level 345 off
chkconfig auditd  --level 345 off
chkconfig autofs  --level 345 off
chkconfig avahi-daemon  --level 345 off
chkconfig avahi-dnsconfd  --level 345 off
chkconfig bluetooth  --level 345 off
chkconfig capi  --level 345 off
chkconfig conman  --level 345 off
chkconfig cpuspeed  --level 345 off
chkconfig crond  --level 345 off
chkconfig cups  --level 345 off
chkconfig dnsmasq  --level 345 off
chkconfig dund  --level 345 off
chkconfig firstboot  --level 345 off
chkconfig gpm  --level 345 off
chkconfig haldaemon  --level 345 off
chkconfig ip6tables  --level 345 off
chkconfig ipmi  --level 345 off
chkconfig iptables  --level 345 off
chkconfig irda  --level 345 off
chkconfig irqbalance  --level 345 off
chkconfig kudzu  --level 345 off
chkconfig lvm2-monitor  --level 345 off
chkconfig mcstrans  --level 345 off
chkconfig mdmonitor  --level 345 off
chkconfig mdmpd  --level 345 off
chkconfig messagebus  --level 345 off
chkconfig microcode_ctl  --level 345 off
chkconfig multipathd  --level 345 off
chkconfig netconsole  --level 345 off
chkconfig netfs  --level 345 off
chkconfig netplugd  --level 345 off
chkconfig network  --level 345 off
chkconfig nfs  --level 345 off
chkconfig nfslock  --level 345 off
chkconfig nscd  --level 345 off
chkconfig ntpd  --level 345 off
chkconfig pand  --level 345 off
chkconfig pcscd  --level 345 off
chkconfig portmap  --level 345 off
chkconfig psacct  --level 345 off
chkconfig rawdevices  --level 345 off
chkconfig rdisc  --level 345 off
chkconfig readahead_early  --level 345 off
chkconfig readahead_later  --level 345 off
chkconfig restorecond  --level 345 off
chkconfig rhnsd  --level 345 off
chkconfig rpcgssd  --level 345 off
chkconfig rpcidmapd  --level 345 off
chkconfig rpcsvcgssd  --level 345 off
chkconfig saslauthd  --level 345 off
chkconfig sendmail  --level 345 off
chkconfig smartd  --level 345 off
chkconfig sshd  --level 345 off
chkconfig syslog  --level 345 off
chkconfig sysstat  --level 345 off
chkconfig vsftpd  --level 345 off
chkconfig wpa_supplicant  --level 345 off
chkconfig xfs  --level 345 off
chkconfig xinetd  --level 345 off
chkconfig ypbind  --level 345 off
chkconfig yum-updatesd  --level 345 off
chkconfig snmpd  --level 345 off
chkconfig lm_sensors --level 345 off
chkconfig hidd  --level 345 off
chkconfig isdn  --level 345 off
}


Настроим автозапуск только определенных пакетов.
Выделенные жирным обязательно, остальные, нужно думать.


#

Код:
{

chkconfig  --level 345 network on
chkconfig  --level 345 nfs on
chkconfig  --level 345 sshd on
chkconfig  --level 345 crond on
chkconfig  --level 345 xinetd on
chkconfig  --level 345 syslog on
chkconfig  --level 345 sysstat on

}





// Пусть перезагрузятся виртуальные машины только с перечисленными пакетами.
# reboot
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 13:12.
Ответить с цитированием
  #5  
Старый 04.05.2011, 09:58
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Шаг 4.

Настраиваем сетевые интерфейсы и создаем файл hosts на узлах кластера


# vi /etc/hosts

Код:
## Localdomain and Localhost (hosts file, DNS)

127.0.0.1 localhost.localdomain localhost


## eth0 Public Network (hosts file, DNS)

192.168.1.10 server1.localdomain server1
192.168.1.11 server2.localdomain server2


## eth1 Interconnect Private Network  (hosts file, DNS)

192.168.10.10 server1-internal
192.168.10.11 server2-internal

-----------------------------------------------



# vi /etc/sysconfig/network

Указать соответствующий HOSTNAME

HOSTNAME={server1.localdomain | server.localdomain}

Код:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=<HOSTNAME>
GATEWAY=192.168.1.1

# vi /etc/resolv.conf


Код:
search localdomain 
nameserver 192.168.1.1
options attempts: 2
options timeout: 1

===============================================


server1.localdomain

(public)
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Код:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
(private)
# vi /etc/sysconfig/network-scripts/ifcfg-eth1

Код:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.10
NETMASK=255.255.255.0

# service network restart

===============================================


server2.localdomain

(public)
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Код:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.11
NETMASK=255.255.255.0
(private)
# vi /etc/sysconfig/network-scripts/ifcfg-eth1

Код:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.11
NETMASK=255.255.255.0

# service network restart
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #6  
Старый 04.05.2011, 09:59
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Шаг 5.

Выполните на каждом из серверов команду.
#/sbin/blockdev --getsize /dev/sdb

Если Вы получили одинаковые данные, можно использовать весь диск для репликации. (Т.е. в качестве значения disk в конфигуационном файле указать устройство /dev/sdb). Если получили, разные значения, необходимо на жеском диске создать разделы одинакового размера.


Для этого с помощью команды fdisk, создайте primary раздел нужного размера.

# fdisk /dev/sdb


# fdisk /dev/sdb

Код:
The number of cylinders for this disk is set to 40960.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-40960, default 1): [Enter]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-40960, default 40960):[Enter]
Using default value 40960

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 13:13.
Ответить с цитированием
  #7  
Старый 04.05.2011, 09:59
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Шаг 6.

Настройка конфигурационных файлов DRBD

------------------------------------

// Пример конфигурационной файла drbd.conf
http://www.drbd.org/users-guide/re-drbdconf.html

// Описание сокращений и параметров выводимых на экран
http://www.drbd.org/users-guide/ch-admin.html

------------------------------------

Создаем конфигурационный файл для служб DRBD на обоих узлах кластера

# vi /etc/drbd.conf


Код:
global { usage-count yes; }
resource r0 {
	protocol C;


 startup {


wfc-timeout 0;

# outdated-wfc-timeout 90;

# 2 minutes timeout.
degr-wfc-timeout 120;    

## For Primary/Primary
become-primary-on both;     


       
  }



handlers {

## send mail for these events

split-brain "/usr/lib/drbd/notify-split-brain.sh root";
out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# pri-lost "/usr/lib/drbd/notify-pri-lost.sh root";

 
   
## no notification script for these handlers or don't want to work ...

# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target "/usr/lib/drbd/";
# initial-split-brain "/usr/lib/drbd/notify-split-brain.sh root";             
                
                

# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";    



  }

 

  disk {
    on-io-error   detach;

     #disk-size=41943040;
  

  }


syncer {


#replication speed
rate  100M;                   


# set the "on-line device verification" algorithm (should be triggered by a cronjob)
verify-alg md5;

# set the "checksum-based synchronization" algorithm (used when synchronizing)
csums-alg crc32c;

# tunning the activity log size
# default is 127 ; increment it when using intensive I/O (write lot of small file)
al-extents 257;

}



net {

## For Primary/Primary
allow-two-primaries;                

## authentication
cram-hmac-alg sha1;
shared-secret "[email protected]$$$w0rd";


## set the "replication traffic integrity checking" algorithm (used when replicating)
data-integrity-alg crc32c;

## split-brain (node = secondary/primary/both-primary)

# Если 0 Primary: если на данном хосте не было каких-либо изменений, а на другом хосте были, просто дописать ети изменения.
after-sb-0pri discard-zero-changes;

# Если 1 Primary: синхронизировать secondary с primarу. Данные несоответствующие Primary будут утеряны
after-sb-1pri discard-secondary;

# Если 2 Primary: выполнить disconnect
after-sb-2pri disconnect;

	}



	on server1.localdomain {
		device    /dev/drbd0;
		disk      /dev/sdb1;
		address   192.168.10.10:7789;
		meta-disk internal;
	}
	on server2.localdomain {
		device    /dev/drbd0;
		disk      /dev/sdb1;
		address   192.168.10.11:7789;
		meta-disk internal;
	}
}


в секции global параметр usage-count говорит о том, что при установке и первом запуске DRBD следует отослать сообщение разработчикам, которое учтётся в общемировой статистике использования DRBD на сайте http://usage.drbd.org.


Тип протокола синхронизации между узлами:

A - асинхронный, приложения получают от драйвера статус SUCCESS сразу при записи на Primary хосте, ещё до того, как данные будут отправлены и записаны на Secondary хосте.

B - полусинхронный, приложения получают от драйвера статус SUCCESS после того, как в память на Secondary хосте прилетели данные от Primary.

C - синхронный, приложения получают от драйвера статус SUCCESS только после того, как данные будут записаны на диск на Secondary хосте


В секции описания ресурсов должны быть указаны

- полные имена машин.
- устройства, используемые DRBD,
- тип хранения метаданных (у меня метаданные хранятся на том же разделе) - internal.
- IP-адрес и порт использумые на хосте. Обратите внимание на то, чтобы firewall не запрещал соединения с этими хостами и портами.
- Параметром syncer задаётся максимальная скорость синхронизации в байтах в секунду.



----------------------------------------------------------

// Выполните на обоих узлах команду для создания метаданных
[[email protected] ~]# drbdadm create-md r0


С ее помощью создается устройство, которое позднее будет отформатировано и смонтировано в системе. Именно на этом устройстве будут храниться реплицируемые данные.

Код:
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

--------------------------------------------------------------------------
--------------- Если появилось сообщение


Код:
[[email protected] pack]# drbdadm create-md r0
md_offset 73402359808
al_offset 73402327040
bm_offset 73400086528

Found ext3 filesystem which uses 71681996 kB
current configuration leaves usable 71679772 kB

Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40
Выполните:

# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1

После этого:


# drbdadm create-md r0

Код:
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
---------------------------------------------------------------

Необходимо определить, какое из устройств будет рассматриваться как primary а, какое secondary. Особой роли для варианта primary/primary не играет, какое из будет выбрано в качестве primary. Но для выполненния первоначальной синхронизации, это необходимо.

// На одном из серверов выполнить команду. (Указываем , что сервер работает как primary).
# drbdsetup /dev/drbd0 primary

// После этого, стартуем сервис drbd. После запуска DRBD на первичной ноде она перейдет в режим ожидания вторичной, и не запуститься пока не получит от нее отклик. После запуска DRBD на первичной ноде, выполните команду для запуска демона на вторичной ноде.

# /etc/init.d/drbd start


Код:
Starting DRBD resources: [
r0
Found valid meta data in the expected location, 42949652480 bytes into /dev/sdb1.
d(r0) s(r0) n(r0) ]...

Если все настройки верны, то с этого момента раздел /dev/sdb1 на обоих серверах будет синхронизироваться. Для просмотра статуса можно использовать команду


# /etc/init.d/drbd status

В случае если идет синхронизация данных, вывод будет следующим:

Код:
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:09
m:res  cs          ro                 ds                     p             mounted  fstype
0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C
...    sync'ed:    25.6%              (30512/40956)M         delay_probe:
Ждем завершения синхронизации.


# /etc/init.d/drbd status

Код:
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:09
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C

Все данные синхронизированы между обоими серверами в кластере.


Далее необходимо отформатировать синхронизируемый раздел под файловую систему и создать директорию, в которую будет монтироваться данный раздел.

// Для возможности одновременной записи на 2 ноды (primary/primary) кластера, следует использовать кластерную файловую систему, например ocfs2. Предварительно необходимо установить необходимые пакеты.


# mkfs.ocfs2 /dev/drbd0


Код:
mkfs.ocfs2 1.6.3
Cluster stack: classic o2cb
Label:
Features: sparse backup-super unwritten inline-data strict-journal-super
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 42948308992 (10485427 clusters) (10485427 blocks)
Cluster groups: 326 (tail covers 2227 clusters, rest cover 32256 clusters)
Extent allocator size: 8388608 (2 groups)
Journal size: 268423168
Node slots: 8
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 3 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful


Далее создаем каталог, куда будет смонтирована /dev/drbd0

На обоих нодах кластера, выполните команду:

# mkdir /mnt/sync


Для файловой системы, содержащей датафайлы должно соблюдаться условие, что все операции ввода-вывода для файлов используют механизм прямого ввода-вывода I/O (O_DIRECT). Поэтому всегда используйте опцию "datavolume" при каждом монтировании файловой системы. Без этой опции отказ системы может привести к потере данных.


// Cмонтируйте файловую систему в каталог для файловой системы ocfs2
# mount -t ocfs2 /dev/drbd0 -o datavolume /mnt/sync

// Убедитесь, что drbd0 удачно смонтировался
# df -h

Код:
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              38G  3.5G   32G  10% /
/dev/sda2              20G  3.6G   15G  20% /home
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/drbd0             69G  2.2G   67G   4% /mnt/sync

// Добавим соответвующую запись в fstab. Для этого выполните команду на всех узлах кластера для файловой системы ocfs2
# echo "/dev/drbd0 /mnt/sync ocfs2 _netdev,datavolume,nointr 0 0" >> /etc/fstab


// Проверить значение hash на нодах. Он должен совпадать
# cat /proc/drbd

Код:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:09
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:42735220 nr:0 dw:793512 dr:41941768 al:366 bm:2560 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0


// Добавляем автозапуск drbd на оба узла кластера.
# chkconfig --level 345 drbd on
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 12:17.
Ответить с цитированием
  #8  
Старый 04.05.2011, 19:39
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Проблема синхронизации данных и ситуация "split-brain"

В случае, если по какой-то причине ( падении/отключении одного их узлов, сетевые проблемы и д.р.) произошел сбой связи между серверами и в один момент времени оба сервера перешли в режим «ведущего», может произойти ситуация когда данные на синхронизируемом разделе будут отличаться между серверами. Данная ситуация называется «расщепление разума» («split-brain»). Если drbd не сможет самостоятельно принять решение и исправить ситуацию (пользуясь директивами в конфигурационном файле), в этом случае администратор в ручном режиме должен произвести действия по разрешению этого конфликта.

Создание искусственного расщепления мозга, чтобы проверить!

1) На одном из серверов закрываем порт 7789.

iptables -A INPUT -p tcp -s <ip адрес сервера1> --dport 7789 -j DROP
iptables -A INPUT -p tcp -s <ip адрес сервера2> --dport 7789 -j DROP
service iptables restart

2) Копируем или удаляем данные в раздел /mnt/sync на каждом из серверов.

Идентифицировать "split-brain" можно по статусу пакета drbd.

Получить статус можно командой /etc/init.d/drbd status:

Вывод при конфликтной ситуации на основном сервере будет содержать строку следующего содержания:

server1

# /etc/init.d/drbd status

Код:
drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by [email protected], 2009-08-29 14:07:55
m:res  cs          ro               ds                 p      mounted  fstype
0:r0   StandAlone  Primary/Unknown  UpToDate/DUnknown  r----  ocfs2



server2

# /etc/init.d/drbd status

Код:
drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by [email protected]     4.home.local, 2009-08-29 14:07:55
m:res  cs          ro               ds                 p      mounted  fstype
0:r0   StandAlone  Primary/Unknown  UpToDate/DUnknown  r----  ocfs2
В такой ситуации администратор определяет, какой из серверов содержит наиболее актуальную информацию. Эта информация останется на дисках и будет перенесена на второй сервер. При этом изменения сделанные на другом сервер будут считаться неактуальными и будут потеряны. Ниже приводятся команды, которые необходимо выполнить для разрешения конфликта.


3) "split-brain" создан.
Блокировка портов больше ненужна.

# iptables --flush

4)

Рекомендуется остановить синхронизацию данных. Сначала на сервере с актуальными данным, потом на сервере с неактуальными данными.

Выполните команду:

# drbdadm pause-sync r0


5)

Потом следует отключить соединение с узлом-партнером. Для этого выполните команду (cначала на сервере с актуальными данным, потом на сервере с неактуальными данными):

Выполните команду:
drbdadm disconnect r0


6) Переводим сервер с неактуальными данными в режим secondary
drbdadm secondary r0

Если появляется ошибка, необходимо размонтировать файловую систему на сервере с неактуальными данными.

Код:
0: State change failed: (-12) Device is held open by someone
Command 'drbdsetup 0 secondary' terminated with exit code 11

Необходимо размонтировать файловую систему

# cd /
# umount /mnt/sync/

Если появляется сообщение:

Код:
umount: /mnt/sync: device is busy
umount: /mnt/sync: device is busy


# fuser -mv /dev/drbd0

Код:
                     USER        PID ACCESS COMMAND
/dev/drbd0:          root       7704 F.c.m java

# ps auxw | grep 7704

# kill -9 7704


// Повторите попутку размонтировать файловую систему и перевести сервер в режим работы secondary.
# drbdadm secondary r0


7)


Убедитесь, что актуальные данные находятся на primary, а режим работы второго сервера - secondary. Для получения информации, используйте команду /etc/init.d/drbd status.

После этого, выполните команду на сервере с актуальными данными:

# drbdadm -- --overwrite-data-of-peer primary r0

Этой командой, мы указываем о необходимости синхронизировать данные, расположены на primary с данными на secondary сервере. После завершении синхронизации, данные на secondary будут перезаписаны.

-------------
Или, можно выполнить команду на сервере с неактуальными данными
# drbdadm -- --discard-my-data



8) Сначала на сервере с актуальными данными, потом на сервере с неактуальными данными, выполните команду.
# drbdadm connect r0


9) Сначала на сервере с актуальными данными, потом на сервере с неактуальными данными, выполните команду.

# drbdadm resume-sync r0



10) После завершения синхронизации, secondary сервер переведите в режим работы primary

# drbdadm primary r0


11) После этого, смонтируйте файловую систему на сервере, где мы ранее ее размонтировали.

# mount -t ocfs2 /dev/drbd0 -o datavolume /mnt/sync



12) Убедитесь в правильности работы DRBD. Для этого воспользуйтесь командой:
# /etc/init.d/drbd status

Состояние подключения д.б. Connected
Сервера должны работать как Primary/Primary
Состояние работы дисков - UpToDate/UpToDate
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 12:07.
Ответить с цитированием
  #9  
Старый 12.05.2011, 09:39
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Конфигурационный файл /etc/drbd.conf:
  • minor-count - По умолчанию модуль DRBD загружается с minorcount 32, если используется много устройств и номеров не хватает их можно явно указать здесь;
  • dialog-refresh - Обновление экрана каждые n секунд, может быть полезно при подключение к серверу по последовательному интерфейсу;
  • disable-ip-verifi cation - Позволяет отключить одну из проверок drbdadm;
  • usage-count - Участвовать в глобальном подсчете пользователей DRBD или нет;
  • common {...} - Секция, опции которой наследуют все ресурсы;
  • syncer - Позволяет задать пропускную способность при синхронизации устройств по сети, разработчики рекомендуют использовать 30% от возможностей сети. Например, если у вас 100 Мбит сеть, то 100 * 0.3 = 30 Мб;
  • resource r0 {...} - Секция описания ресурса;
  • protocol - Задает протокол для DRBD, подробнее о них написано выше;
  • handlers {...} - Задает обработчики, например что делать в случае потери соединения первичной ноды;
  • startup {...} - Секция для опций используемых в процессе загрузки DRBD;
  • wfc-timeout - Ожидание таймаута соединения;
  • degr-wfc-timeout - Ожидание таймаута подключения, в случае если в кластере одна рабочая нода;
  • wait-after-sb - Ожидание после split brain, ситуация когда все ноды могут попытаться запустить сервис одновременно, думая что другие ноды недоступны. В свою очередь это может повлечь за собой повреждение данных;
  • disk {...} - Секция с настройками оповещения верхних уровней, если замечено, что происходят I/O ошибки при обращение к диску;
  • on-io-error detach - Нода перестает работать с носителем данных если на нем происходят I/O ошибки;
  • fencing - Процесс блокировки ресурсов с нод статус которых сомнителен;
  • net {...} - Секция задает различные опции сети, такие как размеры буфера, максимальное число запросов обрабатываемых DRBD. В обычных ситуациях значений по умолчанию достаточно;
  • on host {...} - Секция описания нод;
  • device - Указывает на устройство DRBD, они расположены в /dev/ и начинаются с 0;
  • disk - Физический диск или раздел, который будет задействован в работе DRBD;
  • address - IP-адрес и порт этой ноды, нужно указывать именно ее IP-адрес а не shared IP;
  • meta-disk - Meta данные могут храниться на отдельном разделе диске а могут на диске описанном в опции disk;
  • max-buffers - Число буферов используемых для хранения данных, пока те записываются на диск;
  • max-epoch-size - Максимальное число запросов на запись. Должно соответствовать max-buff ers;
  • timeout, ping-int - Эти значения можно повысить если наблюдаются обрывы связи;


Значения опций в выводе cat /proc/drbd:
  • cs connection state
  • ro roles
  • ds disk states
  • ns network send
  • nr network receive
  • dw disk write
  • dr disk read
  • al activity log
  • bm bit map
  • lo local count
  • pe pending
  • ua unacknowledged
  • ap application pending


Возможный статус соединения:
  • StandAlone - Недоступна сетевая конфигурация. Этот ресурс еще не был подключен или был административно отключен (drbdadm disconnect), или сбросил сетевое подключение из за не пройденной аутентификации или split brain;
  • Disconnecting - Временное состояние пока происходит отключение,
  • следующее состояние StandAlone;
  • Unconnected - Временное состояние до попытки подключения. Следующее возможное состояние WFConnection или WFReportParams;
  • Timeout - Временное состояние после перерыва связи с peer-ом. Следующее возможное состояние Unconnected;
  • BrokenPipe - Временное состояние после потери связи с peer-ом. Следующее возможное состояние Unconnected;
  • NetworkFailure - Временное состояние после потери связи с партнером. Следующее возможное состояние - Unconnected;
  • ProtocolError - Временное состояние после потери связи с партнером. Следующее возможное состояние Unconnected;
  • TearDown - Временное состояние, peer закрывает соединение. Следующее возможное состояние Unconnected;
  • WFConnection - Нода ожидает пока peer станет виден в сети;
  • WFReportParams - TCP соединение было установлено, нода ожидает первый сетевой пакет от peer-ра;
  • Connected - DRBD соединение установлено, зеркалирование данных активно. Это нормальное состояние;
  • StartingSyncS - Начата полная синхронизация, выполняется администратором. Следующее возможное состояние SyncSource или PausedSyncS;
  • StartingSyncT - Начата полная синхронизация, выполняется администратором. Следующее возможное состояние WFSyncUUID;
  • WFBitMapS - Частичная синхронизация начата. Следующее возможное состояние SyncSource или PausedSyncS;
  • WFBitMapT - Частичная синхронизация начата. Следующее возможное состояние WFSyncUUID;
  • WFSyncUUID - Синхронизация скоро начнется. Следующее возможное состояние SyncTarget или PausedSyncT;
  • SyncSource - Синхронизация запускается, локальная нода является источником синхронизации;
  • SyncTarget - Синхронизация запускается, локальная нода является целью синхронизации;
  • PausedSyncS - Локальная нода источник синхронизации, но синхронизация находится в режиме паузы;
  • PausedSyncT - Локальная нода является целью синхронизации, но синхронизация находится в режиме паузы;
  • VerifyS - Запускается онлайн верификация, локальная нода является источником верификации;
  • VerifyT - Запускается онлайн верификация, локальная нода является целью верификации.


Роли ресурсов:
  • Primary Primary node;
  • Secondary Secondary node;
  • Unknown Роль ресурса неизвестна. Локальный ресурс не бывает в этой роли. Она отображается только для ресурса peer-ра в отключенном режиме.


Возможное состояние диска:
  • Diskless - Драйверу DRBD не назначено блочное устройство;
  • Attaching - Переходное состояние пока считываются meta данные;
  • Failed - Переходное состояние последовавшее за I/O ошибкой локального блочного устройства, следующее возможное состояние Diskless;
  • Negotiating - Переходное состояние пока налаживается соединение;
  • Inconsistent - Данные непоследовательны. Это статус нового ресурса;
  • Outdated - Данные ресурса последовательны но устарели;
  • DUnknown - Статус используется для peer-ра если не доступно сетевое подключение;
  • Consistent - Последовательные данные ноды без сетевого подключения. После подключения будет решено, данные являются актуальными или устаревшими;
  • UpToDate - Все данные в актуальном состояние. Это нормально состояние.
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 13:14.
Ответить с цитированием
  #10  
Старый 12.05.2011, 09:41
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию

Retrieving status with drbd-overview

# drbd-overview

Код:
  0:r0  StandAlone Secondary/Unknown UpToDate/DUnknown r----

Status information in /proc/drbd

cat /proc/drbd

  • cs (connection state). Status of the network connection. See the section called Connection states for details about the various connection states.
  • ro (roles). Roles of the nodes. The role of the local node is displayed first, followed by the role of the partner node shown after the slash. See the section called Resource roles for details about the possible resource roles.
  • ds (disk states). State of the hard disks. Prior to the slash the state of the local node is displayed, after the slash the state of the hard disk of the partner node is shown. See the section called Disk states for details about the various disk states.
  • ns (network send). Volume of net data sent to the partner via the network connection; in Kibyte.
  • nr (network receive). Volume of net data received by the partner via the network connection; in Kibyte.
  • dw (disk write). Net data written on local hard disk; in Kibyte.
  • dr (disk read). Net data read from local hard disk; in Kibyte.
  • al (activity log). Number of updates of the activity log area of the meta data.
  • bm (bit map). Number of updates of the bitmap area of the meta data.
  • lo (local count). Number of open requests to the local I/O sub-system issued by DRBD.
  • pe (pending). Number of requests sent to the partner, but that have not yet been answered by the latter.
  • ua (unacknowledged). Number of requests received by the partner via the network connection, but that have not yet been answered.
  • ap (application pending). Number of block I/O requests forwarded to DRBD, but not yet answered by DRBD.
  • ep (epochs). Number of epoch objects. Usually 1. Might increase under I/O load when using either the barrier or the none write ordering method. Since 8.2.7.
  • wo (write order). Currently used write ordering method: b (barrier), f (flush), d (drain) or n (none). Since 8.2.7.
  • oos (out of sync). Amount of storage currently out of sync; in Kibibytes. Since 8.2.6.
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.05.2011 в 13:15.
Ответить с цитированием
Ответ

Метки
active/active, clusters, drbd, linux, ocfs2

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 10:07. Часовой пояс GMT +3.


Powered by vBulletin®