Instalación de DRBD

De Wiki do Ciclo ASIR do IES de Rodeira

Introducción

Distributed Replicated Block Device (DRBD) é un sistema de replicación distribuído similar ao RAID 1 entre dispositivos de bloques (discos, particións, volumes lóxicos...) en rede. Normalmente únicamente un nodo está activo, mentras que o outro está en modo pasivo copiando os cambios realizados no nodo activo, aínda que tamén se pode configurar un modo dual primary, no que é posible ler e escribir simultáneamente nos dous nodos, o que require sistemas de arquivos especiais como OCFS2 ou GFS2. No noso caso, configuraremos un sistema single primary no que únicamente un nodo poderá acceder ao recurso nun instante determiñado.

Creación do sistema DRBD

En primeiro lugar precisamos instalar as utilidades DRBD, xa que o resto ven de serie nos últimos núcleos Linux:

apt-get install drbd8-utils

DRBD soporta tres modos de replicación:

  • Modo A - Asíncrono. Unha vez escritos os datos no nodo principal se considera a operación finalizada.
  • Modo B - Síncrono na memoria. Se considera finalizada a operación unha vez escritos os datos no nodo principal e recibidos no nodo secundario
  • Modo C - Síncrono. Se considera finalizada a operación cando os datos se escriban nos dous nodos.

Utilizaremos o protocolo C por ser o máis seguro, aínda que probablemente co modo B obteríamos un maior rendimento con pouca perda de seguridade.

A configuración debe ser idéntica nos dous nodos, e se realiza no directorio /etc/drbd.d. O ficheiro global-common.conf conten configuracións globais do sistema DRBD para todos os recursos configurados (deixaremos os seus valores por defecto), e para cada recurso que queiramos crear editaremos un ficheiro nomerecurso.res, no que indicaremos a configuración para o recurso. No noso caso, a configuración nos dous nodos gandalf.iesrodeira.com e earendil.iesrodeira.com estará nun ficheiro r0.res:

resource r0 {
		net { 
			#on-congestion pull-ahead;
			#congestion-fill 1G;
			#congestion-extents 3000;
			#sndbuf-size 1024k; 
			sndbuf-size 0;
			max-buffers 8000;
			max-epoch-size 8000;
			timeout 60;	
		 }
		 disk {
			#no-disk-barrier;
			#no-disk-flushes;
			no-md-flushes;
		 }
		 syncer {
                        c-plan-ahead 20;
                        c-fill-target 50k;
                        c-min-rate 10M;
		        al-extents 3833;
			rate 35M;
			use-rle;
		 }
		 startup { 
                        become-primary-on gandalf.iesrodeira.com ; 
			#wfc-timeout 30;
    			#degr-wfc-timeout 15;
		 }
 
                 protocol C;
                 device minor 1;
                 meta-disk internal;
 
		 on gandalf.iesrodeira.com {
		     address 172.21.1.200:7801;
                     disk /dev/Gandalf/servers;
		     device /dev/drbd0;
                 }
 
		 on earendil.iesrodeira.com {
                     address 172.21.1.100:7801;
                     disk /dev/Earendil/servers;
		     device /dev/drbd0;
                 }
 
}

Os dispositivos de bloques que formarán o DRBD deben ser do mesmo tamaño. En este caso serán os volumes lóxicos LVM /dev/Gandalf/servers e /dev/Earendil/servers, que formarán o dispositivo /dev/drbd0 mediante o que accederemos ao recurso no nodo activo, que será gandalf.iesrodeira.com.

Cando creamos o dispositivo DRBD é necesario almacenar información sobre o mesmo. Esta información pode almacenarse no propio dispositivo (internal metadata) ou nun dispositivo externo (external metadata). No noso caso empregamos internal metadata.

A replicación DRBD consume gran ancho de banda, polo que é oportuno o uso dunha conexión de rede dedicada (e mellor, directa, sen pasar por ningún switch). No noso caso faremos uso dos dispositivos eth0 de ambos equipos coas IP 172.21.1.100 en earendil e 172.21.1.200 en gandalf, ailladas na VLAN 5.


Unha vez creado o ficheiro de configuración r0.res nos dous nodos, necesitamos inicializar o dispositivo. O nodo primario (activo) pode ter datos almacenados, que se propagarán ao nodo secundario (pasivo).

drbdadm create-md r0
drbdadm up resource

Podemos observar o estado do dispositivo:

cat /proc/drbd

Eleximos o nodo que queremos que conserve os datos (primario) e o inicializamos:

drbdadm primary --force resource


Si observamos de novo o dispositivo (cat /proc/drbd) veremos como se produce a sincronización. Xa podemos montar e utilizar o novo dispositivo /dev/drbd0

Boxinfo info.png
En certos casos pode darse a posibilidade que os dous nodos pensen que deben ser primarios, nese caso prodúcese unha situación de split-brain que debe ser resolta. Pode configurarse unha resolución automática de estas situacións ou en caso necesario resolvela manualmente

Referencias

Documentación da Páxina Oficial Guía de Usuario