for 3nodes - t-matsuo/resource-agents GitHub Wiki

Resource agent for postgresql 3nodes

Sample configuration

property \
    no-quorum-policy="ignore" \
    stonith-enabled="false" \
    crmd-transition-delay="2s"

rsc_defaults \
    resource-stickiness="INFINITY" \
    migration-threshold="1"

ms msPostgresql postgresql \
    meta \
        master-max="1" \
        master-node-max="1" \
        clone-max="3" \
        clone-node-max="1" \
        notify="true"

group master-group \
      vip-master \
      vip-rep

clone clnPingCheck pingCheck

primitive vip-master ocf:heartbeat:IPaddr2 \
    params \
        ip="192.168.0.201" \
        nic="eth0" \
        cidr_netmask="24" \
    op start   timeout="60s" interval="0s"  on-fail="restart" \
    op monitor timeout="60s" interval="10s" on-fail="restart" \
    op stop    timeout="60s" interval="0s"  on-fail="block"

primitive vip-rep ocf:heartbeat:IPaddr2 \
    params \
        ip="192.168.3.200" \
        nic="eth3" \
        cidr_netmask="24" \
    meta \
        resource-stickiness="1" \
    op start   timeout="60s" interval="0s"  on-fail="restart" \
    op monitor timeout="60s" interval="10s" on-fail="restart" \
    op stop    timeout="60s" interval="0s"  on-fail="block"

primitive vip-slave1 ocf:heartbeat:IPaddr2 \
    params \
        ip="192.168.0.202" \
        nic="eth0" \
        cidr_netmask="24" \
    meta \
        resource-stickiness="1" \
    op start   timeout="60s" interval="0s"  on-fail="restart" \
    op monitor timeout="60s" interval="10s" on-fail="restart" \
    op stop    timeout="60s" interval="0s"  on-fail="block"

primitive vip-slave2 ocf:heartbeat:IPaddr2 \
    params \
        ip="192.168.0.203" \
        nic="eth0" \
        cidr_netmask="24" \
    meta \
        resource-stickiness="1" \
    op start   timeout="60s" interval="0s"  on-fail="restart" \
    op monitor timeout="60s" interval="10s" on-fail="restart" \
    op stop    timeout="60s" interval="0s"  on-fail="block"

primitive postgresql ocf:heartbeat:pgsql \
    params \
        pgctl="/usr/local/pgsql/bin/pg_ctl" \
        psql="/usr/local/pgsql/bin/psql" \
        pgdata="/var/lib/pgsql/9.1/data" \
        start_opt="-p 5432" \
        rep_mode="sync" \
        node_list="02-sl6 03-sl6 04-sl6" \
        primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \
        master_ip="192.168.3.200" \
        restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" \
        stop_escalate="0" \
        restart_on_promote="true" \
    op start   timeout="60s" interval="0s"  on-fail="restart" \
    op monitor timeout="60s" interval="7s"  on-fail="restart" \
    op monitor timeout="60s" interval="2s"  on-fail="restart" role="Master" \
    op promote timeout="60s" interval="0s"  on-fail="restart" \
    op demote  timeout="60s" interval="0s"  on-fail="stop" \
    op stop    timeout="60s" interval="0s"  on-fail="block" \
    op notify  timeout="60s"

primitive pingCheck ocf:pacemaker:pingd \
    params \
        name="default_ping_set" \
        host_list="192.168.0.100" \
        multiplier="100" \
        dampen="0" \
    op start   timeout="60s" interval="0s"  on-fail="restart" \
    op monitor timeout="60s" interval="10s" on-fail="restart" \
    op stop    timeout="60s" interval="0s"  on-fail="ignore"

location rsc_location-1 msPostgresql \
    rule role=master 300: #uname eq 02-sl6 \
    rule role=master 200: #uname eq 03-sl6 \
    rule role=master 100: #uname eq 04-sl6 \
    rule -inf: not_defined default_ping_set or default_ping_set lt 100

location rsc_location-2 vip-slave1 \
    rule  200: pgsql-status eq "HS:sync" \
    rule  100: pgsql-status eq "PRI" \
    rule  -inf: not_defined pgsql-status \
    rule  -inf: pgsql-status ne "HS:sync" and pgsql-status ne "PRI"

location rsc_location-3 vip-slave2 \
    rule  300: pgsql-status eq "HS:potential" \
    rule  200: pgsql-status eq "HS:sync" \
    rule  100: pgsql-status eq "PRI" \
    rule  -inf: not_defined pgsql-status \
    rule  -inf: pgsql-status ne "HS:sync" and pgsql-status ne "HS:potential" and pgsql-status ne "PRI"

colocation rsc_colocation-1 inf: msPostgresql        clnPingCheck
colocation rsc_colocation-2 inf: master-group        msPostgresql:Master

order rsc_order-1 0: clnPingCheck          msPostgresql
order rsc_order-2 0: msPostgresql:promote  master-group:start   symmetrical=false
order rsc_order-3 0: msPostgresql:demote   master-group:stop    symmetrical=false

crm_mon -Af

============
Last updated: Sat Mar  2 16:48:17 2013
Stack: Heartbeat
Current DC: 04-sl6 (44444444-4444-4444-4444-444444444444) - partition with quorum
Version: 1.0.13-30bb726
3 Nodes configured, unknown expected votes
5 Resources configured.
============

Online: [ 02-sl6 03-sl6 04-sl6 ]

 Resource Group: master-group
     vip-master	(ocf::heartbeat:IPaddr2):	Started 02-sl6
     vip-rep	(ocf::heartbeat:IPaddr2):	Started 02-sl6
 Master/Slave Set: msPostgresql
     Masters: [ 02-sl6 ]
     Slaves: [ 03-sl6 04-sl6 ]
 Clone Set: clnPingCheck
     Started: [ 02-sl6 03-sl6 04-sl6 ]

Node Attributes:
* Node 02-sl6:
    + default_ping_set                	: 100       
    + master-postgresql:0             	: 1000      
    + postgresql-data-status          	: LATEST    
    + postgresql-master-baseline      	: 00000000A3000E30
    + postgresql-status               	: PRI       
* Node 03-sl6:
    + default_ping_set                	: 100       
    + master-postgresql:2             	: 100       
    + postgresql-data-status          	: STREAMING|SYNC
    + postgresql-status               	: HS:sync   
* Node 04-sl6:
    + default_ping_set                	: 100       
    + master-postgresql:1             	: -INFINITY 
    + postgresql-data-status          	: STREAMING|POTENTIAL
    + postgresql-status               	: HS:potential

Migration summary:
* Node 02-sl6: 
* Node 03-sl6: 
* Node 04-sl6: