[Pacemaker] drbd 8.3.2 stacked resources controlled by pacemaker

Dan Frincu dfrincu at streamwide.ro
Tue Sep 22 07:41:36 UTC 2009


Hello all,

I'm trying to build an architecture that I'm not 100% sure will work so 
I need some input on the matter. The design is:
- 4 servers (now running on test xen virtual machines)
- the servers will be divided in two separate geographical locations, 2 
servers in site A and 2 servers in site B
- each pair of servers from the same site will form a cluster
- each cluster from both sites will be linked as a stacked resource 
(stacked-on-top-of)

For this setup I'm using drbd-8.3.2-3.x86_64.rpm, 
heartbeat-3.0.0-33.2.x86_64.rpm, openais-0.80.5-15.1.x86_64.rpm, 
resource-agents-1.0-31.4.x86_64.rpm and their respective dependencies.

One question that popped to my mind was that pacemaker is using 
multicast, so the connection between the two sites (if it is done 
through the public internet) should involve multicast routing? What 
bandwidth requirements should be for this kind of setup? I'm assuming 
that the high end requirements will be on the drbd replication part, but 
also I'm interested if there are any specific requirements related to 
latency, delay and (probably) jitter on the multicast connection as it 
uses (correct me if I'm wrong) UDP as a transport?

So far I've configured all 4 virtual machines with drbd, created 
"normal" resources, stacked resources and all seems to be in order, the 
problem is that I don't know how does pacemaker deal with stacked 
resources.

I mean, the goal here is to have one service, let's say apache, run on a 
device on the stacked resource and to be handled by pacemaker so that 
the apache server either runs on primary stacked resource on site A, or 
fails over on stacked resource on site B, and underneath all that, if in 
site A one of the two servers fails, it switches to the other one and 
the same should happen in site B.

I see it like a RAID-1 "array" on top of two RAID-1 "arrays", if you 
understand the analogy.

cat /etc/ais/openais.conf
aisexec {
        user: root
        group: root
}

amf {
        mode: disabled
}

logging {
        to_stderr: yes
        debug: off
        timestamp: on
        to_file: no
        to_syslog: yes
        syslog_facility: daemon
}

totem {
        version: 2
        token: 3000
        token_retransmits_before_loss_const: 10
        join: 60
        consensus: 1500
        vsftype: none
        max_messages: 20
        clear_node_high_bit: yes
        secauth: off
        threads: 0
        # nodeid: 1234
        rrp_mode: passive

        interface {
                ringnumber: 0
                bindnetaddr: 192.168.1.0
                mcastaddr: 226.94.1.1
                mcastport: 5405
        }

        interface {
                ringnumber: 1
                bindnetaddr: 172.16.0.0
                mcastaddr: 226.94.1.1
                mcastport: 5406
        }
}

service {
        ver: 0
        name: pacemaker
        use_mgmtd: no
}

A question on the openais.conf, these two "rings", do they have to be on 
separate subnets or can they be on the same subnet. On the same issue, 
should one interface declaration be linked to the subnet where drbd is 
also running and the other declaration to be linked to pacemaker, or it 
doesn't matter which goes where?

In /etc/drbd.conf the stacked resources look like this:

resource "st1" {
  protocol C;

  on srv1 {
    device     /dev/drbd0;
    disk       /dev/xvda3;
    address    172.16.0.1:7700;
    flexible-meta-disk  internal;
  }

  on srv2 {
    device    /dev/drbd0;
    disk      /dev/xvda3;
    address   172.16.0.2:7700;
    flexible-meta-disk  internal;
  }
}

resource "st2" {
  protocol C;

  on srv3 {
    device     /dev/drbd0;
    disk       /dev/xvda3;
    address    172.16.0.3:7701;
    flexible-meta-disk  internal;
  }

  on srv4 {
    device     /dev/drbd0;
    disk       /dev/xvda3;
    address    172.16.0.4:7701;
    flexible-meta-disk  internal;
  }
}

resource "stacked" {
  protocol      C;
  stacked-on-top-of st1 {
    device      /dev/drbd10;
    address     172.16.0.1:7704;
  }

  stacked-on-top-of st2 {
    device      /dev/drbd10;
    address     172.16.0.3:7704;
  }
}

The cat /proc/drbd shows the resources both normal and stacked are up 
and running:

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:1 nr:0 dw:1 dr:110 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

10: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

Now in order for me to start the resources, I have to perform the start 
process manually, involving /etc/init.d/drbd start, which I have read in 
the docs that isn't recommended if I want to use OCF style resources, 
which I do.
I first start drbd, this loads the normal resources, which stay in a 
"cs:Connected ro:Secondary/Secondary" state until I do a "drbdadm 
--primary all". Then I have to do a "drbdadm --stacked up stacked" on 
the cluster members I've assigned as primary, then the stacked resources 
go into a "cs:Connected ro:Secondary/Secondary" state until I, again, 
set one of them as primary.
So the question is, how do I get pacemaker to start both normal and 
stacked resources, promote normal and stacked resources as primary and 
then start a web server on the stacked resource that becomes primary.

Any relevant documentation links or examples are more than welcome, as 
well as ideas and suggestions.

Thank you in advance,
Dan.

-- 
Dan FRINCU
Streamwide Romania
E-mail: dfrincu at streamwide.ro





More information about the Pacemaker mailing list