i missed a "!". fixed version attached. Raoul Bhatia [IPAX] wrote: > ups, it seems that i messed something up. > will fix and resend the ra asap! > > cheers, > raoul > > Raoul Bhatia [IPAX] wrote: >> 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 >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________________ >> Linux-HA-Dev: [email protected] >> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev >> Home Page: http://linux-ha.org/ > >
-- ____________________________________________________________________ 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/
