DRBD

Neste tutorial veremos como configurar o DRBD (Distributed Replicated Block Device), de modo a permitir  a replicação dos arquivos caso o servidor principal fique indisponível.

Serão necessários dois servidores, atente para o nome e o IP de ambas as máquinas. Mais na frente precisaremos deles.
Além disso, é necessário uma partição livre em cada servidor, no meu caso, criei as VMs (servidor1 e servidor2) com dois HDs em cada (sda e sdb)

1. Verifique os nomes das máquinas:

hostname

Caso vc queira padronizar, digite:

VM1:

echo "servidor1" > /etc/hostname

VM2:

echo "servidor2" > /etc/hostname

2. Modifique o conteúdo de /etc/hosts e o deixe igual nas duas VMs:

1
2
3
echo "127.0.0.1 localhost" > /etc/hosts
echo "192.168.2.1 servidor1" >> /etc/hosts
echo "192.168.2.2 servidor2" >> /etc/hosts

3. Adicione duas entradas ao sources.list e atualize as duas VMs:

1
2
3
echo "deb http://linorg.usp.br/debian/ stable main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://linorg.usp.br/debian/ stable main non-free contrib" >> /etc/apt/sources.list
apt-get update

4. Sincronize os relógios

1
2
3
apt-get install ntpdate tzdata
ntpdate a.ntp.br
hwclock --systohc

3- Instale o DRBD e ative os módulos necessários

1
2
3
aptitude -y install drbd8-utils
modprobe cn
modprobe drbd

4- Edite o arquivo /etc/drbd.d/global_common.conf e mude de

usage-count yes

para

usage-count no

5- Crie o arquivo r0.res na pasta /etc/drbd.d/ e adicione o conteúdo abaixo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash
resource r0 {
   protocol C;
   handlers {
      pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
      pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
      local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
   }
   startup {
      degr-wfc-timeout 60;
   }
   disk{
      on-io-error detach;
   }
   net {
      sndbuf-size 512k;
      timeout 60;
      connect-int 12;
      ping-int 12;
      ping-timeout 9;
      max-buffers 20480;
      cram-hmac-alg "sha1";
      shared-secret "123456";
      after-sb-0pri discard-older-primary;
      after-sb-1pri violently-as0p;
      after-sb-2pri disconnect;
      rr-conflict disconnect;
   }
   syncer {
      rate 100M;
      al-extents 257;
   }
   on servidor1 {
      device /dev/drbd0;
      disk /dev/sdb1;
      address IP-DO-SERVIDOR-1:7793;
      meta-disk internal;
   }
   on servidor2 {
      device /dev/drbd0;
      disk /dev/sdb1;
      address IP-DO-SERVIDOR-2:7793;
      meta-disk internal;
   }
}

6- Iniciando a configuração

1
2
3
drbdadm create-md r0
modprobe drbd
drbdadm up r0

7- Sincronize os servidores (SOMENTE NO SERVIDOR 1)

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

O tempo de sincronia vai depender do tamanho dos HDs. Para acompanhar, digite

watch cat /proc/drbd

e espere até completar 100%

8- Inicie o serviço

/etc/init.d/drbd start

9- Formate a partição (SOMENTE NO SERVIDOR 1)

mkfs.ext4 /dev/drbd0

O local que será configurado vai depender da sua necessidade. Pode ser usado para servidor web, ftp, etc…
Neste tutorial, será criado uma pasta “de teste” em ambos os servidores

mkdir /ha

Montaremos a partição (formatada anteriormente) na pasta /ha e criaremos um arquivo para efeitos de testes SOMENTE NO SERVIDOR 1

mount -t ext4 /dev/drbd0 /ha
touch /ha/teste.txt

Verifique no SERVIDOR 1 se a partição está montada, digite

df -h

Para testar, faça os comandos abaixo SERVIDOR 1

umount /ha
drbdadm secondary r0

SERVIDOR 2

drbdadm primary r0
mount -t ext4 /dev/drbd0 /ha

Verifique se o arquivo teste.txt está na pasta /ha no SERVIDOR 2

Possível erro:
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.

Conserto:
dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

Referência
http://www.drbd.org/docs/install/

10 comments for “DRBD

  1. Helena Lucia Ferreira
    30 de abril de 2013 at 08:31

    Muito bom teu site! Parabéns e continue se esforçando sempre em buscar novos caminhos.
    Muito sucesso!!!

  2. everton
    4 de janeiro de 2016 at 13:58

    Olá professor
    se puder me responder estou com um problema quando chego na parte da criação do dispositivo virtual o /dev/drbd0 quando executo o comando drbdadm create-md r0 ele retorna este erro:
    open(/dev/sda6) failed:
    Device or resource busy

    Exclusive open failed. Do it anyways?
    [need to type ‘yes’ to confirm] yes

    initializing activity log
    NOT initializing bitmap
    Writing meta data…
    New drbd meta data block successfully created.
    open(/dev/sda6) failed: Device or resource busy

    Exclusive open failed. Do it anyways?
    [need to type ‘yes’ to confirm] yes
    o que poderia ser?
    desde já agradeço

    • admin
      4 de janeiro de 2016 at 17:28

      Everton, qual a configuração dos HDs? Por favor, coloque o resultado do comando: fdisk -l

      • everton
        5 de janeiro de 2016 at 10:49

        Antes era a partição /dev/sda6 que seria o /home depois fiz uma outra partição a sda3 durante a instalação e deixei ela como espaço livre só formatei depois que o sistema estava pronto, mais não consegui fazer como queria que era com o /home,porém agora esta funcionando,outra duvida não posso acessar os asrquivos em simultaneo nas duas estações?terei sempre que mudar o secondary para primary para poder montar a partição /dev/drbd0 no primary para poder visualizar os arquivos?
        desde já agradeço professor

        /dev/sda1 * 2048 9764863 9762816 4,7G 83 Linux
        /dev/sda2 9766910 43358207 33591298 16G 5 Extended
        /dev/sda3 43358208 62914559 19556352 9,3G 83 Linux
        /dev/sda5 9766912 13670399 3903488 1,9G 82 Linux swap / Solaris
        /dev/sda6 13672448 43358207 29685760 14,2G 83 Linux

        • admin
          5 de janeiro de 2016 at 13:41

          Isso, Everton. Apenas em 1 de cada vez.

          O objetivo é implementar failover, caiu um, o outro assume.

          No mais, estou à disposição.

          • everton
            6 de janeiro de 2016 at 17:09

            Professor muito obrigado!
            gostaria de saber se consigo fazer isso funcionar com o active directory no samba4 e se pudesse me explicar o formato de como seria para eu tentar implementar.
            quando um AD parar o outro assume total com arquivos e tudo mais,
            seria simplesmente fantastico,dede já agradeço e desculpa a demora para visualizar a mensagem, correria demais,obrigado.

  3. everton
    9 de março de 2016 at 19:53

    Boa tarde a todos que aqui visitarem
    consegui configurar meu servidor linux com DRBD conforme os passos descritos aqui e com outras fontes de pesquisa o HEARTBEAT, mais Samba4 com AD primario e secundario fazendo assim redundância de arquivos e Active Directory.
    Agradeço ao professor Isac Ferreira aqui foi o pontapé inicial

  4. Diego
    7 de julho de 2017 at 18:46

    bom..
    quando tento fazer o comando drbdadm create-md r0 = ‘r0’ not defined in your config (for this host).
    o que poderia ser?

    segue meu arquivo de configuração, lembrando que o meu hd e sda

    #!/bin/bash
    resource r0 {
    protocol C;
    handlers {
    pri-on-incon-degr “echo o > /proc/sysrq-trigger ; halt -f”;
    pri-lost-after-sb “echo o > /proc/sysrq-trigger ; halt -f”;
    local-io-error “echo o > /proc/sysrq-trigger ; halt -f”;
    }
    startup {
    degr-wfc-timeout 60;
    }
    disk{
    on-io-error detach;
    }
    net {
    sndbuf-size 512k;
    timeout 60;
    connect-int 12;
    ping-int 12;
    ping-timeout 9;
    max-buffers 20480;
    cram-hmac-alg “sha1”;
    shared-secret “123456”;
    after-sb-0pri discard-older-primary;
    after-sb-1pri violently-as0p;
    after-sb-2pri disconnect;
    rr-conflict disconnect;
    }
    syncer {
    rate 100M;
    al-extents 257;
    }
    on servidor1 {
    device /dev/drbd0;
    disk /dev/sda1;
    address 192.168.25.9:7793;
    meta-disk internal;
    }
    on servidor2 {
    device /dev/drbd0;
    disk /dev/sda1;
    address 192.168.25.10:7793;
    meta-disk internal;
    }
    }

    isso e o meu fdisk -l

    root@Master:/etc/ha.d# fdisk -l
    Disk /dev/ram0: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram1: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram2: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram3: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram4: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram5: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram6: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram7: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram8: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram9: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram10: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram11: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram12: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram13: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram14: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/ram15: 64 MiB, 67108864 bytes, 131072 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes

    Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xe80625d2

    Dispositivo Inicializar Start Fim Setores Size Id Tipo
    /dev/sda1 * 2048 37750783 37748736 18G 83 Linux
    /dev/sda2 37752830 41940991 4188162 2G 5 Estendida
    /dev/sda5 37752832 41940991 4188160 2G 82 Linux swap / Solaris

    • isac.ferreira
      3 de agosto de 2017 at 10:31

      Olá, Diego. Provavelmente seja o nome do arquivo que está errado.

      Sds,

  5. mateus
    7 de outubro de 2017 at 11:37

    Bom dia Professor Isac Ferreira,

    estou com o seguinte erro ao executar o comando abaixo:

    root@no03:~# drbdadm create-md r0
    drbd.d/global_common.conf:32: Parse error: ‘protocol | on | disk | net | syncer | startup | handlers | ignore-on | stacked-on-top-of’ expected,
    but got ‘options’ (TK 281)

    alguma ideia?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *