Hi,

On Tue, Dec 02, 2008 at 04:33:21PM +0800, James Little wrote:
> 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

You should check the exit status or the status to make sure that
the resource has really been started. Or do you expect this never
to fail ;-)

>     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

The same here: Check if the resource has been stopped.

> }
>
> 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

It looks like it is started. Perhaps try again from scratch.
Add some debugging in the script to verify that heartbeat really
invokes the start action.

Thanks,

Dejan

> 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
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to