Thanks for the reply Dejan. I've added code for the status action but
still no luck. So my script is now:
###################################################################################################
usage() {
echo "usage: $0 start|stop"
exit 1
}
associate() {
CURRENT_IP=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4
`
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -d
'\n'`
if [ "$CURRENT_IP" != "$ELASTIC_IP" ]; then
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id
`
ec2-associate-address -i $INSTANCE_ID $ELASTIC_IP > /dev/null
2>&1 & #re-associate the elastic ip with THIS instance
exit 0
else #do nothing and exit, as associating twice causes problems!
exit 0
fi
}
disassociate() {
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -d
'\n'`
ec2-disassociate-address $ELASTIC_IP > /dev/null 2>&1 &
sleep 3 #put a small delay in to make sure that this IP will
definitely be disassociated by the time '$0 start' runs
exit 0
}
get_status() {
CURRENT_IP=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4
`
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -d
'\n'`
if [ "$CURRENT_IP" = "$ELASTIC_IP" ]; then
echo "Elastic IP Running OK"
exit 0
else
echo "Elastic IP is stopped."
exit 0
fi
}
if [ $# != 1 ]; then
usage
fi
case "$1" in
"start" ) associate;;
"stop" ) disassociate;;
"status" ) get_status;;
* ) usage;;
esac
####################################################################################################
here is a section of the heartbeat log:
heartbeat[23277]: 2008/12/02_03:24:47 info: Comm_now_up(): updating
status to active
heartbeat[23277]: 2008/12/02_03:24:47 info: Local status now set to:
'active'
heartbeat[23277]: 2008/12/02_03:24:47 WARN: No STONITH device
configured.
heartbeat[23277]: 2008/12/02_03:24:47 WARN: Shared disks are not
protected.
heartbeat[23277]: 2008/12/02_03:24:47 info: Resources being acquired
from lbslave.
harc[23286]: 2008/12/02_03:24:47 info: Running /etc/ha.d/rc.d/status
status
mach_down[23315]: 2008/12/02_03:24:47 info: /usr/share/heartbeat/
mach_down: nice_failback: foreign resources acquired
mach_down[23315]: 2008/12/02_03:24:47 info: mach_down takeover
complete for node lbslave.
heartbeat[23277]: 2008/12/02_03:24:47 info: mach_down takeover complete.
heartbeat[23277]: 2008/12/02_03:24:47 info: Initial resource
acquisition complete (mach_down)
heartbeat[23287]: 2008/12/02_03:24:47 info: Local Resource acquisition
completed.
harc[23377]: 2008/12/02_03:24:47 info: Running /etc/ha.d/rc.d/ip-
request-resp ip-request-resp
ip-request-resp[23377]: 2008/12/02_03:24:47 received ip-request-resp
elastic OK yes
ResourceManager[23398]: 2008/12/02_03:24:47 info: Acquiring resource
group: lbmaster elastic
ResourceManager[23398]: 2008/12/02_03:24:47 info: Running /etc/ha.d/
resource.d/elastic start
heartbeat[23277]: 2008/12/02_03:24:57 info: Local Resource acquisition
completed. (none)
heartbeat[23277]: 2008/12/02_03:24:57 info: local resource transition
completed.
As before, If I run '/etc/ha.d/resource.d/elastic start' manually,
then the script works as expected. My haresources is simply:
master elastic
where master is the local hostname.
--
Regards
James Little
Loadbalancer.org Limited
+44 (0)870 443 8779
www.loadbalancer.org
On 1 Dec 2008, at 21:19, Dejan Muhamedagic wrote:
Hi,
On Mon, Dec 01, 2008 at 01:47:56PM +0800, James Little wrote:
Hi all,
I'm currently working with heartbeat in the Amazon cloud and (for
those
that are familiar with Amazon EC2), I'm trying to use heartbeat to
re-allocate an elastic IP on detection of node failure. I'm not
experienced
with writing my own heartbeat resource scripts, but this is what I
have:
usage() {
echo "usage: $0 start|stop"
exit 1
}
associate() {
CURRENT_IP=`curl -s
http://169.254.169.254/latest/meta-data/public-ipv4`
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -
d '\n'`
if [ "$CURRENT_IP" != "$ELASTIC_IP" ]; then
INSTANCE_ID=`curl -s
http://169.254.169.254/latest/meta-data/instance-id`
ec2-associate-address -i $INSTANCE_ID $ELASTIC_IP > /dev/
null 2>&1
& #re-associate the elastic ip with THIS instance
exit 0
else #do nothing and exit, as associating twice causes problems!
exit 0
fi
}
disassociate() {
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -
d '\n'`
ec2-disassociate-address $ELASTIC_IP > /dev/null 2>&1 &
sleep 3 #put a small delay in to make sure that this IP will
definitely
be disassociated by the time '$0 start' runs
exit 0
}
if [ $# != 1 ]; then
usage
fi
case "$1" in
"start" ) associate;;
"stop" ) disassociate;;
* ) usage;;
esac
The RA must support the status action. You already have code for
it in the start action. See:
http://www.linux-ha.org/HeartbeatResourceAgent
Thanks,
Dejan
and I've simply put this script in /etc/ha.d/resource.d. The script
definitely runs (via heartbeat) and I have put some debug stuff in to
confirm this (piping output to files etc.) but for some reason the
ec2-associate-address and ec2-disassociate-address commands have no
effect,
but when tested manually these commands work ok. In fact this whole
script,
when ran manually, behaves as expected. The heartbeat log indicates
that
the script has ran.
I'm running heartbeat v2.1.3, but have not enabled CRM. I did think
it may
be a timeout because the ec2 commands take a few seconds to run,
but I
tested a trivial resource script that did 'sleep 10; echo 'stuff' >
test-file' and that ran without problems, despite the 10 second
sleep.
Any help greatly appreciated; thanks in advance...
--
Regards
James Little
Loadbalancer.org Limited
+44 (0)870 443 8779
www.loadbalancer.org
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems