keepalived

Um einen Cluster mit DRBD und OCFS sinnvoll einsetzen zu können benötigen wir einen weiteren Clusterservice wie keepalived oder Pacekeeper.
In unserem Beispiel beschränken wir uns aber auf keepalived da die Configuration sehr einfach ist und denoch wirkungsvoll.

Wir haben hier je eine MASTER und eine BACKUP Config. Zeilen auf welche besonders zu achten sind wurden hervorgehoben.

MASTER :: /etc/keepalived/keepalived.conf

## Unique identifier for every router
global_defs {
        router_id 4lords-share
        smtp_server localhost
        smtp_connect_timeout 30
}

vrrp_script chk_mountpoint {
    ## THIS IS AN EXAMPLE BY USING AUTOMOUNTER WHICH I RECOMMEND WITH APACHE AND OCFS OVER DRBD
    script "[[ -h /var/www ]] && ls /mnt/www/*"   ## DOES MOUNTPOINT EXISTS
    interval 10                                   ## CHECK INTERVALL 10 SEC
    weight 2
}

vrrp_script chk_apache {
    script "killall -0 apache2"  ## CHEAPER THAN PIDOF 
    interval 10                  ## CHECK EVERY 10 SEC
    weight 2                     ## WEGHTS 2 POINTS IF OK
}                                                                                                                                                                                                              

## INTERNAL INTERFACE                                                                                                                                                                                          
vrrp_instance VI_0 {                                                                                                                                                                                           

    state MASTER                                                                                                                                                                                               
    interface eth0                                                                                                                                                                                             
    virtual_router_id 17                                                                                                                                                                                       
    priority 100                                                                                                                                                                                               
    advert_int 1                                                                                                                                                                                               
        smtp_alert                                                                                                                                                                                             
        peempt_delay 300                                                                                                                                                                                       
        garp_master_delay 1                                                                                                                                                                                    

    authentication {                                                                                                                                                                                           
        auth_type PASS                                                                                                                                                                                         
        auth_pass <YOUR_PASSPHRASE>                                                                                                                                                         
    }                                                                                                                                                                                                          

    virtual_ipaddress {                                                                                                                                                                                        
        192.168.1.10
    }

        track_script {
                chk_mountpoint
                chk_apache
        }

}

Zur Erklärung: In die Configurationen wurden zwei vrrp_scripts eingebaut, welche beispielhaft zu betrachten sind. Hie könnten auch externe Scripte mit entsprechendne RETURN CODES eingepflegt werden.

Wir beschränken uns aber auf einfache Einzeiler.
Script 1:

vrrp_script chk_mountpoint {
    ## THIS IS AN EXAMPLE BY USING AUTOMOUNTER WHICH I RECOMMEND WITH APACHE AND OCFS OVER DRBD
    script "[[ -h /var/www ]] && ls /mnt/www/*"   ## DOES MOUNTPOINT EXISTS
    interval 10                                   ## CHECK INTERVALL 2 SEC
    weight 2
}

Diese Script prüft ob ein Mountpoint vohanden ist oder nicht. Ist dieser nicht verfügbar wird die Gewichtung um 2 erhöht. Das heisst, wenn wir Zeile 27 betrachten, so ist die Priority auf MASTER 100 und BACKUP 99. Mit weight 2 wird die PRIORITY 99 auf Backup um 2 angehoben und ist damit höher als 100. Somit wird der BACKUP sofort MASTER.

Interval 10 heisst nur dass das Script alle 10 Sec ausgeführt wird.

Analog verhält sich dies mit Script 2

 

BACKUP :: /etc/keepalived/keepalived.conf

## Unique identifier for every router
global_defs {
        router_id 4lords-share
        smtp_server localhost
        smtp_connect_timeout 30
}

vrrp_script chk_mountpoint {
    ## THIS IS AN EXAMPLE BY USING AUTOMOUNTER WHICH I RECOMMEND WITH APACHE AND OCFS OVER DRBD
    script "[[ -h /var/www ]] && ls /mnt/www/*"   ## DOES MOUNTPOINT EXISTS
    interval 10                                   ## CHECK INTERVALL 2 SEC
    weight 2
}

vrrp_script chk_apache {
    script "killall -0 apache2"  ## CHEAPER THAN PIDOF 
    interval 10                  ## CHECK EVERY 2 SEC
    weight 2                     ## WEGHTS 2 POINTS IF OK
}                                                                                                                                                                                                              

## INTERNAL INTERFACE                                                                                                                                                                                          
vrrp_instance VI_0 {                                                                                                                                                                                           

    state BACKUP                                                                                                                                                                                               
    interface eth0                                                                                                                                                                                             
    virtual_router_id 17                                                                                                                                                                                       
    priority 99                                                                                                                                                                                               
    advert_int 1                                                                                                                                                                                               
        smtp_alert                                                                                                                                                                                             
        peempt_delay 300                                                                                                                                                                                       
        garp_master_delay 1                                                                                                                                                                                    

    authentication {                                                                                                                                                                                           
        auth_type PASS                                                                                                                                                                                         
        auth_pass <YOUR_PASSPHRASE>                                                                                                                                                         
    }                                                                                                                                                                                                          

    virtual_ipaddress {                                                                                                                                                                                        
        192.168.1.10
    }

        track_script {
                chk_mountpoint
                chk_apache
        }

}