Hi,
On Fri, Feb 08, 2008 at 10:50:31AM -0500, Eddie C wrote:
> I recently ran into a tool called Pen. Pen is a lot like other reverse
> proxies except it can be totally run from the command line with no
> configuration file.
>
> pen 8080 host1:80 host2:80
>
> This makes it ideal work as an RA, because the load balancer (ok its a
> proxy but close enough) can fail over to any node without having to
> worry about synchronizing configuration files.
>
> >From inside Linux HA it can be used like this
>
> <primitive id="pen_80" class="ocf" type="Pen" provider="heartbeat">
> <operations>
> <op id="mon_pen_80" name="monitor"
> interval="30s" timeout="3s"/>
> </operations>
> <instance_attributes>
> <attributes>
> <nvpair name="listen_port" value="192.168.200.10:80" />
> <nvpair name="control_port" value="20280" />
> <nvpair name="blacklist" value="30" />
> <nvpair name="logfile" value="/var/log/pen_80.log" />
> <nvpair name="conffile" value="/dev/null" />
> <nvpair name="server_list" value="host1:80:1024
> host2:80:1024" />
> </attributes>
> </instance_attributes>
> </primitive>
>
> I have tested the RA with multiple running instances of Pen and
> everything seems good. Finding a pen packages is easy and building
> from sources is trivial as well. Once you get the RA installed it is
> very easy to create load balancing groups on the fly.
Sounds good. If you wish to contribute the RA, please contact
Alan Robertson (in the cc) to resolve any possible legal issues.
Thanks,
Dejan
> #!/bin/sh
> # Edward Guy Capriolo
> # Pen RA: Used to start the pen proxy from linux HA
> #
> # OCF parameters are as below
>
> # OCF_RESKEY_listen_port
> # OCF_RESKEY_control_port
> # OCF_RESKEY_blacklist
> # OCF_RESKEY_logfile
> # OCF_RESKEY_conffile
> # OCF_RESKEY_server_list
>
> # TEsting uncomment
> #OCF_RESKEY_listen_port=8080
> #OCF_RESKEY_control_port=8081
> #OCF_RESKEY_blacklist=30
> #OCF_RESKEY_logfile=/var/log/pen
> #OCF_RESKEY_conffile=/etc/pen.cfg
> #OCF_RESKEY_server_list="server1:80:1024 server2:80:1024"
> #OCF_ROOT=/usr/lib/ocf
>
>
> #######################################################################
> # Initialization:
> . /etc/init.d/functions
> . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs
> #######################################################################
>
> meta_data() {
> cat <<END
> <?xml version="1.0"?>
> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
> <resource-agent name="Pen">
> <version>1.0</version>
>
> <longdesc lang="en">
> Starts the pen (reverse) proxy
> </longdesc>
>
> <shortdesc lang="en">Starts the pen proxy</shortdesc>
>
> <parameters>
> <parameter name="listen_port" unique="1" required="1">
> <longdesc lang="en">
> The port for client connections data sent to this port will
> be forwared to back end servers. Can also be specified as host:port
> </longdesc>
> <shortdesc lang="en">listen port</shortdesc>
> <content type="string" default="" />
> </parameter>
>
> <parameters>
> <parameter name="control_port" unique="1" required="1">
> <longdesc lang="en">
> used to send control signals to pen
> </longdesc>
> <shortdesc lang="en">control port</shortdesc>
> <content type="string" default="" />
> </parameter>
>
> <parameters>
> <parameter name="blacklist" unique="1" required="1">
> <longdesc lang="en">
> a blacklist time before a backend server is dead
> </longdesc>
> <shortdesc lang="en">blacklist</shortdesc>
> <content type="string" default="" />
> </parameter>
>
>
> <parameters>
> <parameter name="logfile" unique="1" required="1">
> <longdesc lang="en">
> where to log to
> </longdesc>
> <shortdesc lang="en">logfile</shortdesc>
> <content type="string" default="" />
> </parameter>
>
> <parameters>
> <parameter name="conffile" unique="1" required="1">
> <longdesc lang="en">
> extra parameters in a configuration file
> </longdesc>
> <shortdesc lang="en">conffile</shortdesc>
> <content type="string" default="" />
> </parameter>
>
> <parameters>
> <parameter name="server_list" unique="1" required="1">
> <longdesc lang="en">
> definition of the backend servers
> </longdesc>
> <shortdesc lang="en">server_list</shortdesc>
> <content type="string" default="" />
> </parameter>
>
> </parameters>
>
> <actions>
> <action name="start" timeout="90" />
> <action name="stop" timeout="100" />
> <action name="status" depth="10" timeout="20s" interval="10s"
> start-delay="5s" />
> <action name="monitor" depth="10" timeout="20s" interval="10s"
> start-delay="5s" />
> <action name="meta-data" timeout="5s" />
> <action name="validate-all" timeout="20s" />
> </actions>
> </resource-agent>
> END
>
> exit $OCF_SUCCESS
> }
>
>
> #######################################################################
>
> pen_usage() {
> cat <<END
> usage: $0 {start|stop|status|monitor|validate-all|meta-data}
>
> Expects to have a fully populated OCF RA-compliant environment set.
> END
> }
>
> pen_start() {
>
> WS_RUN=`ps -ef | grep /usr/bin/pen | grep $OCF_RESKEY_control_port |
> grep -v grep`
> if [ "$WS_RUN" = "" ] ; then
> /usr/bin/pen -F $OCF_RESKEY_conffile -C
> $OCF_RESKEY_control_port -b $OCF_RESKEY_blacklist -l $OCF_RESKEY_logfile
> $OCF_RESKEY_listen_port $OCF_RESKEY_server_list >/dev/null 2>/dev/null
> /usr/bin/penctl localhost:$OCF_RESKEY_control_port roundrobin
> #/usr/bin/penctl localhost:$OCF_RESKEY_control_port tracking
> 60
> if [ "$?" = "0" ] ; then
> echo "Starting pen [OK]"
> exit $OCF_SUCCESS
> else
> echo "Starting pen [FAILED]"
> exit $OCF_ERR_GENERIC
> fi
>
> else
> echo "pen already running"
> exit 0
> fi
> # exit $OCF_ERR_GENERIC
> # exit $OCF_SUCCESS
> }
>
> pen_stop() {
> WS_PID=`ps -ef | grep /usr/bin/pen | grep $OCF_RESKEY_control_port |
> grep -v grep | awk '{print $2}'`
> if [ "$WS_PID" = "" ] ; then
> echo "pen is already stopped"
> return $OCF_SUCCESS
> else
> kill $WS_PID
> echo "pen stopped [OK]"
> return $OCF_SUCCESS
> fi
>
> exit $OCF_SUCCESS
> }
>
> pen_monitor() {
> WS_PID=`ps -ef | grep /usr/bin/pen | grep $OCF_RESKEY_control_port |
> grep -v grep | awk '{print $2}'`
> if [ "$WS_PID" = "" ] ; then
> return $OCF_NOT_RUNNING
> else
> return $OCF_SUCCESS
> fi
>
> return $OCF_ERR_GENERIC
> }
>
> pen_validate() {
> exit $OCF_SUCCESS
> }
>
> case $__OCF_ACTION in
> meta-data) meta_data
> ;;
> start) pen_start
> ;;
> stop) pen_stop
> ;;
> status) pen_monitor
> ;;
> monitor) pen_monitor
> ;;
> validate-all) pen_validate
> ;;
> usage|help) pen_usage
> exit $OCF_SUCCESS
> ;;
> *) pen_usage
> exit $OCF_ERR_UNIMPLEMENTED
> ;;
> esac
> _______________________________________________
> 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