Inhaltsverzeichnis

Pacemaker und Corosync

Aus Heartbeat spaltete sich 2007 Pacemaker ab, es ist praktisch eine Heartbeat-Version, die konform zum openAIS-Cluster Communication Layer sein sollte. 2008 wurde das bisherige Pacemaker in Pacemaker + Corosync aufgespalten, hierdurch wurde der Cluster Communication Layer (Corosync) von den Plugins für die Clusterdienste (Pacemaker) getrennt.

Diese Anleitung zeigt nur den ersten Schritt, um ein Gefühl dafür zu bekommen. Weitergehende Infos findet man hier: http://www.clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/

Host-VM-System - Multicast-Einstellung

Damit Pacemaker (auf den Gast-VM-Systemen) zwischen den Clusterknoten kommunizieren kann, müssen die BRIDGE-DEVs (hier br1) Multicast zulassen:

> echo 2 > /sys/devices/virtual/net/br1/bridge/multicast_router
> echo 1 >/sys/class/net/br1/bridge/multicast_querier

zum Beispiel:

> vi /etc/rc.local
#!/bin/bash

touch /forcefsck
echo 2 > /sys/devices/virtual/net/br1/bridge/multicast_router
echo 1 >/sys/class/net/br1/bridge/multicast_querier
exit 0

Installation von Corosync und Pacemaker

# aptitude install pacemaker corosync

Nach der Installation von Pacemaker:

# ln -s /usr/lib/ocf/lib/heartbeat/ /lib/heartbeat

# update-rc.d -f drbd remove

Corosync

Corosync Multicast: 224.0.0.80:26587

Ubuntu 10.04

/etc/corosync/corosync.conf

Bei mehreren "interface"-Sektionen müssen sich die "ringnumber" unterscheiden (und der "rrp_mode" muss auf active/passive gesetzt werden):

      interface {
              # The following values need to be set based on your environment
              ringnumber: 0
              #bindnetaddr: 127.0.0.1
              bindnetaddr: 192.168.0.0
              mcastaddr: 226.94.1.1
              mcastport: 5405
      }

Ubuntu 12.04

/etc/corosync/corosync.conf

Bei mehreren "interface"-Sektionen müssen sich die "ringnumber" unterscheiden (und der "rrp_mode" muss auf active/passive gesetzt werden):

      interface {
              # The following values need to be set based on your environment
              ringnumber: 0
              #bindnetaddr: 127.0.0.1
              bindnetaddr: 192.168.0.0
              mcastaddr: 226.94.1.1
              mcastport: 5405
      }

"ver" sollte auf "1" gesetzt werden, bei "0" würde Pacemaker automatisch starten (geht aber nicht sauber):

service {
        # Load the Pacemaker Cluster Resource Manager
        ver:       1
        name:      pacemaker
}
# /etc/init.d/pacemaker restart

/etc/default/corosync

# start corosync at boot [yes|no]
START=yes
# /etc/init.d/corosync restart

Pacemaker

Pacemaker

Pacemaker 1 und Corosync 1 mit Ubuntu 12.04

> corosync -v
Corosync Cluster Engine, version '1.4.2'
Copyright (c) 2006-2009 Red Hat, Inc.
> pacemakerd --version
Pacemaker 1.1.6
Written by Andrew Beekhof

Pacemaker+Corosync

/etc/corosync/corosync.conf
# Please read the openais.conf.5 manual page
 
totem {
        version: 2
 
        # How long before declaring a token lost (ms)
        token: 3000
 
        # How many token retransmits before forming a new configuration
        token_retransmits_before_loss_const: 10
 
        # How long to wait for join messages in the membership protocol (ms)
        join: 60
 
        # How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)
        consensus: 3600
 
        # Turn off the virtual synchrony filter
        vsftype: none
 
        # Number of messages that may be sent by one processor on receipt of the token
        max_messages: 20
 
        # Limit generated nodeids to 31-bits (positive signed integers)
        clear_node_high_bit: yes
 
        # Disable encryption
        secauth: off
 
        # How many threads to use for encryption/decryption
        threads: 0
 
        # Optionally assign a fixed node id (integer)
        # nodeid: 1234
 
        # This specifies the mode of redundant ring, which may be none, active, or passive.
        rrp_mode: none
 
        interface {
                # The following values need to be set based on your environment 
                ringnumber: 0
                bindnetaddr: 10.11.12.0
                mcastaddr: 226.94.1.1
                mcastport: 5410
        }
}
 
amf {
        mode: disabled
}
 
service {
        # Load the Pacemaker Cluster Resource Manager
        ver:       0
        name:      pacemaker
}
 
aisexec {
        user:   root
        group:  root
}
 
logging {
        fileline: off
        to_stderr: yes
        to_logfile: no
        to_syslog: yes
        syslog_facility: daemon
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
                tags: enter|leave|trace1|trace2|trace3|trace4|trace6
        }
}

wenn hier ver: 0 steht, dann wird beim Start von Corosync das Pacemaker-Plugin geladen:

service {
        # Load the Pacemaker Cluster Resource Manager
        ver:       0
        name:      pacemaker
}

Das bedeutet, dass der Dienst pacemaker nicht als laufender Dienst erkennbar ist:

> service pacemaker status
pacemakerd is stopped

> ps alx | fgrep pacemaker
0     0 38259  4094  20   0   9504   764 -      R+   pts/1      0:00 fgrep --color=auto pacemaker

…trotzdem wird der CRM-Monitor funktionieren:

> crm_mon -fr
============
Last updated: Thu Apr 20 08:21:11 2017
Last change: Thu Apr 20 08:09:08 2017 via crmd on ttvdbgalera001
Stack: openais
Current DC: ttvdbgalera002 - partition with quorum
Version: 1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c
3 Nodes configured, 3 expected votes
1 Resources configured.
============

Online: [ ttvdbgalera002 ttvdbgalera003 ttvdbgalera001 ]

Full list of resources:

res_mysqlIP     (ocf::heartbeat:mysqlIP):       Started ttvdbgalera001

Migration summary:
* Node ttvdbgalera001: 
* Node ttvdbgalera002: 
* Node ttvdbgalera003: 
crm configure show
node ttvdbgalera001 \
        attributes standby="off" maintenance="off"
node ttvdbgalera002 \
        attributes standby="off" maintenance="off"
node ttvdbgalera003 \
        attributes standby="off" maintenance="off"
primitive res_mysqlIP ocf:heartbeat:mysqlIP \
        params ip="10.11.12.100" nic="bond0" \
        op start interval="0" timeout="30" \
        op stop interval="0" timeout="30" \
        op monitor interval="10s" \
        meta is-managed="true" target-role="Started"
property $id="cib-bootstrap-options" \
        dc-version="1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f42c" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="3" \
        stonith-enabled="false" \
        no-quorum-policy="ignore" \
        last-lrm-refresh="1492678548" \
        maintenance-mode="false"
rsc_defaults $id="rsc-options" \
        resource-stickiness="100"

Pacemaker 1 und Corosync 2 mit Ubuntu 14.04

Pacemaker muss nach Corosync gestartet werden und vor Corosync beendet werden!!!

> update-rc.d pacemaker start 20 2 3 4 5 . stop 00 0 1 6 .

damit Pacemaker mit Corosync komunizieren kann:

/etc/corosync/corosync.conf
...
service {
        # Load the Pacemaker Cluster Resource Manager (5)
        ver:       1
        name:      pacemaker
}
...
/etc/corosync/uidgid.d/pacemaker
uidgid {
        uid: hacluster
        gid: haclient
}