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