Pacemaker und Corosync

aktivieren von HA-CD und System-Disc Repo
installieren von libpacemaker-devel, libpacemaker3, pacemaker, pacemaker-mgmt, pacemaker-mgmt-client und pacemaker-mgmt-devel


Konfiguration

Node 1

To configure Corosync, let's get the actual configuration: Sind in einem Netz mehrere pacemaker/corosync-Instanzen, so muss der Port variieren .

export ais_port=4000
export ais_mcast=226.94.1.1
export ais_addr=`ip address show eth0 | grep "inet " | tail -n 1 | awk '{print $4}' | sed s/255/0/`

Then, we check the data:

env | grep ais_

Important: The variable ais_addr must contains the network address that the cluster will listen. In our article, this address is 10.0.0.0

Now we create the corosync config file:

cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
sed -i.gres "s/.*mcastaddr:.*/mcastaddr:\ $ais_mcast/g" /etc/corosync/corosync.conf
sed -i.gres "s/.*mcastport:.*/mcastport:\ $ais_port/g" /etc/corosync/corosync.conf
sed -i.gres "s/.*bindnetaddr:.*/bindnetaddr:\ $ais_addr/g" /etc/corosync/corosync.conf

Let's add some information to the file:

cat <<-END >>/etc/corosync/corosync.conf
aisexec { 
user: root 
group: root 
} 
END 
cat <<-END >>/etc/corosync/corosync.conf 
service { 
# Load the Pacemaker Cluster Resource Manager 
name: pacemaker 
ver: 0 
} 
END

The /etc/corosync/corosync.conf file will looks like this:
(ggf. Bindnet Adresse anpassen)

compatibility: whitetank

totem {
   version: 2
   secauth: off
   threads: 0
   interface {
       ringnumber: 0
       bindnetaddr: 10.0.0.51
       mcastaddr: 226.94.1.1
       mcastport: 4000
   }
}

logging {
   fileline: off
   to_stderr: yes
   to_logfile: yes
   to_syslog: yes
   logfile: /tmp/corosync.log
   debug: off
   timestamp: on
   logger_subsys {
      subsys: AMF
      debug: off
   }
}

amf {
   mode: disabled
}
aisexec {
   user: root
   group: root
}
service {
   # Load the Pacemaker Cluster Resource Manager
   name: pacemaker
   ver: 0
}     


Beide Nodes

mkdir /var/log/cluster/


Node 1

rcopenais start


Let's check if the service is ok:

grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages

May 29 10:05:44 sles11tpl smartd[13277]: Opened configuration file /etc/smartd.conf
May 29 10:07:13 sles11tpl smartd[3756]: Opened configuration file /etc/smartd.conf
Jun 15 08:46:06 sles11tpl smartd[3812]: Opened configuration file /etc/smartd.conf
Jun 15 08:53:50 sles11tpl smartd[3766]: Opened configuration file /etc/smartd.conf
Jun 15 09:07:54 sabnode1 smartd[3781]: Opened configuration file /etc/smartd.conf
Jun 15 10:21:52 sabnode1 smartd[3746]: Opened configuration file /etc/smartd.conf
Jun 15 11:44:42 sabnode1 smartd[4359]: Opened configuration file /etc/smartd.conf
Jun 15 12:25:08 sabnode1 smartd[4354]: Opened configuration file /etc/smartd.conf
Jun 15 14:07:50 sabnode1 smartd[4396]: Opened configuration file /etc/smartd.conf
Jun 15 14:32:37 sabnode1 smartd[4367]: Opened configuration file /etc/smartd.conf
Jun 15 16:11:41 sabnode1 smartd[4374]: Opened configuration file /etc/smartd.conf
Jun 15 16:29:40 sabnode1 smartd[4359]: Opened configuration file /etc/smartd.conf
Jun 18 08:15:58 sabnode1 smartd[4363]: Opened configuration file /etc/smartd.conf
Jun 18 08:41:52 sabnode1 smartd[4341]: Opened configuration file /etc/smartd.conf
Jun 18 10:11:36 sabnode1 smartd[20264]: Opened configuration file /etc/smartd.conf
Jun 18 10:23:17 sabnode1 smartd[20219]: Opened configuration file /etc/smartd.conf
Jun 18 11:44:26 sabnode1 smartd[20164]: Opened configuration file /etc/smartd.conf
Jun 18 13:11:30 sabnode1 smartd[20225]: Opened configuration file /etc/smartd.conf
Jun 18 13:56:15 sabnode1 smartd[21599]: Opened configuration file /etc/smartd.conf
Jun 18 15:30:51 sabnode1 smartd[21596]: Opened configuration file /etc/smartd.conf
Jun 18 15:39:49 sabnode1 smartd[21661]: Opened configuration file /etc/smartd.conf
Jun 19 09:05:10 sabnode1 smartd[21667]: Opened configuration file /etc/smartd.conf
Jun 19 09:13:01 sabnode1 smartd[21611]: Opened configuration file /etc/smartd.conf
Jun 19 10:07:43 sabnode1 smartd[21749]: Opened configuration file /etc/smartd.conf
Jun 19 10:50:34 sabnode1 smartd[21611]: Opened configuration file /etc/smartd.conf
Jun 19 10:58:25 sabnode1 smartd[21777]: Opened configuration file /etc/smartd.conf
Jun 19 11:26:51 sabnode1 smartd[21753]: Opened configuration file /etc/smartd.conf
Jun 19 11:36:51 sabnode1 smartd[21752]: Opened configuration file /etc/smartd.conf
Jun 19 11:47:09 sabnode1 smartd[21776]: Opened configuration file /etc/smartd.conf
Jun 19 12:16:21 sabnode1 smartd[21750]: Opened configuration file /etc/smartd.conf
Jun 19 13:29:07 sabnode1 smartd[21769]: Opened configuration file /etc/smartd.conf
Jun 19 13:38:31 sabnode1 smartd[21749]: Opened configuration file /etc/smartd.conf
Jun 19 14:01:01 sabnode1 smartd[21768]: Opened configuration file /etc/smartd.conf
Jun 19 14:13:21 sabnode1 smartd[21746]: Opened configuration file /etc/smartd.conf
Jun 19 14:38:56 sabnode1 smartd[21772]: Opened configuration file /etc/smartd.conf
Jun 19 14:51:36 sabnode1 smartd[21778]: Opened configuration file /etc/smartd.conf
Jul  9 10:08:51 sabnode1 smartd[21769]: Opened configuration file /etc/smartd.conf
Jul 10 08:32:46 sabnode1 smartd[21769]: Opened configuration file /etc/smartd.conf
Jul 10 12:02:29 sabnode1 smartd[20062]: Opened configuration file /etc/smartd.conf
Jul 10 12:09:05 sabnode1 smartd[21762]: Opened configuration file /etc/smartd.conf
Jul 10 12:13:48 sabnode1 smartd[20540]: Opened configuration file /etc/smartd.conf
Jul 10 15:01:19 sabnode1 smartd[20566]: Opened configuration file /etc/smartd.conf
Jul 13 10:50:56 sabnode1 smartd[20530]: Opened configuration file /etc/smartd.conf
Jul 13 12:13:25 sabnode1 smartd[19264]: Opened configuration file /etc/smartd.conf
Jul 16 16:16:37 sabnode1 smartd[19266]: Opened configuration file /etc/smartd.conf
Jul 18 16:23:53 sabnode1 smartd[19204]: Opened configuration file /etc/smartd.conf
Jul 18 16:33:23 sabnode1 smartd[19215]: Opened configuration file /etc/smartd.conf
Jul 18 16:40:37 sabnode1 corosync[20469]:  [MAIN  ] Corosync Cluster Engine ('1.2.1'): started and ready to provide service.
Jul 18 16:40:37 sabnode1 corosync[20469]:  [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.


Let's check if corosync started on the right interface:

grep TOTEM /var/log/messages

Jul 18 16:40:37 sabnode1 corosync[20469]:  [TOTEM ] Initializing transport (UDP/IP).
Jul 18 16:40:37 sabnode1 corosync[20469]:  [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jul 18 16:40:37 sabnode1 corosync[20469]:  [TOTEM ] The network interface [10.0.0.212] is now up.
Jul 18 16:40:37 sabnode1 corosync[20469]:  [TOTEM ] A processor joined or left the membership and a new membership was formed.
Jul 18 16:40:46 sabnode1 corosync[20469]:  [TOTEM ] A processor joined or left the membership and a new membership was formed.
Jul 18 16:40:52 sabnode1 corosync[20469]:  [TOTEM ] A processor joined or left the membership and a new membership was formed.


Let's check if pacemaker is up:

grep pcmk_startup /var/log/messages

Jul 18 16:40:37 sabnode1 corosync[20469]:  [pcmk  ] info: pcmk_startup: CRM: Initialized
Jul 18 16:40:37 sabnode1 corosync[20469]:  [pcmk  ] Logging: Initialized pcmk_startup
Jul 18 16:40:37 sabnode1 corosync[20469]:  [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Jul 18 16:40:37 sabnode1 corosync[20469]:  [pcmk  ] info: pcmk_startup: Service: 9
Jul 18 16:40:37 sabnode1 corosync[20469]:  [pcmk  ] info: pcmk_startup: Local hostname: sabnode1


Let's check if the corosync process is up:

ps axf

(should contain something like this)

20469 ?  Ssl  0:00 /usr/sbin/corosync
20474 ?  S    0:00   \_ /usr/lib64/heartbeat/stonithd
20475 ?  S    0:00   \_ /usr/lib64/heartbeat/cib
20476 ?  S    0:00   \_ /usr/lib64/heartbeat/lrmd
20477 ?  S    0:00   \_ /usr/lib64/heartbeat/attrd
20478 ?  S    0:00   \_ /usr/lib64/heartbeat/pengine
20479 ?  S    0:00   \_ /usr/lib64/heartbeat/crmd


Node 2

rcopenais start


Beliebiger Node

Cluster konfigurieren

( crm_mon -i 2 )

crm configure property no-quorum-policy=ignore
crm configure property stonith-enabled=false
crm configure rsc_defaults resource-stickiness=100  


Geänderte Konfiguration anzeigen

crm configure show


node sabnode1
node sabnode2
property $id="cib-bootstrap-options" \
        dc-version="1.1.2-2e096a41a5f9e184a1c1537c82c6da1093698eb5" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="2" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \ 
        resource-stickiness="100"


Erweiterungen

vIP

Beide Nodes

rcopenais start


Node 1

crm
configure primitive vIP ocf:heartbeat:IPaddr2 \ 
params ip=10.0.0.71 cidr_netmask=24 \ 
op monitor interval=30s

Falls Fehler auftreten „stonith“  →crm configure property stonith-enabled=false


GUI

Beliebiger Node

Gnome-Yast-Patterns installieren

Den Folgenden Teil der Datei /etc/corosync/corosync.conf

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

wie folgt anpassen

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

	# mgmtd-Dienst starten, der für die Pacemaker GUI benoetigt wird
	use_mgmtd: 1
}


Passwort für den Benutzer hacluster, der Gruppe haclient setzen

passwd hacluster

Changing password for hacluster.
New Password:
Reenter New Password:
Password changed.


Nach einem Neustart, kann die Pacemaker GUI in Gnome gestartet werden.


Apache2

Installation

Yast Webserver Patterns installiert


Konfiguration

Auf allen Nodes

Apachestart vorbereiten

mkdir /var/log/apache2 && chmod 750 /var/log/apache2


Auf einem Node

  1. In der Pacemaker GUI
  2. ResourcesAdd
    1. PrimativeOK
    2. ID → Einen Namen vergeben
    3. Class → ocf
    4. Provider → heartbeat
    5. Typ → apache
    6. Initial state of resource → Started
    7. Instance AttributesAdd
      1. Name → configfile
      2. Value → /etc/apache2/httpd.conf
    8. Instance AttributesAdd
      1. Name → httpd
      2. Value → /usr/sbin/httpd2-prefork
    9. Instance AttributesAdd
      1. Name → statusurl
      2. Value → http://localhost
  3. ConstraintsAdd
    1. Resource LocationOK
      1. ID → Name vergeben
      2. Resource → den apache auswählen
      3. Score → INFINITY
      4. Node → Standard-Node auswählen


Temp-Verzeichnis für jeden Node

Haben die Nodes kein eigenes /tmp Verzeichnis, so überschrieben sie sich gegenseitig ihre Temp-Dateien. Hieraus resultieren schwerwiegende Fehler in der openAIS-Software. Diese lässt sich hierdurch meistens nicht sauber beenden.

Beide Nodes

Je Node eine weitere Festplatte mit 1GB einhängen


Festplatte partitionieren

#Wenn an Controller 1.0
fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x96ceebdf.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):
Using default value 130

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


Partitionstabelle auslesen

cat /proc/partitions

major  minor    #blocks  name

8        0     31457280  sda
8        1       313236  sda1
8        2     31142002  sda2
8       16      1048576  sdb
8       17      1044193  sdb1


Partition formatieren

mkfs.ext3 -L<LABEL> /dev/sdb1

mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=tmp
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
65280 inodes, 261048 blocks
13052 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


Festplatte automatisch nach /tmp mounten

cp /etc/fstab /etc/fstab.back
echo "LABEL=tmp            /tmp                 ext3       defaults              0 0" >> /etc/fstab


Neuen Node hinzufügen

Cluster-Datei bearbeiten

Die Cluster-Datei /etc/cluster/cluster.conf Beispiel:

<?xml version="1.0"?>
<cluster config_version="1" name="ocfs2" type="gfs">
	<clusternodes>
		<clusternode name="sabnode1" nodeid="1">
			<com_info>
				<rootvolume name="/dev/sda2" fstype="ocfs2"/>
				<eth name="eth0" ip="10.0.0.212" mask="255.255.255.0" gateway="10.0.0.1" mac="00:50:56:85:36:9F"/>
			</com_info>
		</clusternode>
		<clusternode name="sabnode2" nodeid="2">
			<com_info>
				<rootvolume name="/dev/sda2" fstype="ocfs2"/>
				<eth name="eth0" ip="10.0.0.213" mask="255.255.255.0" gateway="10.0.0.1" mac="00:50:56:85:36:9E"/>
			</com_info>
		</clusternode>
		<clusternode name="sabnode3" nodeid="3">
			<com_info>
				<rootvolume name="/dev/sda2" fstype="ocfs2"/>
				<eth name="eth0" ip="10.0.0.214" mask="255.255.255.0" gateway="10.0.0.1" mac="00:50:56:85:76:53"/>
			</com_info>
		</clusternode>
	</clusternodes>
</cluster>

Um einen weiteren Block wie Folgt erweitern

<clusternode name="sabnode3" nodeid="3">
	<com_info>
		<rootvolume name="/dev/sda2" fstype="ocfs2"/>
		<eth name="eth0" ip="10.0.0.214" mask="255.255.255.0" gateway="10.0.0.1" mac="00:50:56:85:76:53"/>
	</com_info>
</clusternode>


Hosts-Datei bearbeiten

Die Datei /etc/hosts um einen weiteren Block wie Folgt erweitern

10.0.0.214      sabnode3.site sabnode3


Initrd neu erzeugen

nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn nAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAnnAn

Resourcen synchron migrieren

Es können mehrere Resourcen synchron migriert werden zB. eine virtuelle IP und eine apache2-Instanz


Mit Resource Colocation

Resourcen müssen vorher angelegt werden

  1. In der Pacemaker GUI
  2. ConstraintsAdd
    1. Resource ColocationOK
      1. ID → Name vergeben
      2. Resource → Primärinstanz auswählen
      3. With Resource → Resource wählen die mit migriert werden soll
      4. Score Attribute → INFINITY
      5. Node Attribute →
      6. Resource Role → Started
      7. With Resource Role → Started
        1. OK


Mit einer Gruppe

GUI im Hack Mode ausführen (ViewHack Mode) Hinweis: Laufen beide Resourcen auf dem 3. Node und dieser fällt aus, so werden die Ressourcen auf den Node mit dem höchsten Score umgezogen. Wurden die anderen Nodes nicht bewertet, so wird auf den ersten Node umgezogen. Startet der 3. Node wieder und ist somit der Node mit dem höchsten Score, so zieht die Resource wieder zurück.

  1. In der Pacemaker GUI
  2. ResourcesAdd
    1. GroupOK
    2. Wizard → OK
      1. ID → Namen für die Gruppe vergeben
      2. Initial state of resource → Start
      3. OK
        1. ID → Namen für erste Resource vergeben
        2. Class → Ocf
        3. Provider → heartbeat
        4. Type → IPaddr2
        5. Forward
          1. Instance Attributes → Element selektieren → Edit
          2. ipEdit
            1. Value → IP-Adresse eingeben → OK
            2. Apply
      4. OK
        1. ID → Namen für zweite Resource vergeben
        2. Class → Ocf
        3. Provider → heartbeat
        4. Type → apache
        5. Forward
          1. AddInstance AttributesOK
          2. AddAdd
          3. NvpairOK
            1. Name → configfile
            2. Value → /etc/apache2/httpd.conf
            3. OK
          4. AddNvpairOK
            1. Name → httpd
            2. Value → /usr/sbin/httpd2-prefork
            3. OK
          5. AddNvpairOK
            1. Name → statusurl
            2. Value → http://localhost
            3. OK
            4. OK
          6. Apply
        6. Cancle
      5. Apply
  3. ConstraintsAdd
    1. Resource LocationOK
    2. ID → Namen für die Constraints vergeben
    3. Resource → Angelegte Gruppe wählen
    4. Score → INFINITY
    5. Node → PimaryHost auswählen
    6. OK


Node Scoring

Das Scoring beschreibt das Umzugsverhalten der Resourcen, beim Staten, stopen, und dem Ausfall der Nodes. Mit einem höheren Score wird ein Node beim starten und dem Umzug der Resourcen, bevorzugt. (Logik variabel, siehe Testfälle 3 u. 4)

Scoring Konfigurieren

  1. In der Pacemaker GUI
  2. ConstraintsAdd
    1. Resource LocationOK
    2. ID → Namen vergeben
    3. Gruppe bzw. Resource auswählen auf die das Scoring bezogen werden soll
    4. Score → Score festlegen
    5. Node: Default-Start Node auswählen, auf diesen Node wird auch das Scoring bezogen
    6. OK


Testfälle

Testfall 1

Startwerte
Node 2:
   Score: 100
Node 3:
   Score: 150
   Default

Ausfall (N3)
Node 2:
   Active
Node 3:

Back online
Node 2:
Node 3:
   Active


Testfall 2

Startwerte
Node 2:
   Score: 100
Node 3:
   Score: 100
   Default

Ausfall (N3)
Node 2:
   Active
Node 3:

Back online
Node 2:
   Active
Node 3:


Testfall 3

Startwerte
Node 2:
   Score: 200
Node 3:
   Score: 100
   Default

Node 2: Offline
Node 3: Offline
Resource: Offline

Node 2: Offline
Node 3: Online
Resource: Offline

Node 2: Online
Node 3: Online
Resource: Online -> Node 2

Mit Verwendung der Scores, kann der Primaryhost überschrieben werden

Vor Ausfall
Node 2:
   Active
Node 3: -

Ausfall (N2)
Node 2:
Node 3:
   Active

Back online
Node 2:
   Active
Node 3:


Testfall 4

Startwerte
Node 1:
   Score: -
Node 2:
   Score: 200
Node 3:
   Score: 100
   Default

Node 1: Offline
Node 2: Offline
Node 3: Offline
Resource: Offline

Node 1: Online
Node 2: Offline
Node 3: Offline
Resource: Offline

Node 1: Online
Node 2: Offline
Node 3: Online
Resource: Online -> Node 3

Node 1: Online
Node 2: Online
Node 3: Online
Resource: Online -> Node 2

Mit Verwendung der Scores, kann der Primaryhost überschrieben werden

Vor Ausfall
Node 2:
   Active
Node 3: -

Ausfall (N2)
Node 2:
Node 3:
   Active

Back online
Node 2:
   Active
Node 3:


Beispiel Konfiguration 1

Beispielkonfiguration für eine Konfiguration, bei der die Ressourcen nach einem Ausfall, auf ihre ursprünglichen Node zurückziehen.

<cib validate-with="pacemaker-1.2" crm_feature_set="3.0.2" have-quorum="1" admin_epoch="0" epoch="165" num_updates="0" cib-last-written="Wed Jul 25 10:50:21 2012" dc-uuid="sabnode1">
	<configuration>
 
		<!-- CRM / Cluster- Konfiguration -->
		<crm_config>
			<cluster_property_set id="cib-bootstrap-options">
				<nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.2-2e096a41a5f9e184a1c1537c82c6da1093698eb5"/>
				<nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="openais"/>
				<nvpair id="cib-bootstrap-options-expected-quorum-votes" name="expected-quorum-votes" value="3"/>
				<nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
				<nvpair id="cib-bootstrap-options-last-lrm-refresh" name="last-lrm-refresh" value="1343050254"/>
			</cluster_property_set>
		</crm_config>
 
		<!-- Auflistung der Nodes -->
		<nodes>
			<node id="sabnode1" uname="sabnode1" type="normal"/>
			<node id="sabnode2" uname="sabnode2" type="normal"/>
			<node id="sabnode3" uname="sabnode3" type="normal"/>
		</nodes>
 
		<!-- Verfuegbare Resourcen -->
		<resources>
 
			<!-- Gruppenname -->
			<group id="ApacheVIPGrp">
 
			<!-- Grupenparameter -->
				<meta_attributes id="ApacheVIPGrp-meta_attributes">
					<nvpair id="ApacheVIPGrp-meta_attributes-target-role" name="target-role" value="started"/>
				</meta_attributes>
 
				<!-- Ressource in der Gruppe -->
				<primitive class="ocf" id="vIP" provider="heartbeat" type="IPaddr2">
					<operations id="vIP-operations">
						<op id="vIP-op-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="vIP-instance_attributes">
						<nvpair id="vIP-instance_attributes-ip" name="ip" value="10.0.0.71"/>
					</instance_attributes>
				</primitive>
				<primitive class="ocf" id="vIP2" provider="heartbeat" type="IPaddr2">
					<operations id="vIP2-operations">
						<op id="vIP2-op-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="vIP2-instance_attributes">
						<nvpair id="vIP2-instance_attributes-ip" name="ip" value="10.0.0.72"/>
					</instance_attributes>
				</primitive>
				<primitive class="ocf" id="apache" provider="heartbeat" type="apache">
					<operations id="apache-operations">
						<op id="apache-op-monitor-10" interval="10" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="apache-instance_attributes">
						<nvpair id="apache-instance_attributes-configfile" name="configfile" value="/etc/apache2/httpd.conf"/>
						<nvpair id="apache-instance_attributes-httpd" name="httpd" value="/usr/sbin/httpd2-prefork"/>
						<nvpair id="apache-instance_attributes-statusurl" name="statusurl" value="http://localhost"/>
					</instance_attributes>
				</primitive>
			</group>
 
			<!-- Weitere gruppe -->
			<group id="SingleVIPGrp">
				<meta_attributes id="SingleVIPGrp-meta_attributes">
					<nvpair id="SingleVIPGrp-meta_attributes-target-role" name="target-role" value="started"/>
				</meta_attributes>
				<primitive class="ocf" id="vIP3" provider="heartbeat" type="IPaddr2">
					<operations id="vIP3-operations">
						<op id="vIP3-op-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="vIP3-instance_attributes">
						<nvpair id="vIP3-instance_attributes-ip" name="ip" value="10.0.0.73"/>
					</instance_attributes>
				</primitive>
			</group>
 
		</resources>
 
		<!-- Einschaenkungen -->
		<constraints>
			<!-- Legt fest, wie sich die ressourcen bei Ausfaellen verhalten sollen -->
			<rsc_location id="vIPapacheResLoc" node="sabnode3" rsc="ApacheVIPGrp" score="INFINITY"/>
			<rsc_location id="vIPapacheResLoc2" node="sabnode1" rsc="SingleVIPGrp" score="INFINITY"/>
		</constraints>
 
		<op_defaults>
			<meta_attributes id="op_defaults-options">
				<nvpair id="op_defaults-options-record-pending" name="record-pending" value="false"/>
			</meta_attributes>
		</op_defaults>
	</configuration>
</cib>


Beispiel Konfiguration 2

Beispielkonfiguration für eine Konfiguration, bei der die Ressourcen nach einem Ausfall, NICHT auf ihre ursprünglichen Node zurückziehen.

 


Multicast-Adressen

Testen mehrere, verschiedener Multicastadressen. Die Multicastadresse, wird in der /etc/corosync/corosync.conf Datei im Bereich totem festgelegt

totem {
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
bindnetaddr: 10.0.0.51
mcastaddr: 226.94.1.1
mcastport: 4000
        }
}

Test 1

Testvorgaben

totem {
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
bindnetaddr: 10.0.0.51
mcastaddr: 10.0.0.52
mcastport: 4000
        }
}


Resultat

Openais startet nicht mehr korrekt, es wurden 94,5% CPU-Leistung beansprucht. Das System lies sich nicht mehr bedienen.
FAILED


Test 2

Testvorgaben

totem {
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
bindnetaddr: 10.0.0.51
mcastaddr: 226.94.1.2
mcastport: 4000
        }
}


Resultat

Openais startet ohne erhöhten Ressourcenverbrauch.
SUCCESS


XML-Konfiguration einlesen

Beispiel XML-Konfigurationsdatei

/var/lib/hearbeat/crm/cib.xml

<cib validate-with="pacemaker-1.2" crm_feature_set="3.0.2" have-quorum="1" dc-uuid="sabnode1" admin_epoch="0" epoch="93" num_updates="0" cib-last-written="Mon Jul 23 15:58:24 2012">
	<configuration>
		<!-- CRM / Cluster- Konfiguration -->
		<crm_config>
			<cluster_property_set id="cib-bootstrap-options">
				<nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.2-2e096a41a5f9e184a1c1537c82c6da1093698eb5"/>
				<nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="openais"/>
				<nvpair id="cib-bootstrap-options-expected-quorum-votes" name="expected-quorum-votes" value="3"/>
				<nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
				<nvpair id="cib-bootstrap-options-last-lrm-refresh" name="last-lrm-refresh" value="1343050254"/>
			</cluster_property_set>
		</crm_config>
 
		<!-- Auflistung der Nodes -->
		<nodes>
			<node id="sabnode1" type="normal" uname="sabnode1"/>
			<node id="sabnode2" type="normal" uname="sabnode2"/>
			<node id="sabnode3" type="normal" uname="sabnode3"/>
		</nodes>
 
		<!-- Verfuegbare Resourcen -->
		<resources>
			<group id="ApacheVIPGrp">
				<!-- Gruppenparameter -->
				<meta_attributes id="ApacheVIPGrp-meta_attributes">
					<nvpair id="ApacheVIPGrp-meta_attributes-target-role" name="target-role" value="started"/>
				</meta_attributes>
 
				<!-- Konfiguration fuer virtuelle IP -->
				<primitive class="ocf" id="vIP" provider="heartbeat" type="IPaddr2">
					<operations id="vIP-operations">
						<op id="vIP-op-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="vIP-instance_attributes">
						<nvpair id="vIP-instance_attributes-ip" name="ip" value="10.0.0.71"/>
					</instance_attributes>
				</primitive>
 
				<!-- Konfiguration fuer Apache Webserver 2 -->				
				<primitive class="ocf" id="apache" provider="heartbeat" type="apache">
					<operations id="apache-operations">
						<op id="apache-op-monitor-10" interval="10" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="apache-instance_attributes">
						<nvpair id="apache-instance_attributes-configfile" name="configfile" value="/etc/apache2/httpd.conf"/>
						<nvpair id="apache-instance_attributes-httpd" name="httpd" value="/usr/sbin/httpd2-prefork"/>
						<nvpair id="apache-instance_attributes-statusurl" name="statusurl" value="http://localhost"/>
					</instance_attributes>
				</primitive>
			</group>
		</resources>
 
		<!-- Gibt an, auf welchem Node welche Resource mit welchem Score starten soll -->
		<constraints>
			<rsc_location node="sabnode3" rsc="ApacheVIPGrp" id="vIPapacheResLoc" score="INFINITY"/>
		</constraints>
 
		<op_defaults>
			<meta_attributes id="op_defaults-options">
				<nvpair id="op_defaults-options-record-pending" name="record-pending" value="false"/>
			</meta_attributes>
		</op_defaults>
	</configuration>
</cib>


Einlesen

Um eine Konfiguration einzulesen zu können, muss die erste Zeile bearbeitet werden.
Um die Datei importieren zu können muss sie sich im System befinden.

Änderung

Von

<cib validate-with="pacemaker-1.2" crm_feature_set="3.0.2" have-quorum="1" dc-uuid="sabnode1" admin_epoch="0" epoch="93" num_updates="0" cib-last-written="Mon Jul 23 15:58:24 2012">
	<configuration>
	...

Nach

<cib>
	<configuration>
	...

ändern

Hiernach die Konfiguration mit folgendem Befehl importieren

EINFACH
cibadmin -U -x <Pfad zur Konfigurations XML-Datei>
cibadmin -U -x /root/configuration.xml

KOMBINIERT
cibadmin -E --force && cibadmin -U -x <Pfad zur Konfigurations XML-Datei>
cibadmin -E --force && cibadmin -U -x /root/corosyncConfiguration.xml

XML-Konfiguration erweitern

Um eine Ressource in einer Gruppe

Um Markierten Bereich erweitern und ID's entsprechend anpassen

<cib validate-with="pacemaker-1.2" crm_feature_set="3.0.2" have-quorum="1" dc-uuid="sabnode1" admin_epoch="0" epoch="93" num_updates="0" cib-last-written="Mon Jul 23 15:58:24 2012">
	<configuration>
		<!-- CRM / Cluster- Konfiguration -->
		<crm_config>
			<cluster_property_set id="cib-bootstrap-options">
				<nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.2-2e096a41a5f9e184a1c1537c82c6da1093698eb5"/>
				<nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="openais"/>
				<nvpair id="cib-bootstrap-options-expected-quorum-votes" name="expected-quorum-votes" value="3"/>
				<nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
				<nvpair id="cib-bootstrap-options-last-lrm-refresh" name="last-lrm-refresh" value="1343050254"/>
			</cluster_property_set>
		</crm_config>
 
		<!-- Auflistung der Nodes -->
		<nodes>
			<node id="sabnode1" type="normal" uname="sabnode1"/>
			<node id="sabnode2" type="normal" uname="sabnode2"/>
			<node id="sabnode3" type="normal" uname="sabnode3"/>
		</nodes>
 
		<!-- Verfuegbare Resourcen -->
		<resources>
			<group id="ApacheVIPGrp">
				<!-- Gruppenparameter -->
				<meta_attributes id="ApacheVIPGrp-meta_attributes">
					<nvpair id="ApacheVIPGrp-meta_attributes-target-role" name="target-role" value="started"/>
				</meta_attributes>
 
				<!-- Konfiguration fuer virtuelle IP 1 u. 2 -->
				<primitive class="ocf" id="vIP" provider="heartbeat" type="IPaddr2">
					<operations id="vIP-operations">
						<op id="vIP-op-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="vIP-instance_attributes">
						<nvpair id="vIP-instance_attributes-ip" name="ip" value="10.0.0.71"/>
					</instance_attributes>
				</primitive>
<!-- DIESEN BEREICH HINZUFUEGEN (START) -->
				<primitive class="ocf" id="vIP2" provider="heartbeat" type="IPaddr2">
					<operations id="vIP2-operations">
						<op id="vIP2-op-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="vIP2-instance_attributes">
						<nvpair id="vIP2-instance_attributes-ip" name="ip" value="10.0.0.72"/>
					</instance_attributes>
				</primitive>
<!-- DIESEN BEREICH HINZUFUEGEN (ENDE) -->
				<!-- Konfiguration fuer Apache Webserver 2 -->				
				<primitive class="ocf" id="apache" provider="heartbeat" type="apache">
					<operations id="apache-operations">
						<op id="apache-op-monitor-10" interval="10" name="monitor" timeout="20s"/>
					</operations>
					<instance_attributes id="apache-instance_attributes">
						<nvpair id="apache-instance_attributes-configfile" name="configfile" value="/etc/apache2/httpd.conf"/>
						<nvpair id="apache-instance_attributes-httpd" name="httpd" value="/usr/sbin/httpd2-prefork"/>
						<nvpair id="apache-instance_attributes-statusurl" name="statusurl" value="http://localhost"/>
					</instance_attributes>
				</primitive>
			</group>
		</resources>
 
		<!-- Gibt an, auf welchem Node welche Resource mit welchem Score starten soll -->
		<constraints>
			<rsc_location node="sabnode3" rsc="ApacheVIPGrp" id="vIPapacheResLoc" score="INFINITY"/>
		</constraints>
 
		<op_defaults>
			<meta_attributes id="op_defaults-options">
				<nvpair id="op_defaults-options-record-pending" name="record-pending" value="false"/>
			</meta_attributes>
		</op_defaults>
	</configuration>
</cib>


Um eine Ressource außerhalb einer Gruppe


Quorum Konfiguration

Quorum Tool

VERWENDUNG
corosync-quorumtool [-s] [-l] [-v votes] [-n nodeid] [-e expected] [-h] [-i]
  
BESCHREIBUNG
Display the current state of quorum in the cluster and set vote quorum options.  

OPTIONEN
-s
show quorum status
-l
list nodes
-v <votes>
change the number of votes for a node *
-n <nodeid>
optional nodeid of node for -v
-e <expected>
change expected votes for the cluster *
-h
show nodeids in hexadecimal rather than decimal
-i
show node IP addresses instead of the resolved name
-h (if no other argument)
show this help text
* Starred items only work if votequorum is the quorum provider for corosync  

Nodes hinzufügen


Listing - Pfade, Dateien und Befehle

Pfade

/usr/share/pacemaker/


Dateien

/var/lib/heartbeat/crm/cib.xml


Befehle

cibadmin -E --force
crm configure show
crm_verify -L
crm resource start testIP                                # Ressource starten
crm resource stop testIP                                 # Ressource anhalten
crm_mon -i 2
crm configure property no-quorum-policy=ignore
crm configure property stonith-enabled=false             # deaktiviert stonith
crm configure primitive testIP ocf:heartbeat:IPaddr2 \   # Ressource anlegen
crm configure rsc_defaults resource-stickiness=100       # Gewichtung
mv /etc/sysconfig/pacemaker /etc/sysconfig/pacemaker.old # pacemaker Konfigurationsdatei
vi /etc/corosync/corosync.conf                           # Corosync Konfigurationsdatei
cibadmin -E --force                                      # Komplette Konfig löschen         ????
rpm -qa |grep corosync                                   # installierte Pakete anzeigen
corosync-quorumtool -n -771751926
crm_resource -D -r <Resource> -t primitive               # Löscht Resource
crm resource cleanup                                     # Cleanup
crm_resource --resource myResource --locate              # Display the current location of 'myResource':
crm resource migrate <Resource> <Node>                   # Resource manuell auf anderen Node umziehen
/var/lib/heartbeat/crm/cib.xml


rcopenais start
mkdir /var/log/apache2

linux/pacemaker.txt · Zuletzt geändert: 2015/07/06 22:32 (Externe Bearbeitung)