[Pacemaker] Required resources for stateful clones
Eamon Roque
Eamon.Roque at lex-com.net
Fri May 20 13:09:37 UTC 2011
>
> On Fri, May 20, 2011 at 3:42 AM, Eamon Roque
<Eamon.Roque at lex-com.net>wrote:
>
> > Hi,
> >
> >
> > >> On Thu, May 19, 2011 at 5:05 AM, Eamon Roque
<Eamon.Roque at lex-com.net
> > >wrote:
> >
> > >> Hi,
> > >>
> > >> I've put together a cluster of two nodes running a databank without
> > shared
> > >> storage. Both nodes replicate data between them, which is taken
care of
> > by
> > >> the databank itself.
> > >>
> > >> I have a resource for the databank and ip. I then created a
stateful
> > clone
> > >> from the databank resource. I created colocation rules joining the
> > >> databank-ms-clone and ip:
> > >>
> > >> node pgsqltest1
> > >> node pgsqltest2
> > >> primitive Postgres-IP ocf:heartbeat:IPaddr2 \
> > >> params ip="10.19.57.234" cidr_netmask="32" \
> > >> op monitor interval="30s" \
> > >> meta is-managed="false"
> > >> primitive resPostgres ocf:heartbeat:pgsql \
> > >> params pgctl="/opt/PostgreSQL/9.0/bin/pg_ctl"
> > >>pgdata="/opt/PostgreSQL/9.0/data"
psql="/opt/PostgreSQL/9.0/bin/psql"
> > >> pgdba="postgres" \
> > >> op monitor interval="1min" \
> > >> meta is-managed="false"
> > >> ms msPostgres resPostgres \
> > >> meta master-max="1" master-node-max="1" clone-max="2"
> > >> clone-node-max="1" notify="true" target-role="started"
> > >> colocation colPostgres inf: Postgres-IP msPostgres:Master
> > >> order ordPostgres inf: msPostgres:promote Postgres-IP:start
> > >> 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" \
> > >> last-lrm-refresh="1302707146"
> > >> rsc_defaults $id="rsc-options" \
> > >> resource-stickiness="200"
> > >> op_defaults $id="op_defaults-options" \
> > >> record-pending="false"
> > >>
> > >> The normal postgres agent doesn't support this functionality, but
I've
> > put
> > >> together my own using the mysql agent as a model. Before running
the
> > script
> > >> through ocf-tester, I unmanage the postgres resource.
> > >>
> >
> > > Could you show how you implemented promote/demote for pgsql?
> >
> > Sure, let's start with the ultra-simple "promote" function:
> >
> > #
> > # These variables are higher up in the file, but they will probably
help
> > with understanding the error of
> > # my ways.
> >
> > CRM_MASTER="${HA_SBIN_DIR}/crm_master"
> > ATTRD_UPDATER="${HA_SBIN_DIR}/attrd_updater"
> >
> > pgsql_promote() {
> > local output
> > local rc
> > local CHECK_PG_SQL
> > local COMPLETE_STANDBY_QUERY
> > local PROMOTE_SCORE_HIGH
> > local MOD_PSQL_M_FORMAT
> >
> >
> > PROMOTE_SCORE_HIGH=1000
> > CHECK_PG_SQL="SELECT pg_is_in_recovery()"
> > MOD_PSQL_M_FORMAT="$OCF_RESKEY_psql -Atc"
> > COMPLETE_STANDBY_QUERY="$MOD_PSQL_M_FORMAT \"$CHECK_PG_SQL\""
> >
> > output=$(su - $OCF_RESKEY_pgdba -c "$COMPLETE_STANDBY_QUERY"
2>&1)
> > echo $output
> >
> > rc=$?
> >
> > case $output in
> > f)
> > ocf_log debug "PostgreSQL Node is running in
Master
> > mode..."
> > return $OCF_RUNNING_MASTER
> > ;;
> >
> > t)
> > ocf_log debug "PostgreSQL Node is in
Hot_Standby
> > mode..."
> > return $OCF_SUCCESS
> > ;;
> >
> > *)
> > ocf_log err "Critical error in $CHECK_PG_SQL:
> > $output"
> > return $OCF_ERR_GENERIC
> > ;;
> > esac
> >
> > #
> > # "Real" promotion is handled here.
> > # The trigger file is created and we check for "recovery.conf" on the
host.
> > # If we can't find it, then the file will be copied from the HA-Config
into
> > postgres' data folder.
> > #
> >
> > if ! touch $OCF_RESKEY_trigger_file; then
> > ocf_log err "$OCF_RESKEY_trigger_file could not be created!"
> > return $OCF_ERR_GENERIC
> > fi
> >
> > if [ ! -f $OCF_RESKEY_recovery_conf ]; then
> > ocf_log err "$OCF_RESKEY_recovery_conf doesn't exist!"
> > cp $OCF_RESKEY_recovery_conf_ersatz $OCF_RESKEY_pgdata
> > return $OCF_SUCCESS
> > fi
>
>
> Why do you need this? As far as I know when you switch standby database
to
> primary using trigger file recovery.conf gets renamed to recovery.done.
If
> you rename it back DB will be put into standby mode after restart.We are
> talking about streaming replication, right?
>
>
Right. The order is wrong. According to the Binary Replication tutorial on
the postgres wiki, when I perform a failover with a trigger file, it wants
to find a "recovery.conf", which it then processes (checking the archive
for missing updates etc.) and renames (after noticing the trigger file).
I assumed that this would work in exactly the same way with Streaming
Replication.
Am I wrong?
> >
> >
> > # If both file exist or can be created, then the failover fun can
start.
> >
> > ocf_log info "$OCF_RESKEY_trigger_file was created."
> > ocf_log info "$OCF_RESKEY_recovery_conf exists and can be copied to
the
> > correct location."
> >
> > # Sometimes, the master needs a bit of time to take the reins. So...
> >
> > while :
> > do
> > pgsql_monitor warn
> > rc=$?
> >
> > if [ $rc -eq $OCF_RUNNING_MASTER ]; then
> > break;
> > fi
> >
> > ocf_log debug "Postgres Server could not be promoted. Please
> > wait..."
> >
> > sleep 1
> >
> > done
> >
> > ocf_log info "Postgres Server has been promoted. Please check on the
> > previous master."
> >
> > #################################
> > #Attributes Update: #
> > #################################
> >
> > $ATTRD_UPDATER -n $PGSQL_STATUS_NAME -v \"PRI\" || exit $(echo "Eh!
> > Attrd_updater is not working!")
> >
> > #############################################
> > # Resource stickiness pumped up to 1000 : #
> > #############################################
> >
> > $CRM_MASTER -v $PROMOTE_WERT_HOCH || exit $(echo "crm_master could not
> > change the Master's status!")
> >
> > ############
> > # Success! #
> > ############
> >
> > return $OCF_SUCCESS
> >
> > }
> >
> >
> >
>
######################################################################################################
> >
> > Thanks!
> >
> >
> And what about demote? Switching standby into primary using trigger
files
> changes TIMELINE in the DB and that invalidates all other standby
databases
> as well as previous master database. After that you have to restore them
> from a fresh backup made on new master. This particular behavior stopped
me
> from implementing Master/Slave functionality in pgsql RA so far.
>
> BTW, why pgsql is set to is-managed="false" in your configuration.With
this
> setting cluster will keep monitoring it but won't take any other actions
> AFAIK.
Demote? Well, seeing as neither promote nor demote actually worked for me,
I thought I would start small.
As far as the trigger file switching goes, you're of course completely
right. This behavior isn't really a big deal in my environment, as it's
meant as more of test and we want to bring back the demoted servers up
manually, but I can see that it would cause a lot of problems in a more
complex environment. When I tested the failover functionality without
pacemaker, I have to perform a fresh backup even if I waited less than 30s
to bring the old master back up as a standby.
I guess that with 9.1 this will be easier...
I unmanaged the resources so that my test agent would handle them. Is this
incorrect?
>
>
> ?amon
> >
> >
> >
> > >> Unfortunately, promote/demote doesn't work. ocf-tester tries to use
the
> > >> "crm_attribute -N pgsql1 -n master-pgrql-replication-agent -l
reboot -v
> > >> 100", but the (unmanaged) resources don't accept the score change.
> > >>
> > >> I'm pretty sure that I just need to be hit with a clue stick and
would
> > be
> > >> grateful for any help.
> > >>
> > >> Thanks,
> > >>
> > >> ?amon
> > >>
> >
> >
> >
> > --
> > Serge Dubrouski.
> > _______________________________________________
> > Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
> > http://oss.clusterlabs.org/mailman/listinfo/pacemaker
> >
> > Project Home: http://www.clusterlabs.org
> > Getting started:
http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> > Bugs:
> >
http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker
> >
> >
>
>
> --
> Serge Dubrouski.
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://oss.clusterlabs.org/pipermail/pacemaker/attachments/
> 20110520/e1f26230/attachment.html>
>
> ------------------------------
>
> _______________________________________________
> Pacemaker mailing list
> Pacemaker at oss.clusterlabs.org
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>
>
> End of Pacemaker Digest, Vol 42, Issue 53
> *****************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clusterlabs.org/pipermail/pacemaker/attachments/20110520/624616a8/attachment.htm>
More information about the Pacemaker
mailing list