Есть 2 сервера приложений(app01 и app02), на которых установлен Redis и Sentinel для мониторинга активного мастера и перевода одного из существующих слейв серверов в режим мастера в случае выхода со строя текущего мастера, а также перевода старого мастера в режим slave к вновь избранному мастеру. Также есть третий сервер(advisor), на котором запущен только Sentinel. Этот […]
Архивы рубрики ‘Debian/Ubuntu’
Настройка High Availabilty RabbitMQ-кластера


RabbitMQ может быть настроен для много-нодового кластера (с репликацией очередей с мастера на slave-ноды). Отказоустойчивость может быть обеспечена добавлением round-robin лоадбалансера(например, HAProxy) впереди RabbitMQ-кластера Для настройка High Availability необходимо настроить Cluster, а затем – репликацию/зеркалирование очередей сообщений т.к. при настройке кластера реплицируются на ноды кластера все необходимые для работы RabbitMQ данные, за исключением очередей сообщений. […]
Оптимизация производительности Zabbix


Zabbix — это платформа, которая в основном состоит из трех компонентов: 1.Сервера Zabbix 2.Базы данных Zabbix 3.Графического интерфейса Zabbix Также рассмотрим несколько других способов оптимизации производительности Zabbix 4.Оптимизация операционной системы 5. Мониторинг состояния Zabbix 1.Оптимизация Zabbix-сервера 1.Использование активных Zabbix-agent проверок вместо пассивных Zabbix-agent проверок (уменьшает нагрузку на Zabbix-сервер и количество TCP-соединений) При этом […]
Мониторинг NTP в Zabbix


1.Получение информации с NTP-службы
1 |
# ntpq -pn 127.0.0.1 |
1 2 3 4 5 6 |
remote refid st t when poll reach delay offset jitter ============================================================================== +176.221.42.125 37.120.191.245 3 u 806 1024 377 8.638 -1.089 0.978 +144.76.19.215 122.227.206.195 3 u 427 1024 377 0.685 -0.124 0.422 5.9.118.105 193.79.237.14 2 u 37d 1024 0 0.434 -31.270 0.000 *138.201.16.225 131.188.3.221 2 u 130 1024 377 0.314 -1.047 0.611 |
2.Настройка скрипта на Zabbix-агенте Выполнить скрипт
1 |
# nano ntp-prepare.sh |
1 2 3 4 5 6 7 8 9 |
#!/bin/bash [ -d /etc/zabbix/scripts ] || mkdir /etc/zabbix/scripts/ chown root:zabbix -R /etc/zabbix/scripts/ chmod 750 /etc/zabbix/scripts/ [ -f /etc/zabbix/scripts/ntp.sh ] || touch /etc/zabbix/scripts/ntp.sh chown root:zabbix /etc/zabbix/scripts/ntp.sh chmod 550 /etc/zabbix/scripts/ntp.sh |
Создание скрипта для снятия NTP-статистики
1 |
# nano /etc/zabbix/scripts/ntp.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#!/bin/bash VERSION="1.0" function usage() { echo "ntpcheck version: $VERSION" echo "usage:" echo " $0 jitter - Check ntp jitter delay" echo " $0 offset - Check ntp offset" echo " $0 delay - Check ntp delay" } ######## # Main # ######## if [[ $# != 1 ]];then #No Parameter usage exit 0 fi case "$1" in 'jitter') value=`ntpq -pn 127.0.0.1 | /usr/bin/awk 'BEGIN { jitter=0 } $1 ~/\*/ { jitter=$10 } END { print jitter }'` rval=$?;; 'offset') value=`ntpq -pn 127.0.0.1 | /usr/bin/awk 'BEGIN { offset=0 } $1 ~/\*/ { offset=$9 } END { print offset }'` rval=$?;; 'delay') value=`ntpq -pn 127.0.0.1 | /usr/bin/awk 'BEGIN { delay=0 } $1 ~/\*/ { delay=$8 } END { print delay }'` rval=$?;; 'health') primary=`ntpq -pn 127.0.0.1 | grep ^\* |grep -v grep | wc -l` rval=$? if [ "${primary}" -eq "1" ] ; then value="1" else value="0" fi ;; *) usage exit 1;; esac if [ "$rval" -eq 0 -a -z "$value" ]; then rval=1 fi if [ "$rval" -ne 0 ]; then echo "ZBX_NOTSUPPORTED" fi echo $value |
3.Настройка Zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.d/userparameter_ntp.conf |
1 2 |
# NTP monitoring UserParameter=ntp[*],/etc/zabbix/scripts/ntp.sh $1 |
Перезапуск Zabbix-агента # Ubuntu14
1 |
# service zabbix-agent restart |
#Ubuntu16
1 |
# systemctl restart zabbix-agent |
Проверка получений NTP-метрик локально с Zabbix-клиента
1 |
# sudo -u zabbix /etc/zabbix/scripts/ntp.sh delay |
1 |
8.384 |
1 |
# zabbix_get -s 127.0.0.1 -k ntp[delay] |
1 |
8.384 |
С Zabbix-сервера
1 |
# zabbix_get -s ip-address-zabbix-client -k ntp[delay] |
1 |
8.384 |
4.Настройка Zabbix-сервера Скачиваем,распаковываем и импортируем […]
Мониторинг Redis в Zabbix


1.Получение Redis-статистики Если используем подключение к порту
1 |
# redis-cli info |
Если используем подключение к Unix-сокету
1 |
# redis-cli -s /path/to/socke/file |
2. Настройка скрипта на Zabbix-агенте Выполнить скрипт
1 |
# nano redis-prepare.sh |
1 2 3 4 5 6 7 8 9 |
#!/bin/bash [ -d /etc/zabbix/scripts ] || mkdir /etc/zabbix/scripts/ chown root:zabbix -R /etc/zabbix/scripts/ chmod 750 /etc/zabbix/scripts/ [ -f /etc/zabbix/scripts/redis.sh ] || touch /etc/zabbix/scripts/redis.sh chown root:zabbix /etc/zabbix/scripts/redis.sh chmod 550 /etc/zabbix/scripts/redis.sh |
Создание скрипта для проверки Redis-параметров
1 |
# nano /etc/zabbix/scripts/redis.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#!/bin/bash ##### Help ##### help () { echo "Usage: $0 redis_metric" echo "For example: $0 rejected_connections" } ##### OPTIONS VERIFICATION ##### if [[ -z "$1" ]]; then help exit 1 fi ##### PARAMETERS ##### HOSTNAME=$(hostname -f) AWK=$(which awk) GREP=$(which grep) METRIC="$1" REDIS_CLI=$(which redis-cli) # To use Unix-socket instead of port # REDIS_CLI= "$(which redis-cli) -s /path/to/socket/file" CACHE_TTL="55" CACHE_FILE="/tmp/zabbix.redis.`echo $HOSTNAME | md5sum | cut -d" " -f1`.cache" EXEC_TIMEOUT="1" NOW_TIME=`date '+%s'` ##### RUN ##### if [ -s "${CACHE_FILE}" ]; then CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"` else CACHE_TIME=0 fi DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME})) # if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME})) elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then echo "" >> "${CACHE_FILE}" # !!! DATACACHE=`${REDIS_CLI} info 2>&1` echo "${DATACACHE}" > "${CACHE_FILE}" # !!! chmod 640 "${CACHE_FILE}" fi case ${METRIC} in rejected_connections|expired_keys|evicted_keys|keyspace_hits|keyspace_misses|connected_clients|blocked_clients|rdb_last_bgsave_status|total_connections_received|total_commands_processed|used_cpu_sys|used_cpu_user) $GREP -w ${METRIC} "${CACHE_FILE}" | $AWK -F: '{print $2}' ;; total_net_input_bytes|total_net_output_bytes) $GREP -w ${METRIC} "${CACHE_FILE}" | $AWK -F: 'x=$2 {print x/1024/1024}' ;; used_memory_rss|used_memory_peak|used_memory_overhead|used_memory_startup|used_memory_dataset|used_memory_lua|used_memory|maxmemory) $GREP -w ${METRIC} "${CACHE_FILE}" | $AWK -F: 'x=$2 {print x/1024/1024}' ;; *) help ;; esac exit 0 |
3.Настройка Zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf |
1 2 |
# Redis monitoring UserParameter=redis[*],/etc/zabbix/scripts/redis.sh "$1" |
Перезапуск Zabbix-агента
1 2 |
# Ubuntu14 # service zabbix-agent restart |
1 2 |
# Ubuntu16 # systemctl restart zabbix-agent |
Проверка получение Redis-метрики локально с Zabbix-агента
1 |
# sudo -u zabbix /etc/zabbix/scripts/redis.sh used_memory |
1 |
0.439476 |
1 |
# zabbix_get -s 127.0.0.1 -k "redis[used_memory]" |
1 |
0.439476 |
С Zabbix-сервера
1 |
# zabbix_get -s server1.mydomain.com -k "redis[used_memory]" |
1 |
0.439476 |
[…]
Выполнение скрипта/команды при срабатывании триггера Zabbix


Необходимо при срабатывании триггера выполнять команду/скрипт Например, при срабатывании триггера о том, что служба обновления баз данных Clamav-антивируса (freshclam-clamav)не запущена, автоматически перезапускать эту службу Создаем новое ДЕЙСТВИЕ
1 |
Configuration->Action->Create action |
Вкладка Action
1 |
Name->Restart Clamav-freshclam process |
Вклдка Conditions
1 |
Type of calculation -> Custom Expression->(A and B and C) or (A and B and D) or (A and B and E) or (A and B and F) or (A and B and G) |
Или
1 |
A and B and (C or D or E or F or G or H or I) |
где
1 2 3 4 5 |
A – статус/режим «Обслуживание» не включен B – Триггер имеет значение «Проблема» С – Триггер хоста1 с проверкой запущен ли процесс Clamav-freshclam на этом хосте1 D – Триггер хоста2 с проверкой запущен ли процесс Clamav-freshclam на этом хосте2 и т.д. |
Вкладка Operations
1 2 3 4 |
Target list -> Current host Type-> Custom script Execute on->Zabbix server Commands-> /usr/lib/zabbix/externalscripts/clamav-freshclam-restart.sh {HOST.HOST} |
На Zabbix-сервере создаем скрипт
1 |
# nano /usr/lib/zabbix/externalscripts/clamav-freshclam-restart.sh |
1 2 |
#!/bin/bash ssh -p3333 root@$1 "service clamav-freshclam restart" |
1 |
# chmod +x /usr/lib/zabbix/externalscripts/clamav-freshclam-restart.sh |
zabbix-пользователь будет подключаться […]
Установка, настройка и оптимизация Apache mpm-itk на Ubuntu16


1.Установка Apache
1 |
# apt-get install apache2 |
2.Установка модуля libapache2-mpm-itk
1 |
# apt-get install libapache2-mpm-itk |
3.Включение модуля mpm-itk
1 |
# a2enmod mpm_itk |
4.Настройка виртуального хоста Apache
1 |
# nano /etc/apache2/sites-enabled/000-default.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<VirtualHost *:80> ServerName mydomain.com ServerAlias www.mydomain.com DocumentRoot /var/www/html <Directory "/var/www/html"> AllowOverride All Options -Indexes +FollowSymLinks </Directory> <IfModule mpm_itk_module> AssignUserId www-data www-data </IfModule> ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined </VirtualHost> |
5.Перезагрузка Apache и проверка подключенных модулей
1 |
# systemctl restart apache2 |
Проверка подключенных модулей
1 |
# apachectl -t -D DUMP_MODULES | grep mpm |
1 2 |
mpm_itk_module (shared) mpm_prefork_module (shared) |
Либо
1 |
# a2query -m | grep mpm |
1 2 |
mpm_itk (enabled by maintainer script) mpm_prefork (enabled by maintainer script) |
Просмотр типа MPM
1 |
# a2query -M |
1 |
Prefork |
Здесь подключается модуль mpm-itk
1 |
# nano /etc/apache2/mods-enabled/mpm_itk.load |
1 2 |
# Depends: mpm_prefork LoadModule mpm_itk_module /usr/lib/apache2/modules/mpm_itk.so |
Настройка параметров mpm Prefork
1 |
# nano /etc/apache2/mods-enabled/mpm_prefork.conf |
1 2 3 4 5 6 7 |
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 4096 </IfModule> |
Немного безопасности
1 |
# nano /etc/apache2/conf-available/security.conf |
1 2 |
ServerTokens Prod ServerSignature Off |
Просмотр […]
Настройка бекапа cайтов по FTP-подключению


1.Настройка бекапа удаленных сайтов по FTP через монтирование удаленных сайтов с помощью curlftpfs и дальнейшего выполнения rsync/tar на удаленный/локальный сервер Загружаем необходимый модуль ядра fuse и добавляем его загрузку в автозагрузку
1 |
# modprobe fuse |
Debian/Ubuntu
1 |
# nano /etc/modules |
1 |
fuse |
Установка curlftpfs
1 |
# apt-get install curlftpfs |
Логины/пароли для подключения к сайтам сохраним в отдельный файл, чтобы они не отображались в командной строке при […]