Настройка mysqldump, проверка и мониторинг бэкапов mysql

Введение

В качестве примера я рассмотрю серверы с установленными там продуктами bitrix, работающими в bitrixenv. Особенностью будет то, что bitrix до сих пор использует не самую свежую версию mysql от percona — Percona Server for MySQL 5.7. Тем не менее, проблем с этим нет никаких. Версия будет поддерживаться минимум до октября 2023 года.

Для полных и инкрементных бэкапов я рассмотрю утилиту Percona XtraBackup, которая позволяет делать архивы баз данных на лету без блокировок таблиц. В моей статье будет использоваться версия 2.4, так как именно она поддерживает mysql 5.7. Это максимально доступная версия в репозиториях, которые устанавливает окружение bitrixenv.

Примеры в этой статье будут актуальны практически для всех версий Mysql и XtraBackup, так как в подходах и командах отличий почти нет

Важно знать, что последняя версия XtraBackup на момент написания статьи была 8.0 и она поддерживает популярный форк mysql — MariaDB только до версии 10.2 включительно, да и то с оговорками. Для более поздних версий mariadb рекомендуется использовать mariabackup

Это форк XtraBackup, который в использовании практически ничем не отличается от оригинала.

Сегодня я рассмотрю инкрементные бэкапы mysql только с помощью XtraBackup, а так же полные бэкапы в том числе с помощью mysqldump. MariaDB и Mariabackup рассматривать не буду. Принципиальных отличий между ними нет. Там все то же самое.

Система HelpDesk (Служба поддержки)

Переходим к следующему нововведению, о котором я не рассказывал в прошлой статье, потому что его еще не было. Речь идет о встроенной системе HelpDesk. Специально ничего настраивать не надо, так как система уже установлена и готова работать. Она поддерживает интеграцию с Active Directory для авторизации пользователей. При этом работает и без нее. Подробнее про интеграцию с AD читайте в документации. Я же покажу, как начать работать с helpdesk без домена.

Для начала вам нужно будет создать пользователя для возможности открытия заявок. Это, как обычно, делается в клиенте, в разделе Панель администратора -> Служба поддержки -> Пользователи.

После создания, пользователю на почту придет письмо со ссылкой. С помощью этой ссылки он сможет сразу же авторизовываться в системе. При этом необходимости вводить логин с паролем не будет.

После входа в web интерфейс хелпдеска, пользователь увидит очень простой и лаконичный интерфейс, где не нужно долго разбираться. Создать заявку можно тут же. При этом не нужны никакие дополнительные инструкции и объяснения, так как все очень наглядно.

После создания, сотрудник поддержки увидит заявку у себя в клиенте в разделе Инциденты и заявки.

Если у поддержки установлен VNC клиент, а у сотрудника VNC сервер, то поддержка может сразу же подключиться к заявителю

При этом не важно, в какой сети они находятся, так как соединение будет установлено через облако. Достаточно просто нажать кнопку и сразу идет подключение к заявителю

Помимо этого заявку можно отложить, передать другому сотруднику, либо решить вопрос самому. Всю информацию по заявке пользователь будет получать на почту.

Если проблема решена, то пользователь сам закрывает заявку. Все оповещения работают автоматически через облачные службы Veliam. У себя ничего настраивать не надо.

Более подробно о настройке и работе helpdesk можно прочитать в документации. Она небольшая, понятная, отражена самая суть. Читать и разбираться легко.

На выходе вы имеете полностью настроенную систему поддержки пользователей. Ограничение бесплатной версии — 50 пользователей, что весьма неплохо. На своей стороне каких-то настроек, уведомлений, веб серверов для работы системы настраивать не надо. Все работает из коробки через облачные службы Veliam.

При всем при этом, система интуитивно понятна и наглядна. Не нужны подробные инструкции для описания работы с системой. Поэтому любой пользователь разберется самостоятельно.

Добавлю так же, что по инцидентам системы мониторинга так же создаются заявки в тех поддержку. С ними можно работать точно так же, как и с заявками пользователей — решать проблему, закрывать, комментировать, передавать заявку другому пользователю.

Здесь же из заявки можно подключиться к серверу и посмотреть, что на нем происходит. Это очень удобно. В традиционных системах мониторинга, с которыми мне приходится работать, таких возможностей нет. Понятно, что они решают более широкий спектр задач, чем Veliam. Если же у вас потребности в мониторинге не высокие и Велиам их закрывает, то пользовать им будет приятно и удобно.

Оповещения в telegram со ссылками на график и триггер

Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в telegram, в котором помимо всего прочего сразу же публикуются ссылки на триггер, график и некоторые другие полезности. Вот он на гитхабе — https://github.com/xxsokolov/Zabbix-Notification-Telegram. Инструкция от автора в некоторых местах не очень понятная, так что я немного повозился, прежде чем все получилось. В основном c xml были проблемы, но обо всем по порядку.

Клонируем к себе репозиторий.

# cd ~
# git clone https://github.com/xxsokolov/Zabbix-Notification-Telegram

Копируем в /usr/lib/zabbix/alertscripts папку zbxTelegram_files и файлы _config.yml, zbxTelegram.py, .requirements и zbxTelegram_config.example.py. Последний переименовываем в zbxTelegram_config.py.

Делаем пользователя zabbix владельцем этих файлов и разрешаем исполнение скрипта.

# chown -R zabbix. /usr/lib/zabbix/alertscripts
# chmod +x zbxTelegram.py

Автор скрипта предлагает запускать его в виртуальном окружении, поэтому поставим пакет virtualenv.

# dnf install virtualenv

Переходим в /usr/lib/zabbix/alertscripts, создаем виртуальное окружение и активируем его.

# cd /usr/lib/zabbix/alertscripts
# virtualenv venv --python=python3
# source venv/bin/activate

Ставим зависимости и деактивируем окружение.

# pip install -r .requirements
# deactivate

Редактируем конфигурационный файл zbxTelegram_config.py. Список параметров, которые нужно поменять.

tg_proxy = False
tg_token = '1393668911:AFGHTRDVdfJ28R-wxKfvH1RTR6-vdNw'
zabbix_api_url = 'http://10.20.1.23/zabbix/'
zabbix_api_login = 'Admin'
zabbix_api_pass = 'zabbix'

В url на конце должен обязательно быть слеш. Дальше делаем все то же самое, что и ранее. Идем в Способы оповещений и добавляем новый тип, где в качестве скрипта указываем zbxTelegram.py.

Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:

{Problem} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY`: {EVENT.NAME}
{Resolved} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY` {EVENT.NAME}
{Update} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY` {EVENT.NAME}
  • {Problem} — мапинг значений Problem\Resolved\Update в emoji (config: zabbix_status_emoji_map)
  • `TRIGGER`.`SEVERITY` — мапинг значений Severity в emoji (config: zabbix_status_emoji_map)

В поле Сообщение копируется xml конфиг полностью, который приведен в файле actions.example. Копируйте его 1 в 1.

Во все шаблоны можете его вставить без изменений. Я немного попытался его править, но каждый раз потом получал ошибку парсинга xml. В итоге бросил. Автор перечисляет значение каждого парметра, так что можете попытаться настроишь шаблоны на свой вкус.

  • <graphs></graphs> — прикреплять график (True\False)
  • <graphlinks>True</graphlinks> — прикрепить ссылку url на History (True\False)
  • <triggerlinks>True</triggerlinks> — прикрепить ссылку url из триггера (True\False)
  • <tag>True</tag> — прикрепить теги (True\False)
  • <graphs_period></graphs_period> — период графика в секундах
  • <itemid></itemid> — передача itemid {ITEM.ID1}
  • <triggerid></triggerid> — передача triggerid {TRIGGER.ID}
  • <eventid></eventid>- передача eventid {EVENT.ID}
  • <title></title> — заголовок графика {HOST.HOST} — {EVENT.NAME}
  • <triggerurl></triggerurl> — передача url из триггера {TRIGGER.URL}
  • <tags></tags> — передача списка тэгов из триггера {EVENT.TAGS}

Проверим работу уведомлений. Сначала через консоль.

# ./zbxTelegram.py @serveradmin_zabbix_group test test

В данном случае слова test менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.

То же самое можно сделать через web интерфейс.

Если все в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробоно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в телеграме от этого скрипта будут выглядеть вот так:

Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по итему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.

Высокая нагрузка CPU на PPPoE server

Проблема данной конфигурации в том, что возникает огромная нагрузка на CPU, из-за чего отключает абонентов, у них нестабильная связь. Как я понял, это актуально для провайдеров, которые используют оборудование Микротик для подключения абонентов.

Во время диагностики видно, что процесс routing полностью загружает одно ядро на 100%. На остальных ядрах периодически появляется максимальная нагрузка процессов ppp и networking.

Причина данной ошибки в том, что динамическая маршрутизация OSPF спамит обновлением маршрутов с сеткой /32 от клиентов. При этом, все протоколы динамической маршрутизации в микротиках ограничены одним ядром. То есть параллелить свою работу не умеют. В итоге, при каждом подключении или отключении абонента по pppoe, начинается обновление маршрутов. Когда их много, они загружают полностью ядро процессора и все начинает тормозить.

Если я правильно понял, в данном случае решением будет использовать тип Area для ospf — stub (тупиковая), который можно указать в настройках. Предлагается такое решение (умничать не буду, почти ничего не понял :)

Полный бэкап Mysql сервера

Итак, база данных у нас работает, утилиту для бэкапа мы установили. Давайте теперь сделаем полный backup всех баз данных нашего сервера mysql.

# xtrabackup --backup --user=root --password='R(zDXcVUmI[zwx%aNBTN' --target-dir=/root/backupdb/full
backup инициируем процедуру бэкапа
user=root пользователь mysql
password=’R(zDXcVUmI[zwx%aNBTN’ пароль пользователя, взятый в одинарные кавычки
target-dir=/root/backupdb/full директория для создания полного бэкапа mysql

В дальнейших примерах я не буду указывать пользователя и пароль, чтобы упростить команды. Эти данные я указал в файле ~/.my.cnf.

user=root
password='R(zDXcVUmI[zwx%aNBTN'

Мы сделали полный архив всего mysql сервера. В таком виде данные не консистентны, так как они могли меняться во время архивации. Если восстановить их как есть, сервер mysql не запустится. Будет ругаться на поврежденные данные. Чтобы восстановить целостность данных, необходимо выполнить еще одну команду.

# xtrabackup --prepare --target-dir=/root/backupdb/full

После этого бэкап будет полностью работоспособен и готов к восстановлению. Я обычно выполняю эту команду сразу же после бэкапа, но это не всегда возможно. К примеру, если вы захотите его сразу же сжать.

# xtrabackup --backup --compress --target-dir=/root/backupdb/full

В таком случае его сначала нужно будет распаковать, а потом подготовить. Делать это не обязательно сразу. Можно хранить бэкапы не подготовленными, а готовить только перед восстановлением, если это случится. Распаковывается бэкап следующим образом.

# xtrabackup --decompress --target-dir=/root/backupdb/full

Для того, чтобы команда decompress отработала без ошибки:

sh: qpress: command not found
cat: write error: Broken pipe
Error: decrypt and decompress thread 0 failed.

Необходимо установить пакет qpress.

# yum install qpress

Он есть в репозитории percona. После этого распаковка пройдет штатно.

Лично я не вижу большого смысла использовать ключи compress и decompress. Можно сделать полный бэкап, подготовить его, а потом сжать тем же gzip.

# tar -czvf /root/backupdb/full.tar.gz -C /root/backupdb full

На выходе получите тот же архив, только сжат лучше и нет необходимости ставить дополнительный софт. Gzip и tar обычно есть во всех дистрибутивах. К тому же архив в виде единого файла проще и быстрее передать на сервер бэкапов и там хранить.

В завершении раздела про полный backup, предлагаю простенький скрипт для автоматизации процесса через cron — mysql-full-backup.sh.

#!/bin/bash

DATA=`date +%Y-%m-%d`

mkdir -p /root/backupdb/$DATA
xtrabackup --backup --target-dir=/root/backupdb/$DATA/full
xtrabackup --prepare --target-dir=/root/backupdb/$DATA/full
tar -czvf /root/backupdb/$DATA/full.tar.gz -C /root/backupdb/$DATA full
rm -rf /root/backupdb/$DATA/full

При выполнении этого скрипта раз в день, вы будете иметь отдельные папки с именем в виде даты, а внутри полный бэкап. Дальше мы в эти же папки будем класть инкрементные бэкапы. Но обо всем по порядку.

Подготовка к обновлению

Важная информация перед обновлением. Версия 5.4 без длительной поддержки. Через пол года к ней перестанут выходить обновления, так что вам обязательно придется обновляться на следующую версию. Если для вас не критичны нововведения этого релиза, пропускайте его и ждите новой LTS версии.

Если у вас версия ниже 5.2, то предварительно обновите ее до указанной. У меня есть цикл статей на тему обновления Zabbix:

  • 2.4 до 3.0
  • 3.0 до 3.2
  • 3.2 до 3.4
  • 3.4 до 4.0
  • 4.0 до 4.2
  • 4.2 до 4.4
  • 4.4 до 5.0
  • 5.0 до 5.2

Перед обновлением, сделаем на всякий случай бэкап базы данных. Для этого предварительно остановим сервер с агентом.

У меня что-то активно писалось в базу, поэтому сервер выключался долго. Я проверил лог zabbix-server, чтобы убедиться в корректном выключении. Там все нормально было, сервер штатно завершил работу, дописав то, что у него там накопилось. Так что бэкапим.

zabbix название базы данных заббикса
-uzabbix ключ -u и дальше имя пользователя базы данных
-p’password’ ключ -p и дальше пароль пользователя бд, если в пароле есть спецсимволы, экранируйте их одиночными кавычками

На всякий случай сохраним php скрипты админки, чтобы можно было оперативно запустить старую версию в случае нештатной ситуации. Хотя лично я сделал снепшот виртуалки перед обновлением, чтобы откатиться назад в случае проблем.

Centos 8

Подключаем репозиторий версии zabbix 5.4:

# rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm

Старый репозиторий от версии 5.2 будет автоматически удален.

Очищаем и пересоздаем кэш dnf:

Удаляем пакет текущего репозитория:

Подключаем новый:

Обновляем информацию о репозиториях:

Ubuntu 20

Удаляем пакет текущего репозитория:

Подключаем новый:

Обновляем информацию о репозиториях:

Если у вас другие версии систем, то простой найдите ссылки пакетов под свою версию в официальном репозитории — https://repo.zabbix.com/zabbix/5.4/ Дальнейшее обновление не будет отличаться от текущего.

К обновлению подготовились, можно приступать.

Подготовка к обновлению

Для начала информация для тех, у кого всё ещё 5-я версия. Обновите её по моей статье — Обновление Proxmox 5 до 6. После того, как сделаете это, возвращайтесь сюда. А мы готовимся обновить Proxmox 6 до 7. Я не буду заниматься самодеятельностью, а выполню то, что указано в официальном руководстве по обновлению — https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0. Если хорошо читаете по-английски, можете сразу переходить туда и делать по нему.

Перед обновлением важно ознакомиться со всеми нюансами:

  1. Версия Proxmox должна быть 6.4.
  2. Перед обновлением Proxmox нужно обязательно обновить Ceph до версии 15.2.
  3. Если используете Proxmox Backup Server, то не обновляйтесь до тех пор, пока не выйдет версия 2.0.
  4. У вас должны быть доступны все хранилища на момент обновления.
  5. На всякий случай должны быть сделаны бэкапы всех виртуальных машин и контейнеров.
  6. Должно быть доступно не менее 4GiB свободного места на корневом разделе.
  7. У вас изменится MAC адрес на сетевых бриджах vmbr. Подготовьтесь к этому заранее.

Перед обновлением обновим систему и перезагрузимся. Перезагружаться не обязательно, но я на всякий случай делаю это.

# apt update && apt dist-upgrade
# reboot

Теперь запускаем утилиту pve6to7, чтобы проверить готовность вашего гипервизора к обновлению.

# pve6to7

Я получил одно предупреждение. У одного контейнера отсутствует указанный в конфигурации диск. Это очень старый контейнер, который не нужен. Я просто удалил его. Запустил еще раз утилиту, предупреждений не было. После этого можно двигаться дальше.

Как я уже сказал ранее, после обновления у вас изменится MAC адрес сетевого бриджа vmbr. Если для вас это может сулить проблемы, то заранее укажите постоянный MAC. Для начала посмотрите текущие адреса:

# ip -c link

Затем укажите текущий MAC адрес бриджа в конфигурации сетевых интерфейсов /etc/network/interfaces.

auto vmbr0
iface vmbr0 inet static
    address 10.20.1.2/24
    hwaddress ae:9d:46:49:4d:23
    # ... остальные настройки

Заключение

Вот так относительно просто настраивается обычная master — slave репликация mysql. Подобным же образом настраивается и master-master репликация, но на практике она очень нестабильно работает. Я пробовал в свое время, но в итоге отказался, так как надоело ее чинить и исправлять ошибки. Для полноценного кластера с мультизаписью лучше использовать какие-то специализированные решения типа Percona XtraDB Cluster.

Кстати, он же может заменить и текущую конфигурацию, если сделать его из двух нод и писать только в одну. Разрешив ему работать при выходе из строя реплики, получится примерно то же самое, что и в статье. Но смысла в этом особо нет, так как предложенная мной конфигурация настраивается проще и быстрее. Плюс, это типовое решение для любого mysql сервера.

Онлайн курс «DevOps практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Заключение

Онлайн курсы по Mikrotik

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте .

Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:

  • Знания, ориентированные на практику;
  • Реальные ситуации и задачи;
  • Лучшее из международных программ.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: