#!/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 : 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 < 0.1 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. OCF Resource Agent compliant MySQL Proxy script. Full path to the MySQL Proxy binary. For example, "/usr/sbin/mysql-proxy". Full path to MySQL Proxy binary Full path to a MySQL Proxy configuration file. For example, "/etc/mysql-proxy.conf". Full path to configuration file Address:port of the remote backend-servers (default: 127.0.0.1:3306). Listening address:port of the proxy-server (default: :4040). You can also specify a socket like "/tmp/mysql-proxy.sock". Listening address:port of the admin-server (default: 127.0.0.1:4041). The MySQL Proxy daemon may be called with additional parameters. Specify any of them here. PID file PID file 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