hi dejan, Dejan Muhamedagic wrote: >>>>> # TODO >>>>> # * remove debian specific code (e.g. start-stop-daemon) >> this is still open. i would like to see mysql-proxy included so i >> can provide patches against the hg repository instead of re-submitting >> the ocf every time. ... > At risk of being ungrateful and rude, I'd still insist on this > point, because people expect the whole shebang to run on Linux, > not just on distribution XY. It shouldn't be that hard to do > after all :) Take a look at this changeset for example: > > changeset: 12393:60cc2d6eee88 > user: NAKAHIRA Kazutomo <[email protected]> > date: Fri Apr 24 08:38:48 2009 +0200 > summary: High (LF 2112): RA: sfex: checkproc/killproc are not available > everywhere
i now replaced the start-stop-daemon calls. however, i left these calls as comments for reference. if the ra proves stable, one can remove them during the next maintanance. thank you for the reference. it saved me some time! changes: * replace debian specific start-stop-daemon calls * protect $pidfile * remove obsolete code/comments * add some more error checking is it ready for initial inclusion now? cheers, raoul -- ____________________________________________________________________ DI (FH) Raoul Bhatia M.Sc. email. [email protected] Technischer Leiter IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at Barawitzkagasse 10/2/2/11 email. [email protected] 1190 Wien tel. +43 1 3670030 FN 277995t HG Wien fax. +43 1 3670030 15 ____________________________________________________________________
#!/bin/sh # # Resource script for MySQL Proxy # # Description: Manages MySQL Proxy as an OCF resource in # an high-availability setup. # # Tested with mysql-proxy 0.7.0 on Debian 5.0. # Based on the mysql and Pure-Ftpd OCF resource agents. # # Author: Raoul Bhatia <[email protected]> : Original Author # License: GNU General Public License (GPL) # # # usage: $0 {start|stop|status|monitor|validate-all|meta-data} # # The "start" arg starts a MySQL Proxy instance # # The "stop" arg stops it. # # TODO # * add error checking like in mysql ocf ra (e.g. socketdir) # * verify if mysql-proxy supports multiple --proxy-address(es) # # OCF parameters: # OCF_RESKEY_binary # OCF_RESKEY_defaults_file # OCF_RESKEY_proxy_backend_addresses # OCF_RESKEY_proxy_read_only_backend_addresses # OCF_RESKEY_proxy_address # OCF_RESKEY_admin_address # OCF_RESKEY_parameters # OCF_RESKEY_pidfile # ########################################################################## # Initialization: . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs : ${OCF_RESKEY_binary="/usr/sbin/mysql-proxy"} : ${OCF_RESKEY_defaults_file=""} : ${OCF_RESKEY_proxy_backend_addresses="127.0.0.1:3306"} : ${OCF_RESKEY_proxy_read_only_backend_addresses=""} : ${OCF_RESKEY_proxy_address=":4040"} : ${OCF_RESKEY_admin_address="127.0.0.1:4041"} : ${OCF_RESKEY_parameters=""} : ${OCF_RESKEY_pidfile="${HA_RSCTMP}/mysql-proxy-${OCF_RESOURCE_INSTANCE}.pid"} USAGE="Usage: $0 {start|stop|status|monitor|validate-all|meta-data}"; ########################################################################## usage() { echo $USAGE >&2 } meta_data() { cat <<END <?xml version="1.0"?> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> <resource-agent name="mysql-proxy"> <version>0.1</version> <longdesc lang="en"> This script manages MySQL Proxy as an OCF resource in a high-availability setup. Tested with MySQL Proxy 0.7.0 on Debian 5.0. </longdesc> <shortdesc lang="en">OCF Resource Agent compliant MySQL Proxy script.</shortdesc> <parameters> <parameter name="binary" unique="1" required="1"> <longdesc lang="en"> Full path to the MySQL Proxy binary. For example, "/usr/sbin/mysql-proxy". </longdesc> <shortdesc lang="en">Full path to MySQL Proxy binary</shortdesc> <content type="string" default="/usr/sbin/mysql-proxy" /> </parameter> <parameter name="defaults_file" unique="1" required="0"> <longdesc lang="en"> Full path to a MySQL Proxy configuration file. For example, "/etc/mysql-proxy.conf". </longdesc> <shortdesc lang="en">Full path to configuration file</shortdesc> <content type="string" default="" /> </parameter> <parameter name="proxy_backend_addresses" unique="0" required="0"> <longdesc lang="en"> Address:port of the remote backend-servers (default: 127.0.0.1:3306). </longdesc> <shortdesc lang="en"></shortdesc> <content type="string" default="127.0.0.1:3306" /> </parameter> <parameter name="proxy_read_only_backend_addresses" unique="0" required="0"> <longdesc lang="en"> Address:port of the remote slave-server (default: not set). </longdesc> <shortdesc lang="en"></shortdesc> <content type="string" default="127.0.0.1:3306" /> </parameter> <parameter name="proxy_address" unique="0" required="0"> <longdesc lang="en"> Listening address:port of the proxy-server (default: :4040). You can also specify a socket like "/tmp/mysql-proxy.sock". </longdesc> <shortdesc lang="en"></shortdesc> <content type="string" default=":4040" /> </parameter> <parameter name="admin_address" unique="0" required="0"> <longdesc lang="en"> Listening address:port of the admin-server (default: 127.0.0.1:4041). </longdesc> <shortdesc lang="en"></shortdesc> <content type="string" default="127.0.0.1:4041" /> </parameter> <parameter name="parameters" unique="1" required="0"> <longdesc lang="en"> The MySQL Proxy daemon may be called with additional parameters. Specify any of them here. </longdesc> <shortdesc lang="en"></shortdesc> <content type="string" default="" /> </parameter> <parameter name="pidfile" unique="0"> <longdesc lang="en">PID file</longdesc> <shortdesc lang="en">PID file</shortdesc> <content type="string" default="${HA_RSCTMP}/mysql-proxy-${OCF_RESOURCE_INSTANCE}.pid" /> </parameter> </parameters> <actions> <action name="start" timeout="90" /> <action name="stop" timeout="100" /> <action name="monitor" depth="10" timeout="20s" interval="60s" start-delay="1s" /> <action name="validate-all" timeout="30s" /> <action name="meta-data" timeout="5s" /> </actions> </resource-agent> END exit $OCF_SUCCESS } isRunning() { kill -0 "$1" 2>/dev/null } mysqlproxy_status() { if [ -f "${pidfile}" ]; then # MySQL Proxy is probably running PID=`head -n 1 "${pidfile}"` if [ ! -z "$PID" ] ; then isRunning "$PID" return $? fi else ocf_log err "Cannot check MySQL Proxy status because PID-file was lost." fi # MySQL Proxy is not running false } mysqlproxy_start() { # if MySQL Proxy is running return success if mysqlproxy_status ; then ocf_log info "MySQL Proxy already running." exit $OCF_SUCCESS fi # check that the MySQL Proxy binary exists and can be executed if [ ! -x "$binary" ]; then ocf_log err "MySQL Proxy binary '$binary' does not exist or cannot be executed." exit $OCF_ERR_GENERIC fi # check if the MySQL Proxy defaults-file exist PARAM_PREFIX='' if [ -f "$defaults_file" ]; then PARAM_PREFIX="--defaults-file=$defaults_file " fi # split multiple proxy-address options. # currently unsupported but let us hope for the future ;) for pa in $proxy_address; do [ -z "$pa" ] && continue OPTIONS=" $OPTIONS --proxy-address=$pa" done # split multiple proxy-backend-addresses options. for pba in $proxy_backend_addresses; do [ -z "$pba" ] && continue OPTIONS=" $OPTIONS --proxy-backend-addresses=$pba" done # split multiple proxy-backend-addresses options. for proba in $proxy_read_only_backend_addresses; do [ -z "$proba" ] && continue OPTIONS=" $OPTIONS --proxy-read-only-backend-addresses=$proba" done # build $OPTIONS and add addmin-address and pidfile OPTIONS="$PARAM_PREFIX $OPTIONS --admin-address=$admin_address --pid-file=$pidfile $PARAM_SUFFIX" # start MySQL Proxy #start-stop-daemon --start --quiet --pidfile $pidfile --make-pidfile --name mysql-proxy --startas $binary -b -- $OPTIONS $binary --daemon $OPTIONS ret=$? if [ $ret -ne 0 ]; then ocf_log err "MySQL Proxy returned error." $ret exit $OCF_ERR_GENERIC fi exit $OCF_SUCCESS } mysqlproxy_stop() { if mysqlproxy_status ; then #start-stop-daemon --stop --quiet --retry 3 --exec $binary --pidfile $pidfile /bin/kill `cat "${pidfile}"` ret=$? if [ $ret -ne 0 ]; then ocf_log err "MySQL Proxy returned error while stopping." $ret exit $OCF_ERR_GENERIC fi # grant some time for shutdown and recheck if mysqlproxy_status ; then ocf_log err "MySQL Proxy failed to stop." exit $OCF_ERR_GENERIC fi # remove dangling socketfile if specified for pa in $proxy_address; do if [ -S "$pa" ]; then ocf_log info "Removing dangling socket file '$pa'." rm -f "$pa" fi done fi exit $OCF_SUCCESS } mysqlproxy_monitor() { if mysqlproxy_status ; then return $OCF_SUCCESS fi return $OCF_NOT_RUNNING } mysqlproxy_validate_all() { # @TODO return $OCF_SUCCESS } # # Main # if [ $# -ne 1 ]; then usage exit $OCF_ERR_ARGS fi pidfile=$OCF_RESKEY_pidfile binary=$OCF_RESKEY_binary defaults_file=$OCF_RESKEY_defaults_file proxy_backend_addresses=$OCF_RESKEY_proxy_backend_addresses proxy_read_only_backend_addresses=$OCF_RESKEY_proxy_read_only_backend_addresses admin_address=$OCF_RESKEY_admin_address proxy_address=$OCF_RESKEY_proxy_address # debugging stuff #echo OCF_RESKEY_binary=$OCF_RESKEY_binary >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_defaults_file=$OCF_RESKEY_defaults_file >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_proxy_backend_addresses=$OCF_RESKEY_proxy_backend_addresses >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_proxy_read_only_backend_addresses=$OCF_RESKEY_proxy_read_only_backend_addresses >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_proxy_address=$OCF_RESKEY_proxy_address >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_admin_address=$OCF_RESKEY_admin_address >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_parameters=$OCF_RESKEY_parameters >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE #echo OCF_RESKEY_pidfile=$OCF_RESKEY_pidfile >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE case $1 in start) mysqlproxy_start ;; stop) mysqlproxy_stop ;; status) if mysqlproxy_status; then ocf_log info "MySQL Proxy is running." exit $OCF_SUCCESS else ocf_log info "MySQL Proxy is stopped." exit $OCF_NOT_RUNNING fi ;; monitor) mysqlproxy_monitor exit $? ;; validate-all) mysqlproxy_validate_all exit $? ;; meta-data) meta_data ;; usage) usage exit $OCF_SUCCESS ;; *) usage exit $OCF_ERR_UNIMPLEMENTED ;; esac
_______________________________________________________ Linux-HA-Dev: [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/
