Перейти к основному контенту

Скрипты для взаимодействия с wiSLA

Поддерживаемые параметры установщика Wisla

Чтобы узнать доступные параметры установщика Wisla, выполнить команду:

./wisla-5.2.9-2502251017.run --help

Будет следующий вывод:

wiSLA 5.2.9 build 2502251017 installer
usage: ./wisla-5.2.9-2502251017.run <options>
This script installs the wiSLA system cluster.
OPTIONS:
    Installer options
    -h      Show this message
    -t      Text mode only
    --hadoop-install                        Install hadoop system only
    --silent-install                        Silent install
    --silent-update                         Silent update
    --silent-fast-update                    Silent update without backup stage
    --silent-fast-update-with-new-db <Postrgres DB dump path>  Silent update without backup stage with new database restoring
    --silent-fast-update-replace-db-n-hbase <Postgres DB dump path> <HBase data dump path>  Silent update without backup stage with complete data overwrite
    
    Package options
    -x      Unpack distribution from self
    -v      Display version information

ENVIRONMENT:
    INSTALL_TEMP - directory used to store temporary files. Default: /tmp/
    INSTALL_LOG  - installation log name. Default: install.YYYY-MM-dd_HH:mm:ss.log
    EXTERNAL_DISTRIBUTION_FILE - used to specify external distribution file
    SCENARIO - used to switch default scenario

Варианты обновления системы

1. Установка wisla с нуля

Убедиться что в системе отсутствуют установленные ранее папки : hadoop, postgresql, zookeeper, hbase. Иначе будет полуавтоматический режим установки, где необходимо будет подтверждать очистку каталогов, а при попытке нажать No процесс установки будет прерван.

./wisla-5.2.9-xxxxxxxx.run --silent-install

2. Стандартное обновление (с резервным копированием)

./wisla-5.2.9-xxxxxxxx.run --silent-update

Этот режим выполняет обновление системы с сохранением резервных копий данных.

 

3. Быстрое обновление без резервного копирования

./wisla-5.2.9-xxxxxxxx.run --silent-fast-update

Этот режим пропускает этап создания резервных копий, ускоряя процесс обновления.

 

4. Быстрое обновление с восстановлением новой базы данных PostgreSQL

./wisla-5.2.9-xxxxxxxx.run --silent-fast-update-with-new-db /path/to/postgres_dump.sql

Здесь /path/to/postgres_dump.sql — путь к файлу дампа PostgreSQL, который будет использован для восстановления данных.

 

5. Полная замена базы данных и HBase

./wisla-5.2.9-xxxxxxxx.run --silent-fast-update-replace-db-n-hbase /path/to/postgres_dump.sql /path/to/hbase_data

Где:

  • /path/to/postgres_dump.sqlпуть к дампу PostgreSQL.
  • /path/to/hbase_dataпуть к данным HBase.

 

6. Установка только Hadoop

./wisla-5.2.9-xxxxxxxx.run --hadoop-install

 

Дополнительно:

  • Просмотр логов

По умолчанию логи установки сохраняются в файл install.YYYY-MM-dd_HH:mm:ss.log. Изменить имя лога можно так:

export INSTALL_LOG=my_install_log.txt
  • Изменение временной директории
export INSTALL_TEMP=/custom/temp/dir
  • Режим текстового интерфейса
./wisla-5.2.9-xxxxxxxx.run -t

 

Управление всеми сервисами Wisla

  • Проверка статуса запущенных сервисов
/opt/wisla5/scripts/wisla5.sh status
  • Остановка всех сервисов
/opt/wisla5/scripts/wisla5.sh stop
  • Запуск всех сервисов
/opt/wisla5/scripts/wisla5.sh start
  • Перезапуск всех сервисов
/opt/wisla5/scripts/wisla5.sh restart

 

Управление только сервисом Wisla

  • Проверка статуса запущенных сервисов
/opt/wisla5/scripts/wisla.sh status
  • Остановка всех сервисов
/opt/wisla5/scripts/wisla.sh stop
  • Запуск всех сервисов
/opt/wisla5/scripts/wisla.sh start
  • Перезапуск сервиса Wisla
/opt/wisla5/scripts/wisla.sh restart

Скрипт:

#!/bin/bash

# Source function library.
WILDFLY_WORK=/opt/wisla5/wildfly/current
wildfly_pid_calc=$(pgrep -u wisla -f "jboss.home.dir=${WILDFLY_WORK}" | wc -l)

keyphrase_blank_wildfly_started="WildFly .* started in"

function start_blank_wildfly() {
	# анализ log-файла
	[ -r $WILDFLY_WORK/standalone/log/server.log ] && basic_blank_wildfly_started_counter=$(egrep -c "keyphrase_blank_wildfly_started" $WILDFLY_WORK/standalone/log/server.log)
	[ -z "basic_blank_wildfly_started_counter" ] && basic_blank_wildfly_started_counter=0
	# запуск пустого Wildfly
	cd $WILDFLY_WORK/bin
	nohup ./standalone.sh > /dev/null 2>&1&
}

function start_deploy() {
	cd $WILDFLY_WORK/standalone/deployments
	for file in *.?ar;
	do
		touch "$file".dodeploy
	done
}

function wait_for_blank_wildfly() {
    timeout=300
    blank_wildfly_counter_started=0
    blank_wildfly_current_counter_started=0
    if [ ! -e "$WILDFLY_WORK/standalone/log/server.log" ] ; then
        touch "$WILDFLY_WORK/standalone/log/server.log"
    fi
    basic_blank_wildfly_started_counter=$(egrep -c "$keyphrase_blank_wildfly_started" $WILDFLY_WORK/standalone/log/server.log)
    for i in $(seq 1 $timeout);
    do
	blank_wildfly_started_counter=$(egrep -c "$keyphrase_blank_wildfly_started" $WILDFLY_WORK/standalone/log/server.log)
	((total_wildfly_start_time = total_wildfly_start_time + 1))
	if [ $blank_wildfly_started_counter -eq $((basic_blank_wildfly_started_counter+1)) ]
	then
	    echo "Starting blank Wildfly..."
	    return
	fi
    sleep 1
    done
    echo "Error during blank Wildfly start!"
}

function start() {
	wildfly_pid_calc=$(pgrep -u wisla -f "jboss.home.dir=${WILDFLY_WORK}" | wc -l)
	if [ "$wildfly_pid_calc" -eq 0 ]
	then
		total_wildfly_start_time=0
		# очистка каталогов deployments (кроме war, ear) и tmp перед запуском
		find $WILDFLY_WORK/standalone/deployments -regextype posix-egrep ! -regex ".*(ear|war)" -type f -exec rm -f {} \;
		rm -rf $WILDFLY_WORK/standalone/tmp/*
		rm -rf /tmp/workspace_*-*-*-*-*
		cd $WILDFLY_WORK/standalone
		# запуск пустого wildfly
		echo "Waiting for the blank Wildfly application server to start (up to 5 minutes)... "
		start_blank_wildfly
		# ожидание запуска пустого Wildfly
		wait_for_blank_wildfly
		# начало деплоя артефактов (в порядке, выбранном Wildfly)
		start_deploy
	else
        echo "Error. Wildfly is already running!"
		return 1
	fi
}


function stop() {
    echo "wiSLA is stopping..."
    kill `pgrep -f "jboss.home.dir=${WILDFLY_WORK}"` &> /dev/null
    ATTEMPTS=0
    while [[ ! -z `pgrep -f "jboss.home.dir=${WILDFLY_WORK}"` ]]; do
        echo "Waiting for the Wildfly application server to stop..."
        (( ATTEMPTS = ATTEMPTS + 1 ))
        if [ $ATTEMPTS -gt 10 ]
            then
            echo "60 seconds is elapsed, trying to stop the process with -9 signal"
            kill -9 `pgrep -f "jboss.home.dir=${WILDFLY_WORK}"`
        fi
        sleep 5
    done
}

function status() {
    PID=`pgrep -f "jboss.home.dir=${WILDFLY_WORK}"`
    [[ ! -z $PID ]] && echo "Started with PID : $PID" || echo "Stopped"
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    try-restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *) exit 1
esac

exit 0

 

Реиндексация

  • Стандартная реиндексация (требует запущенной системы)
/opt/wisla5/scripts/wi-reindex.sh

Скрипт:

#!/bin/bash
# Source function library.
JRE_WORK="/opt/wisla5/jre/current"

echo "Reindexing wisla engine lucene database..."
${JRE_WORK}/bin/java -jar /opt/wisla5/util/jmx/cmdline-jmxclient-0.10.3.jar - localhost:1090 "wisla-engine:name=nodeReindexer" reindexFullTextSearch

exit 0

 

  • Независимая реиндексация (не зависит от состояния деплоя)
/opt/wisla5/scripts/wi-reindex-standalone.sh

Скрипт:

#!/bin/bash
# Source function library.
JRE_WORK="/opt/wisla5/jre/current"
POSTGRES_HOST="alfa-test"
DB_NAME="wisla"
USER="wisla"

echo "Reindexing database"
${JRE_WORK}/bin/java -jar -Dhibernate.connection.username="${USER}" \
-Dhibernate.search.base_indexes_directory="/opt/wisla5/wildfly/current/bin/searchindexes/engine/" \
-Dhibernate.connection.url="jdbc:postgresql://${POSTGRES_HOST}:5462/${DB_NAME}" \
-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true \
/opt/wisla5/util/reindexer/wisla-reindexer.jar
echo "Reindex finished"
exit 0

 

Создание резервных копий баз данных

  • PostgreSQL

Файл шаблона скрипта: /opt/wisla5/backup_scripts/postgres_backup_template.sh

Пример запуска резервного копирования:

pg_dump --host "wisla" --port 5432 --username "wisla" --format custom --blobs --no-owner --encoding UTF8 --verbose --file /home/wisla/backup/wisla.backup

Альтернативный способ через шаблонный скрипт:

sed "s|{{FILE-NAME}}|/home/wisla/backup/wisla.backup|" /opt/wisla5/backup_scripts/postgres_backup_template.sh | bash

Скрипт:

#!/bin/bash
pg_dump --host "alfa-test" --port 5432 --username "wisla" --format custom --blobs --no-owner --encoding UTF8 --verbose --file {{FILE-NAME}} wisla
ssh {{LOGIN}}@{{BACKUP-SERVER}} "mkdir -p {{DESTINATION}}"
scp ./{{FILE-NAME}} {{LOGIN}}@{{BACKUP-SERVER}}:{{DESTINATION}}
rm -f ./{{FILE-NAME}}


  • HBase

Файл шаблона скрипта: /opt/wisla5/backup_scripts/hbase_backup_template.sh, но корректность работы проверить не удалось, пробовал  переписать скрипт, но возникает проблема при выполнении команды импорта снимков в папку.

#!/bin/bash

BACKUP_DIR=$(mktemp -d -t -p ~/ hbase_backup.XXXXXXXX)
mkdir ${BACKUP_DIR}/backup
BACKUP_PARRENT_DIR=${BACKUP_DIR}
BACKUP_DIR=${BACKUP_DIR}/backup

hbase org.apache.hadoop.hbase.mapreduce.Export -D mapred.output.compress=true {{TABLE-PREFIX}}-tsdb {{TABLE-PREFIX}}-tsdb-backup 1 {{START-TIMESTAMP}} {{END-TIMESTAMP}}
hbase org.apache.hadoop.hbase.mapreduce.Export -D mapred.output.compress=true {{TABLE-PREFIX}}-tsdb-uid {{TABLE-PREFIX}}-tsdb-uid-backup 1 {{START-TIMESTAMP}} {{END-TIMESTAMP}}
hbase org.apache.hadoop.hbase.mapreduce.Export -D mapred.output.compress=true {{TABLE-PREFIX}}-tsdb-nf {{TABLE-PREFIX}}-tsdb-nf-backup 1 {{START-TIMESTAMP}} {{END-TIMESTAMP}}
hbase org.apache.hadoop.hbase.mapreduce.Export -D mapred.output.compress=true {{TABLE-PREFIX}}-tsdb-uid-nf {{TABLE-PREFIX}}-tsdb-uid-nf-backup 1 {{START-TIMESTAMP}} {{END-TIMESTAMP}}
hbase org.apache.hadoop.hbase.mapreduce.Export -D mapred.output.compress=true {{TABLE-PREFIX}}-tsdb-lts {{TABLE-PREFIX}}-tsdb-lts-backup 1 {{START-TIMESTAMP}} {{END-TIMESTAMP}}

hdfs dfs -copyToLocal /user/wisla/{{TABLE-PREFIX}}-tsdb-backup ${BACKUP_DIR}/{{TABLE-PREFIX}}-tsdb
hdfs dfs -copyToLocal /user/wisla/{{TABLE-PREFIX}}-tsdb-uid-backup ${BACKUP_DIR}/{{TABLE-PREFIX}}-tsdb-uid
hdfs dfs -copyToLocal /user/wisla/{{TABLE-PREFIX}}-tsdb-nf-backup ${BACKUP_DIR}/{{TABLE-PREFIX}}-tsdb-nf
hdfs dfs -copyToLocal /user/wisla/{{TABLE-PREFIX}}-tsdb-uid-nf-backup ${BACKUP_DIR}/{{TABLE-PREFIX}}-tsdb-uid-nf
hdfs dfs -copyToLocal /user/wisla/{{TABLE-PREFIX}}-tsdb-lts-backup ${BACKUP_DIR}/{{TABLE-PREFIX}}-tsdb-lts

cd ${BACKUP_DIR}/..
tar -czvf {{FILE-NAME}} backup
hdfs dfs -rm -r /user/wisla/{{TABLE-PREFIX}}-tsdb-backup
hdfs dfs -rm -r /user/wisla/{{TABLE-PREFIX}}-tsdb-uid-backup
hdfs dfs -rm -r /user/wisla/{{TABLE-PREFIX}}-tsdb-nf-backup
hdfs dfs -rm -r /user/wisla/{{TABLE-PREFIX}}-tsdb-uid-nf-backup
hdfs dfs -rm -r /user/wisla/{{TABLE-PREFIX}}-tsdb-lts-backup

ssh {{LOGIN}}@{{BACKUP-SERVER}} "mkdir -p {{DESTINATION}}"
scp ./{{FILE-NAME}} {{LOGIN}}@{{BACKUP-SERVER}}:{{DESTINATION}}

rm -f ./{{FILE-NAME}}
cd ../
rm -r ${BACKUP_PARRENT_DIR}

 

!!!Но для выполнения скрипта надо настраивать hbase и hadoop


Дополнительно:

  • Перезагрузка плагинов в приложении wiSLA
/opt/wisla5/scripts/reload-plugins.sh

Скрипт:

#!/bin/bash
# Source function library.
JRE_WORK=/opt/wisla5/jre/current

${JRE_WORK}/bin/java -jar /opt/wisla5/util/jmx/cmdline-jmxclient-0.10.3.jar - localhost:1090 "wisla-engine:name=pluginManager" reloadPlugins

exit 0
  • Удаление старых лог файлов
/opt/wisla5/scripts/remove-old-logs.sh

Скрипт:

#!/bin/bash
DAYS=10
LOG_DIR=/opt/wisla5/wildfly/current/standalone/log
for file in "$( find ${LOG_DIR}/ -maxdepth 1 -type f -mtime +${DAYS} )"
do
    rm -f ${file}
done