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