Pacemaker

From VVCWiki
Jump to navigationJump to search

Pacemaker repository

Cluster

c20 node ip 10.10.10.20
crossover 10.0.0.1
c21 node ip 10.10.10.21
crossover 10.0.0.2
cl1 virt ip 10.10.10.22
/u00 FS /dev/drbd/by-res/u00
cl2 virt ip 10.10.10.23
/u01 FS /dev/drbd/by-res/u01

Cluster stack

You can use either Heartbeat or Corosync, make sure only one is enabled during startup

I suggest to change default priorities for the corosync service

sed -i -e 's/.*chkconfig:.*/# chkconfig: 345 99 00/' /etc/rc.d/init.d/corosync
chkconfig corosync resetpriorities

Heartbeat

  • /etc/ha.d/ha.cf
# Logging
debug				1
use_logd			false
logfacility			daemon
 
# Misc Options
traditional_compression 	off
compression			bz2
coredumps			true
 
# Communications
udpport				694
bcast				eth1 eth0
node				c20
node				c21
   
# Thresholds (in seconds)
keepalive			1
warntime			6
deadtime			10
initdead			30

pacemaker                     respawn
  • /etc/ha.d/authkeys
auth 1
1 sha1 SecretCode
  • fix permissions
chmod 400 /etc/ha.d/authkeys
  • populate heartbeat configuration to c21
[root@c21 ~]# rsync -av c20:/etc/ha.d/ /etc/ha.d/
  • start heartbeat daemon on both nodes
service heartbeat start

Corosync

  • generate secure key
corosync-keygen
  • create config file /etc/corosync/corosync.conf on c20

When you have multiple interfaces, separate port numbers by 2, corosync uses port N and N-1

compatibility: none

aisexec {
        user:   root
        group:  root
}

service {
        name: pacemaker
        clustername: chepkov
        ver:  0
}

totem {
	version: 2
	token: 5000
	token_retransmits_before_loss_const: 20
	join: 1000
	consensus: 11000
	vsftype: none
	max_messages: 20
	secauth: on
	threads: 0
	clear_node_high_bit: yes
	rrp_mode: passive
	interface {
		ringnumber: 0
		broadcast: yes
		bindnetaddr: 10.0.0.0
		mcastport: 5405
	}
	interface {
		ringnumber: 1
		broadcast: yes
		bindnetaddr: 10.10.10.0
		mcastport: 5407
	}
}

logging {
	fileline: off
	to_stderr: no
	to_syslog: yes
	debug: off
	timestamp: on
}

amf {
	mode: disabled
}

  • populate corosync configuration to c21
[root@c21 ~]# rsync -av c20:/etc/corosync/ /etc/corosync/
  • start corosync daemon on both nodes
service corosync start

Pacemaker config

Set default cluster options

[root@c20 ~]# crm configure
property no-quorum-policy=ignore
property stonith-enabled=false
property default-resource-stickiness=1000
property dc-deadtime=2min
property default-action-timeout=120s
property shutdown-escalation=5min
property cluster-recheck-interval=10min
property start-failure-is-fatal=false
property pe-error-series-max=1000
property pe-input-series-max=1000
property pe-warn-series-max=1000
rsc_defaults failure-timeout=10min
commit
bye

Configure drbd resources

[root@c20 ~]# crm configure
primitive drbd_u00 ocf:linbit:drbd params drbd_resource="u00" \
	op start timeout="240" \
        op monitor interval="59s" role="Master" timeout="30s" \
	op monitor interval="60s" role="Slave" timeout="30s"
primitive drbd_u01 ocf:linbit:drbd params drbd_resource="u01" \
	op start timeout="240" \
        op monitor interval="59s" role="Master" timeout="30s" \
	op monitor interval="60s" role="Slave" timeout="30s"
ms ms_drbd_u00 drbd_u00 \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
ms ms_drbd_u01 drbd_u01 \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
commit
bye

Configure filesystems

[root@c20 ~]# crm configure
primitive fs_u00 ocf:heartbeat:Filesystem \
        params device="/dev/drbd/by-res/u00" directory="/u00" fstype="ext3" options="noatime"
primitive fs_u01 ocf:heartbeat:Filesystem \
        params device="/dev/drbd/by-res/u01" directory="/u01" fstype="ext3" options="noatime"
colocation col_u00 inf: fs_u00 ms_drbd_u00:Master
colocation col_u01 inf: fs_u01 ms_drbd_u01:Master
order fs_after_drbd_u00 inf: ms_drbd_u00:promote fs_u00:start
order fs_after_drbd_u01 inf: ms_drbd_u01:promote fs_u01:start
commit
bye

Configure IP

[root@c20 ~]# crm configure
primitive ip_rg0 ocf:heartbeat:IPaddr2 params nic="eth0" ip="10.10.10.22" cidr_netmask="32"
primitive ip_rg1 ocf:heartbeat:IPaddr2 params nic="eth0" ip="10.10.10.23" cidr_netmask="32"
commit
bye

Configure apache

[root@c20 ~]# crm configure
primitive apache_rg0 ocf:heartbeat:apache \
	params configfile="/u00/apache/conf/httpd.conf" \
        statusurl="http://cl1.chepkov.lan/server-status" \
        op monitor interval="2min" \
	meta target-role="stopped"
primitive apache_rg1 ocf:heartbeat:apache \
	params configfile="/u01/apache/conf/httpd.conf" \
        statusurl="http://cl2.chepkov.lan/server-status" \
        op monitor interval="2min" \
	meta target-role="stopped"
commit
bye

Create groups of resources and their preferred location

[root@c20 ~]# crm configure
group rg0 fs_u00 ip_rg0 apache_rg0
group rg1 fs_u01 ip_rg1 apache_rg1
location rg0_on_c20 rg0 100: c20.chepkov.lan
location rg1_on_c21 rg1 100: c21.chepkov.lan
commit
bye

Start apache

crm resource start apache_rg0
crm resource start apache_rg1

Define ping constraints

We don't want to run any service if default router is unreachable.

# crm configure
primitive ping ocf:pacemaker:ping \
  params name="pingd" host_list="10.10.10.250" multiplier="200" timeout="5" \
  op monitor interval="10"

clone connected ping \
        meta globally-unique="false"

location rg0-connected rg0 \
 rule -inf: not_defined pingd or pingd lte 0

location rg1-connected rg1 \
 rule -inf: not_defined pingd or pingd lte 0

commit
bye

Pacemaker management

  • Stop all resources
crm configure property stop-all-resources=true
  • increase number of lrmd children
 /usr/sbin/lrmadmin -p max-children 10