[OpenSIPS-Users] Opensips Cluster

Giuseppe DeVivo Giuseppe.DeVivo at gruppomega.it
Tue Sep 28 10:54:28 CEST 2010


Hi, 
Please help me , I'm in big trouble

I must create a opensips  HA cluster,
I use debian and heartbeat with pacemaker,(I use this guide : http://anders.com/cms/259 ) but there is a problem , Opensips_status not function with sipsak.
I have modify a Opensips_status with another type of check( i see this mail list),

The switch from primary to secondary is ok and vice versa, but if the secondary lose connection, when the primary is up , the secondary cannot start opensips service, 

Note: Primary ---> cludeb1 --->10.100.100.146
         Secondary--->cludeb2---->10.100.100.147
         Virtual Ip --->10.100.100.151
         Gateway ----> 10.100.100.251

Thanks

below my cib.xml

<cib validate-with="pacemaker-1.0" crm_feature_set="3.0.1" have-quorum="1" admin_epoch="0" epoch="173" dc-uuid="3525d964-57a0-4355-ad19-14261c5071ba" num_updates="0" cib-last-written="Tue Sep 28 10:11:30 2010">
  <configuration>
    <crm_config>
      <cluster_property_set id="cib-bootstrap-options">
        <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b"/>
        <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="Heartbeat"/>
        <nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
        <nvpair id="cib-bootstrap-options-stonith-enable" name="stonith-enable" value="false"/>
        <nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
      </cluster_property_set>
    </crm_config>
    <nodes>
      <node id="14e57269-7187-42da-8a09-05923520586b" type="normal" uname="cludeb1"/>
      <node id="3525d964-57a0-4355-ad19-14261c5071ba" type="normal" uname="cludeb2"/>
    </nodes>
    <resources>
      <group id="cluster">
        <primitive class="ocf" id="cluster-ip" provider="heartbeat" type="IPaddr2">
          <instance_attributes id="cluster-ip-instance_attributes">
            <nvpair id="cluster-ip-instance_attributes-ip" name="ip" value="10.100.100.151"/>
            <nvpair id="cluster-ip-instance_attributes-nic" name="nic" value="eth0"/>
          </instance_attributes>
          <operations>
            <op id="cluster-ip-monitor-10s" interval="10s" name="monitor" timeout="20s"/>
            <op id="cluster-ip-start-0" interval="0" name="start" timeout="20s"/>
            <op id="cluster-ip-stop-0" interval="0" name="stop" timeout="20s"/>
          </operations>
        </primitive>
        <primitive class="ocf" id="opensips" provider="opensips" type="opensips">
          <operations>
            <op id="opensips-start-0" interval="0" name="start" timeout="30s"/>
            <op id="opensips-stop-0" interval="0" name="stop" timeout="30s"/>
            <op id="opensips-monitor-10s" interval="10s" name="monitor" timeout="30s">
              <instance_attributes id="opensips-monitor-10s-instance_attributes">
                <nvpair id="opensips-monitor-10s-instance_attributes-ip" name="ip" value="127.0.0.1"/>
              </instance_attributes>
            </op>
          </operations>
          <meta_attributes id="opensips-meta_attributes">
            <nvpair id="opensips-meta_attributes-target-role" name="target-role" value="Started"/>
          </meta_attributes>
        </primitive>
      </group>
      <clone id="ping_clone">
        <meta_attributes id="ping_clone-meta_attributes">
          <nvpair id="ping_clone-meta_attributes-globally-unique" name="globally-unique" value="false"/>
        </meta_attributes>
        <primitive class="ocf" id="ping" provider="pacemaker" type="ping">
          <instance_attributes id="ping-instance_attributes">
            <nvpair id="ping-instance_attributes-host_list" name="host_list" value="10.100.100.251"/>
            <nvpair id="ping-instance_attributes-name" name="name" value="ping"/>
          </instance_attributes>
          <operations>
            <op id="ping-monitor-10s" interval="10s" name="monitor" timeout="60s"/>
            <op id="ping-start-0" interval="0" name="start" timeout="60s"/>
            <op id="ping-stop-0" interval="0" name="stop" timeout="60s"/>
          </operations>
        </primitive>
      </clone>
    </resources>
    <constraints>
      <rsc_location id="cluster_resource2" rsc="cluster">
        <rule id="cluster_resource2-rule" score="100">
          <expression attribute="#uname" id="cluster_resource2-expression" operation="eq" value="cludeb1"/>
        </rule>
      </rsc_location>
      <rsc_location id="cluster_resource" rsc="cluster">
        <rule id="cluster_resource-rule" score="50">
          <expression attribute="#uname" id="cluster_resource-expression" operation="eq" value="cludeb2"/>
        </rule>
      </rsc_location>
      <rsc_location id="cluster_on_connected_node" rsc="cluster">
        <rule boolean-op="or" id="cluster_on_connected_node-rule" score="-INFINITY">
          <expression attribute="ping" id="cluster_on_connected_node-expression" operation="not_defined"/>
          <expression attribute="ping" id="cluster_on_connected_node-expression-0" operation="lte" value="0"/>
        </rule>
      </rsc_location>
    </constraints>
    <rsc_defaults/>
    <op_defaults/>
  </configuration>



Opensips OCF File:

#!/bin/sh

# Initialization:

#. ${OCF_ROOT}/usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
. /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs

usage() {
cat <<-!
usage: $0 {start|stop|status|monitor|meta-data|validate-all}
!
}

meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="OpenSIPS">
<version>1.0</version>

<longdesc lang="en">
Resource Agent for the OpenSIPS SIP Proxy.
</longdesc>
<shortdesc lang="en">OpenSIPS resource agent</shortdesc>

<parameters>
<parameter name="ip" unique="0" required="1">
<longdesc lang="en">
IP Address of the OpenSIPS Instance. This is only used for monitoring.
</longdesc>
<shortdesc lang="en">IP Address</shortdesc>
<content type="string" default="" />
</parameter>

<parameter name="port" unique="0" required="1">
<longdesc lang="en">
Port of the OpenSIPS Instance. This is only used for monitoring.
</longdesc>
<shortdesc lang="en">Port</shortdesc>
<content type="string" default="5060" />
</parameter>
</parameters>

<actions>
<action name="start" timeout="30" />
<action name="stop" timeout="30" />
<action name="status" depth="0" timeout="30" interval="10" start-delay="30" />
<action name="monitor" depth="0" timeout="30" interval="10" start-delay="30" />
<action name="meta-data" timeout="5" />
<action name="validate-all" timeout="5" />
<action name="notify" timeout="5" />
<action name="promote" timeout="5" />
<action name="demote" timeout="5" />
</actions>
</resource-agent>
END
}

OpenSIPS_Status() {

#/etc/init.d/opensips status > /dev/null
#rc=$?
#if
#[ $rc -ne 0 ]
#then
#return $OCF_NOT_RUNNING
#else
#/etc/init.d/opensips reload
#return $OCF_SUCCESS
#fi

ipaddr2=10.100.100.151
 

if [ "$OCF_RESKEY_ip" = "$ipaddr2" ]; then
        check=(`netstat -tapn | grep opensips | cut -d" " -f16 | cut -d":" -f1 
| tr "\n" " "`)
         
        
        if [ ${check[0]} = $ipaddr2 -o ${check[1]} = $ipaddr2 ]; then
                /etc/init.d/opensips status > /dev/null
                rc=$?
                if [ $rc -ne 0 ]; then
                     return $OCF_NOT_RUNNING
                 else
                      return $OCF_SUCCESS
                fi

        else
                /etc/init.d/opensips restart
                return $OCF_SUCCESS
        fi
else
       
       /etc/init.d/opensips status > /dev/null
       rc=$?
       if [ $rc -ne 0 ]; then
                return $OCF_NOT_RUNNING
        else
                return $OCF_SUCCESS
        fi
fi


}

OpenSIPS_Monitor() {
   
    OpenSIPS_Status
}

OpenSIPS_Start() {


        if OpenSIPS_Status ; then
                return $OCF_SUCCESS
        else
                /etc/init.d/opensips start > /dev/null
                rc=$?
                if [ $rc -ne 0 ]; then
                         return $OCF_ERR_PERM
                else
                         return $OCF_SUCCESS
                fi
        fi
}

OpenSIPS_Stop() {

        /etc/init.d/opensips stop > /dev/null
        return $OCF_SUCCESS
}

OpenSIPS_Validate_All() {

        return $OCF_SUCCESS
}



if [ $# -ne 1 ]; then
        usage
        exit $OCF_ERR_ARGS
fi

case $1 in
        meta-data) meta_data
        exit $OCF_SUCCESS
;;
        start) OpenSIPS_Start
;;
        stop) OpenSIPS_Stop
;;
        monitor) OpenSIPS_Monitor
;;
        status) OpenSIPS_Status
;;
        validate-all) OpenSIPS_Validate_All
;;
        notify) exit $OCF_SUCCESS
;;
        promote) exit $OCF_SUCCESS
;;
        demote) exit $OCF_SUCCESS
;;
        usage) usage
        exit $OCF_SUCCESS
;;
        *) usage
        exit $OCF_ERR_ARGS
;;
esac

exit $?



Thanks 
Grazie









-------------------------
Giuseppe De Vivo 
Divisione  Sistemi

GRUPPOMEGA S.P.A.
Partner: 
CISCO, ISS, NOVELL, STONEVOICE, CITRIX

S.S.114 Contrada Biggemi 
96010 Priolo Gargallo (SR) - Italy

+39 347 9623589 | Mobile
+39 0931 774953 | Office
+39 0931 412770 | Fax
gdevivo at gruppomega.it  

http://www.gruppomega.it| Web
-------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20100928/69dbd635/attachment-0001.htm 


More information about the Users mailing list