MaxScale 1.0 от
SkySQL сейчас находится в бета-версии, и в нем есть несколько интересных функций, я думаю, некоторые предприимчивые люди уже запустили его в производство. Есть еще некоторые грубые края и вещи, которые нужно исправить, но это явно близко к GA. Однако не хватает одной вещи — это то, что управляет запуском и остановкой MaxScale в некоторой контролируемой манере, о чем и рассказывается в этом блоге.
Я разработал два простых скрипта, которые должны помочь вам разумно управлять MaxScale, но прежде чем мы перейдем к реальным скриптам, я должен сказать вам несколько вещей. Для начала, если вы еще не загрузили бета-версию MaxScale 1.0, вы можете получить ее с MariaDB.com , просто зайдите на Resources-> MaxScale и перейдите к загрузкам, которые вам сначала необходимо зарегистрировать (это бесплатно). Вот загрузки для rpms и исходного кода, но если вы в настоящее время ищете тарбол, то, похоже, его нет, ну, на самом деле, первая ссылка под «Source Tarball» на самом деле представляет собой бинарный тарбол. Я сообщил об этом, поэтому к тому времени, когда вы прочитаете это, это могло быть исправлено. Конечно, вы всегда можете получить исходный код из github и собрать его самостоятельно.
В любом случае, для запуска MaxScale вам нужен файл конфигурации, и вы должны установить домашний каталог MaxScale. Если вы используете CentOS или RedHat и устанавливаете rpms (именно так я и настроил нас), MaxScale устанавливается в / usr / local / skysql / maxscale, и это также то, что MAXSCALE_HOME необходимо установить. MaxScale может принимать аргумент файла конфигурации, но если он не передан, будет использоваться MAXSCALE_HOME / etc / MaxScale.cnf. Кроме того, вам, вероятно, придется добавить MAXSCALE_HOME / lib в переменную LD_LIBRARY_PATH.
В общем, есть некоторые переменные окружения, которые нужно установить, прежде чем мы сможем запустить MaxScale, и это работа первого скрипта, maxenv.sh . Чтобы это работало, его нужно поместить в каталог bin в MAXSCALE_HOME. В этом сценарии мы также устанавливаем MAXSCALE_USER, и он используется сценарием запуска / остановки MaxScale, который будет объяснен позже, и это пользователь linux, который будет запускать MaxScale. Вы можете установить это в пустую строку для запуска maxscale в качестве текущего пользователя, что является нормальным способом запуска MaxScale, но в этом случае вам нужно убедиться, что у данного пользователя есть доступ на запись к MAXSCALE_HOME и его подкаталогам.
Итак, здесь мы имеем дело с maxenv.sh , и вы можете скопировать его в каталог bin в вашем каталоге MAXSCALE_HOME и использовать его вот так (обратите внимание, что я установил для пользователя запуск MaxScale на mysql, так что если у вас нет этого пользователя, затем создайте его или измените maxenv.sh соответственно):
#!/bin/bash
#
export MAXSCALE_HOME=$(cd `dirname ${BASH_SOURCE[0]}`/..; pwd)
export MAXSCALE_USER=mysql
PATH=$PATH:$MAXSCALE_HOME/bin
# Add MaxScale lib directory to LD_LIBRARY_PATH, unless it is already there.
if [ `echo $LD_LIBRARY_PATH | awk -v RS=: '{print $0}' | grep -c "^$MAXSCALE_HOME/lib$"` -eq 0 ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MAXSCALE_HOME/lib
fi
export MAXSCALE_PIDFILE=$MAXSCALE_HOME/log/maxscale.pid
Теперь пришло время для maxctl , который является скриптом, который запускает и останавливает MaxScale, и он также должен быть помещен в каталог MAXSCALE_HOME / bin , и обратите внимание, что этот скрипт опирается на maxenv.sh выше, поэтому для использования maxctl вам также нужен maxenv. Ш, как указано выше. Сценарий довольно длинный, но в любом случае, возможно, чего-то не хватает, но для меня это было полезно:
#!/bin/bash
#
# Script to start and stop MaxScale.
#
# Set up the environment
. $(cd `dirname $0`; pwd -P)/maxenv.sh
# Set default variables
NOWAIT=0
HELP=0
QUIET=0
MAXSCALE_PID=0
# Get pid of MaxScale if it is running.
# Check that the pidfile exists.
if [ -e $MAXSCALE_PIDFILE ]; then
MAXSCALE_PID=`cat $MAXSCALE_PIDFILE`
# Check if the process is running.
if [ `ps --no-heading -p $MAXSCALE_PID | wc -l` -eq 0 ]; then
MAXSCALE_PID=0
fi
fi
# Function to print output
printmax() {
if [ $QUIET -eq 0 ]; then
echo $* >&2
fi
}
# Function to print help
helpmax() {
echo "Usage: $0 start|stop|status|restart"
echo "Options:"
echo "-f - MaxScale config file"
echo "-h - Show this help"
echo "-n - Don't wait for operation to finish before exiting"
echo "-q - Quiet operation"
}
# Function to start maxscale
startmax() {
# Check if MaxScale is already running.
if [ $MAXSCALE_PID -ne 0 ]; then
printmax "MaxScale is already running"
exit 1
fi
# Check that we are running as root if a user to run as is specified.
if [ "x$MAXSCALE_USER" != "x" -a `id -u` -ne 0 ]; then
printmax "$0 must be run as root"
exit 1
fi
# Check that we can find maxscale
if [ ! -e $MAXSCALE_HOME/bin/maxscale ]; then
printmax "Cannot find MaxScale executable ($MAXSCALE_HOME/bin/maxscale)"
exit 1
fi
# Check that the config file exists, if specified.
if [ "x$MAXSCALE_CNF" != "x" -a ! -e "$MAXSCALE_CNF" ]; then
printmax "MaxScale configuration file ($MAXSCALE_CNF) not found"
exit 1
fi
# Start MaxScale
if [ "x$MAXSCALE_USER" == "x" ]; then
$MAXSCALE_HOME/bin/maxscale -c $MAXSCALE_HOME ${MAXSCALE_CNF:+-f $MAXSCALE_CNF}
else
su $MAXSCALE_USER -m -c "$MAXSCALE_HOME/bin/maxscale -c $MAXSCALE_HOME ${MAXSCALE_CNF:+-f $MAXSCALE_CNF}"
fi
}
# Function to stop maxscale
stopmax() {
NOWAIT=1
if [ "x$1" == "-n" ]; then
NOWAIT=0
fi
# Check that we are running as root if a user to run as is specified.
if [ "x$MAXSCALE_USER" != "x" -a `id -u` -ne 0 ]; then
printmax "$0 must be run as root"
exit 1
fi
# Check that the pidfile exists.
if [ ! -e $MAXSCALE_PIDFILE ]; then
printmax "Can't find MaxScale pidfile ($MAXSCALE_PIDFILE)"
exit 1
fi
MAXSCALE_PID=`cat $MAXSCALE_PIDFILE`
# Kill MaxScale
kill $MAXSCALE_PID
if [ $NOWAIT -ne 0 ]; then
# Wait for maxscale to die.
while [ `ps --no-heading -p $MAXSCALE_PID | wc -l` -ne 0 ]; do
usleep 100000
done
MAXSCALE_PID=0
fi
}
# Function to show the status of MaxScale
statusmax() {
# Check that the pidfile exists.
if [ $MAXSCALE_PID -ne 0 ]; then
printmax "MaxScale is running (pid: $MAXSCALE_PID user: `ps -p $MAXSCALE_PID --no-heading -o euser`)"
exit 0
fi
printmax "MaxScale is not running"
exit 1
}
# Process options.
while getopts ":f:hnq" OPT; do
case $OPT in
f)
MAXSCALE_CNF=$OPTARG
;;
h)
helpmax
exit 0
;;
n)
NOWAIT=1
;;
q)
QUIET=1
;;
\?)
echo "Invalid option: -$OPTARG"
;;
esac
done
# Process arguments following options.
shift $((OPTIND - 1))
OPER=$1
# Check that an operation was passed
if [ "x$1" == "x" ]; then
echo "$0: your must enter an operation: start|stop|restart|status" >&2
exit 1
fi
# Handle the operations.
case $OPER in
start)
startmax
;;
stop)
stopmax
;;
status)
statusmax
;;
restart)
if [ $MAXSCALE_PID -ne 0 ]; then
NOWAITSAVE=$NOWAIT
NOWAIT=0
stopmax
NOWAIT=$NOWAITSAVE
fi
startmax
;;
*)
echo "Unknown operation: $OPER. Use start|stop|restart|status"
exit 1
esac
Чтобы использовать этот скрипт, вы вызываете его с помощью одной из 4 основных операций: запуск, остановка, перезапуск или состояние. Если вы хотите запускать от имени определенного пользователя, вы можете запустить его от имени root (или использовать sudo):
sudo /usr/local/skysql/maxscale/maxctl start
Также есть несколько вариантов, которые вы можете передать:
- -h — Распечатать справку
- -f — запускать с файлом конфигурации spcified вместо MAXSCALE_HOME / etc / MaxScale.cnf
- -n — Не хочу, чтобы остановка закончилась до возвращения. Остановка MaxScale путем отправки SIGTERM — вот как это сделать, но для полной остановки MaxScale требуется короткое время. По умолчанию maxctl будет ждать, пока MaxScale не будет остановлен, прежде чем вернуться, передав эту опцию, MaxScale немедленно вернется.
- -q — Тихая операция
/ Karlsson