Hi Raoul, On Sat, May 16, 2009 at 08:02:41PM +0200, Raoul Bhatia [IPAX] wrote: > hi, > > this is my first shot at creating a ocf ra on my own. that's one reason > i do not fully know if this should belong to heartbeat or pacemaker ;)
I'd say to heartbeat. > > # 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. > > i invite everyone to take a look and give me some feedback. > currently, i have the following todos on my list: The script looks good to me, though I've never used that software. There's just one place where you should protect the variable expansion with quotes ($PID). Also, a few places were use of OCF_RESKEY_* variables makes it very hard to follow the relevant context. Perhaps you'd want to replace OCF_RESKEY_* variables with shorter names (i.e. pidf, defaultf, etc). > > # TODO > > # * remove debian specific code (e.g. start-stop-daemon) > > # * add error checking like in mysql ocf ra (e.g. socketdir) > > # * verify if mysql-proxy supports multiple --proxy-address(es) Well, if you can make it distribution agnostic, that'd be great :) Cheers, Dejan > i tested it with two instances of mysql-proxy, one using > --proxy-address=/var/run/mysqld/mysqld.sock and the second one using > --proxy-address=:3306 . > > 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 > # * remove debian specific code (e.g. start-stop-daemon) > # * 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_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_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_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 $OCF_RESKEY_pidfile ]; then > # MySQL Proxy is probably running > PID=`head -n 1 $OCF_RESKEY_pidfile` > if [ ! -z $PID ] ; then > isRunning "$PID" > return $? > fi > fi > > # MySQL Proxy is not running > false > } > > mysqlproxy_start() > { > # if MySQL Proxy is running return success > if mysqlproxy_status ; then > exit $OCF_SUCCESS > fi > > # check that the MySQL Proxy binary exists and can be executed > if [ ! -x "$OCF_RESKEY_binary" ]; then > ocf_log err "MySQL Proxy binary '$OCF_RESKEY_binary' does not exist > or cannot be executed." > exit $OCF_ERR_GENERIC > fi > > # check if the MySQL Proxy defaults-file exist > FIRST_PARAM='' > if [ -f "$OCF_RESKEY_defaults_file" ]; then > FIRST_PARAM="--defaults-file=$OCF_RESKEY_defaults_file " > fi > > > OPTIONS="$FIRST_PARAM--proxy-backend-addresses=$OCF_RESKEY_proxy_backend_addresses > --admin-address=$OCF_RESKEY_admin_address" > # split multiple proxy-address options > for pa in $OCF_RESKEY_proxy_address; do > OPTIONS=" $OPTIONS --proxy-address=$pa" > done > > # start MySQL Proxy > start-stop-daemon --start --quiet --pidfile $OCF_RESKEY_pidfile > --make-pidfile --name mysql-proxy --startas $OCF_RESKEY_binary -b -- $OPTIONS > ret=$? > > if [ $ret -ne 0 ]; then > ocf_log info "MySQL Proxy returned error" $? > exit $OCF_ERR_GENERIC > fi > > exit $OCF_SUCCESS > } > > > mysqlproxy_stop() > { > LA=`mysqlproxy_status` > echo $LA > if mysqlproxy_status ; then > start-stop-daemon --stop --quiet --retry 3 --exec $OCF_RESKEY_binary > --pidfile $OCF_RESKEY_pidfile > > # remove dangling socketfile if specified > for pa in $OCF_RESKEY_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 > > 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/ _______________________________________________________ Linux-HA-Dev: [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/
