0% found this document useful (0 votes)
132 views30 pages

How To Create A High Availability Setup With Corosync Pacemaker and Reserved Ips On Ubuntu 14 04

Uploaded by

Aymen
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
132 views30 pages

How To Create A High Availability Setup With Corosync Pacemaker and Reserved Ips On Ubuntu 14 04

Uploaded by

Aymen
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

#!

/bin/bash

apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/add
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html

index.html
http:// your_reserved_ip

example.com
$ sudo dpkg-reconfigure tzdata

America/New_York

$ sudo apt-get update

ntp

$ sudo apt-get -y install ntp

5404 5406

iptables eth1

$ sudo iptables -A INPUT -i eth1 -p udp -m multiport --dports 5404,5405,5406 -m conntrack


$ sudo iptables -A OUTPUT -o eth1 -p udp -m multiport --sports 5404,5405,5406 -m conntrack
$ sudo apt-get install pacemaker

haveged

primary$ sudo apt-get install haveged

corosync-keygen

corosync-keygen

primary$ sudo corosync-keygen

/etc/corosync
/authkey

haveged

primary$ sudo apt-get remove --purge haveged


primary$ sudo apt-get clean

authkey

primary$ sudo scp /etc/corosync/authkey username @ secondary_ip :/tmp


authkey

secondary$ sudo mv /tmp/authkey /etc/corosync


secondary$ sudo chown root: /etc/corosync/authkey
secondary$ sudo chmod 400 /etc/corosync/authkey

/etc/corosync
/authkey

corosync.conf
vi

$ sudo vi /etc/corosync/corosync.conf

bindnetaddr

bindnetaddr

corosync.conf

1 totem {
2 version: 2
3 cluster_name: lbcluster
4 transport: udpu
5 interface {
6 ringnumber: 0
7 bindnetaddr: server_private_IP_address
8 broadcast: yes
9 mcastport: 5405
10 }
11 }
12
13 quorum {
14 provider: corosync_votequorum
15 two_node: 1
16 }
17
18 nodelist {
19 node {
20 ring0_addr: primary_private_IP_address
21 name: primary
22 nodeid: 1
23 }
24 node {
25 ring0_addr: secondary_private_IP_address
26 name: secondary
27 nodeid: 2
28 }
29 }
30
31 logging {
32 to_logfile: yes
33 logfile: /var/log/corosync/corosync.log
34 to_syslog: yes
35 timestamp: on
36 }

transport: udpu
bindnetaddr

two_node: 1

/var/log/corosync/corosync.log

pcmk
vi

$ sudo vi /etc/corosync/service.d/pcmk

service {
name: pacemaker
ver: 1
}

/etc/default/corosync

$ sudo vi /etc/default/corosync

START yes

START= yes

$ sudo service corosync start

$ sudo corosync-cmapctl | grep members

corosync-cmapctl output:
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip( primary_private_IP_address )
runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.1.status (str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip( secondary_private_IP_address
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.2.status (str) = joined

$ sudo update-rc.d pacemaker defaults 20 01

20
19

$ sudo service pacemaker start

crm

crm

$ sudo crm status

crm status:
Last updated: Fri Oct 16 14:38:36 2015
Last change: Fri Oct 16 14:36:01 2015 via crmd on primary
Stack: corosync
Current DC: primary (1) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
0 Resources configured

Online: [ primary secondary ]

primary (1) secondary (2)

$ sudo crm_mon

crm status
Ctrl-C

crm

$ sudo crm configure property stonith-enabled=false

$ sudo crm configure property no-quorum-policy=ignore

$ sudo crm configure show


assign-ip

FloatIP

FloatIP

assign-ip

$ sudo curl -L -o /usr/local/bin/assign-ip http://do.co/assign-ip

$ sudo chmod +x /usr/local/bin/assign-ip

assign-ip
DO_TOKEN

DO_TOKEN= your_digitalocean_pat /usr/local/bin/assign-ip your_reserved_ip


droplet_id
FloatIP

digitalocean

$ sudo mkdir /usr/lib/ocf/resource.d/digitalocean

$ sudo curl -o /usr/lib/ocf/resource.d/digitalocean/floatip https://gist.githubusercontent.

$ sudo chmod +x /usr/lib/ocf/resource.d/digitalocean/floatip

start

status monitor
FloatIP

FloatIP

FloatIP

$ sudo crm configure primitive FloatIP ocf:digitalocean:floatip \


$ params do_token= your_digitalocean_personal_access_token \
$ reserved_ip= your_reserved_ip

ocf:digitalocean:floatip do_token reserved_ip

sudo crm status sudo crm_mon


FloatIP

crm_mon:
...
2 Nodes configured
1 Resource configured

Online: [ primary secondary ]

FloatIP (ocf::digitalocean:floatip): Started primary

FloatIP standby

FloatIP
Reserved IP is pointing to primary server:
Droplet: primary , IP Address: primary_ip_address

curl

$ while true; do curl reserved_IP_address ; sleep 1; done

standby

$ sudo reboot

curl

curl loop output:


Droplet: primary , IP Address: primary_IP_address
...
curl: (7) Failed to connect to reserved_IP_address port 80: Connection refused
Droplet: secondary , IP Address: secondary_IP_address
...

Connection refused

FloatIP

OFFLINE Online

crm_mon

$ sudo crm_mon

$ sudo crm configure show

crm

$ sudo tail -f /var/log/corosync/corosync.log


standby

$ sudo crm node standby NodeName

standby online

$ sudo crm node online NodeName

sudo crm configure edit ResourceName

$ sudo crm resource stop ResourceName


$ sudo crm configure delete ResourceName

crm crm

$ crm

crm
crm

$ sudo crm configure primitive Nginx ocf:heartbeat:nginx \


$ params httpd="/usr/sbin/nginx" \
$ op start timeout="40s" interval="0" \
$ op monitor timeout="30s" interval="10s" on-fail="restart" \
$ op stop timeout="60s" interval="0"

sudo crm_mon sudo crm status

crm_mon:
...
Online: [ primary secondary ]

FloatIP (ocf::digitalocean:floatip): Started primary


Nginx (ocf::heartbeat:nginx): Started secondary

Nginx FloatIP

Nginx

$ sudo crm configure clone Nginx-clone Nginx

crm_mon:
Online: [ primary secondary ]

FloatIP (ocf::digitalocean:floatip): Started primary


Clone Set: Nginx-clone [Nginx]
Started: [ primary secondary ]

Nginx-clone

FloatIP
Nginx-clone
$ sudo crm configure colocation FloatIP-Nginx inf: FloatIP Nginx-clone

crm status

$ sudo crm configure show

FloatIP
sudo crm status

Cluster Summary:
* Stack: corosync
* Current DC: ip-<private ip of primary server> (version 2.1.2-ada5c3b36e2) - partitio
* Last updated: Wed Jul 20 10:56:41 2022
* Last change: Wed Jul 20 10:40:16 2022 by hacluster via crmd on ip-<private ip of pr
* 1 node configured
* 0 resource instances configured

Node List:
* Online: [ ip-<private ip of primary server> ]

Full List of Resources:


* No resources
crm status

Stack: corosync
Current DC: secondary (version 1.1.14-70404b0) - partition with quorum
2 nodes and 1 resource configured

Online: [ primary secondary ]

Full list of resources:

FloatIP (ocf::digitalocean:floatip): Started primary

while
true; do curl my.floating.ipaddress; sleep 1; done

crm status

Stack: corosync
Current DC: secondary (version 1.1.14-70404b0) - partition with quorum
2 nodes and 1 resource configured

Online: [ primary secondary ]

Full list of resources:

FloatIP (ocf::digitalocean:floatip): Started secondary

crm configure show


node 1: primary
node 2: secondary
primitive FloatIP ocf:digitalocean:floatip \
params do_token=my_access_token floating_ip=my.floating.ipaddress
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=1.1.14-70404b0 \
cluster-infrastructure=corosync \
cluster-name=lbcluster \
stonith-enabled=false \
no-quorum-policy=ignore

You might also like