Linux Observability

Linux Performance Tools

Материал с сайта: https://www.brendangregg.com/linuxperf.html

static, benchmarking, tuning:

sar, perf-toolsbcc/BPF:

bpftraceBPF book:

Рубрики:Linux

Patroni на чистом RAFT

Patroni с некоторых пор поддерживает RAFT (алгоритм консенсуса) (в терминологии Microsoft это механизм обеспечения кворума) собственными средствами. И это означает, что теперь при реализации высокодоступной СУБД PostgreSQL на базе решения Patroni теперь можно не зависеть от сторонних систем DCS (Distributed Consensus Store, типа etcd, Consul, ZooKeeper).

Настраивается встроенная поддержка RAFT достаточно просто, более подробная информация в документации и на сайте проекта:

Мой проект по развертыванию высокодоступного кластера PostgreSQL с использованием Ansible обновлён и теперь поддерживает развертывание кластера Patroni без etcd — https://github.com/IlgizMamyshev/pgsql_cluster

Тег «Далее»
Рубрики:Patroni, PostgreSQL

DNS Connection Point for Patroni

Допустим вы развёртываете высокодоступный кластер на базе PostgreSQL, используя решение Patroni и хотите разместить узлы кластера СУБД в разных ЦОД, а эти ЦОД в свою очередь имеют разные подсети.

Соответственно мы должны решить задачу клиентской точки доступа и она должна быть максимально прозрачна для клиентских подключений — клиенту должна быть предоставлена точка доступа в виде одного IP-адреса (который не должен меняться с течением времени) или одного DNS-имени. Когда мы имеем две разные подсети, то при переключении Мастер роли на другой узел СУБД в другой подсети IP-адрес для подключений клиентов будет меняться, значит мы должны решить задачу иным способом, например с помощью DNS-имени.

В случае Microsoft Windows Server Failover Cluster эта задача решается штатными средствами WSFC, DNS-имя кластерного ресурса (виртуального имени кластеризованного экземпляра СУБД) обновляется в DNS в зависимости от того, какой из нескольких виртуальных IP-адресов (принадлежащих разным подсетям) в данный момент активен (Online).

В случае Linux задача с единой точкой клиентского доступа в виде DNS-имени (для случая с несолькими подсетями) усложняется..

Например, такое решение как «PostgreSQL High-Availability Cluster» https://github.com/vitabaks/postgresql_cluster предлагает для точки доступа клиентов использовать один VIP, используя такие решения как vip-manager или Keepalived.

Т.е. наша задача по точке клиентского доступа в виде DNS-имени не решается, т.к. создавать статическую DNS-запись и разрешать имя в несколько IP не подходит.


«Перед тем как что-то изобретать, проведите патентный поиск..» — так учил нас, курсантов Серпуховского ВВКИУ РВСН, преподаватель на занятиях по патентному праву :). Поискал я на просторах Интернета что-то близкое на эту тему и не нашёл готовых решений, но нашёл информацию о том, что Patroni имеет функциональность «обратных вызовов» (callbacks) и может запускать скрипты при возникновении таких событий как запуск, остановка или смена роли Patroni.

Прототип скрипта был взят из доклада «Understanding and implementing PostgreSQL HA» (PGCon 2019, Alexander Kukushkin, Oleksii Kliukin, 28-05-2019)

В результате бурной творческой мысли был рождён вот такой продукт:
DNS Connection Point for Patroni, https://github.com/IlgizMamyshev/dnscp

Вкратце, что умеет:
— запускается сервисом Patroni при событиях on_start, on_stop, on_role_change;
— добавляет VIP адрес на сетевой интерфейс узла СУБД, если Patroni запускается с ролью Лидера и удаляет VIP-адрес в остальных случаях;
— регистрирует (перерегистрирует) DNS-запись типа A в DNS организации;
— поддерживается как анонимный доступ к DNS-зоне, так и аутентифицированный (узел СУБД должен быть членом домена Active Directory, и в AD DS создаётся учетная запись Компьютера (используется для аутентификации на DNS сервере, она же — DNS-имя клиентской точки доступа к СУБД));

Рубрики:Patroni, PostgreSQL

PostgreSQL Observability

Рубрики:PostgreSQL

PostgresPro. Высокая доступность.

В рамках проработки вопроса по импортозамещению СУБД Microsoft SQL Server на СУБД PostgresPro от компании Postgres Professional (решение СУБД на базе PostgreSQL из реестра российского ПО) изучал вопрос постороения системы, обеспечивающей высокую доступность.

Т.к. задача уже поглотила существенное время, то решил сделать пометки в блог. В последнее время я для себя всё больше приоткрываю мир Open Source и философию UNIX way и тут такое творится.. , как говорится, — «каждый суслик в поле агроном».

Проблема в основном состоит в том, что имеем очень большое разнообразие всевозможных компонентов, модулей, утилит, решений, из которых как из кирпичиков каждый строит себе более сложные конструкции и типа законченные Решения. Но это пол беды. Вторая половина беды заключается в компетенции того, кто это всё собирает воедино, а качество «сборки» прямо пропорционально этой компетенции и в итоге … «чем больше шкаф, — тем громче падает»…

Из коробки ни PostgreSQL ни PostgresPro не предлагают решений по обеспечению высокой доступности СУБД (к слову, у PostgresPro редакции Enterprise всё же есть высокодоступное решение, но оно по факту ограничивается одной базой данных.. Извините, но это, на мой взгляд, не серьёзно для Enterprise уровня.) ни собственными средствами ни рекомендованными примерами решений.

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

Протестированные решения:

  1. PostgresPro в Microsoft Windows Server Failover Cluster = работоспособно
    СУБД
    PostgresPro (редакции Standard, Enterprise) (тестировалась версия 13).

    Операционная система
    Windows Server SE\DE (тестировалось на версии 2016, но уверен, что подойдет любая, начиная с Windows Server 2008 R2).

    * Данная конфигурация вполне работоспособна, — подтверждаю лично.
    * Это по сути полный аналог старой доброй классики — кластеризованного экземпляра (Failover Cluster Instance) SQL Server.
    * Да, тут нужно будет всё вручную сделать — создать кластерную группу ресурсов, учетку компьютера в домене, сетевое имя, сетевой адрес, сервис PostgresPro, диски, зависимости.
    * PostgreSQL также должен заработать в такой конфигурации, т.к. по сути разницы никакой.
    * Есть ещё вот такая отсылка к компетентным товарищам — https://postgrespro.ru/list/id/006c01cd8c6f$bd274ba0$3775e2e0$@devshock.com .
    * ну и от себя добавлю (получено опытным путём): у роли «generic service» включите опцию «Run this resourcein separate Resource Monitor», это предотвратит сбой сервиса при отработке отказа и переключении с узла на узел. Причина сбоя пока мне не ясна до конца, вопрос ждёт своего исследователя.. 

  2. (PostgresPro + Patroni) * AstraLinux = работоспособно
    СУБД
    PostgresPro (редакции Standard, Enterprise) (тестировалась версия 14.1 для AstraLinux CE Orel)
    или PostgreSQL (в дистрибутиве AstraLinux CE Orel присутствует версия 9.6).

    Операционная система
    AstraLinux Common Edition Орёл (Debian например, не рассматривается в принципе, т.к. не в реестре отечественного ПО) — использовалась для всех ролей и компонентов Решения, включая для машины под Ansible.

    Система управления конфигурациями Ansible
    Ansible
    Ansible 2.7.7 Входит в состав AstraLinux.

    Решение по обеспечению высокой доступности
    Изучив актуальные в данное время решения и практики по обеспечению высокой доступности для PostgreSQL я остановил свой выбор на решении Patroni и в частности на набор Ansible playbook «PostgreSQL High-Availability Cluster» для автоматизации развёртывания всего решения в целом.

    Компоненты высокой доступности:
    # Patroni — это шаблон, чтобы создать собственное индивидуальное решение высокой доступности с использованием Python и — для максимальной доступности — распределенного хранилища конфигураций, такого как ZooKeeper, etcd, Consul или Kubernetes.
    MIT License.
    Используется для автоматизации управления экземплярами PostgreSQL и автоматического переключения при отказе.

    # etcd — это надежное распределенное хранилище ключей и значений для наиболее важных данных распределенной системы.
    Apache License 2.0
    etcd написан на Go и использует алгоритм консенсуса Raft (https://raft.github.io) для управления высокодоступным реплицированным журналом. Он используется Patroni для хранения информации о состоянии кластера и параметров конфигурации PostgreSQL.

    Компоненты балансировки нагрузки:
    # HAProxy — это бесплатное, очень быстрое и надежное решение, обеспечивающее высокую доступность, балансировку нагрузки и проксирование для приложений на основе TCP и HTTP.  Входит в состав дистрибутива AstraLinux.

    # confd управляет файлами конфигурации локальных приложений, используя шаблоны и данные из etcd или consul.
    MIT License
    Используется для автоматизации управления файлом конфигурации HAProxy.

    # Keepalived предоставляет виртуальный высокодоступный IP-адрес (VIP) и единую точку входа для доступа к базам данных.
    GNU General Public License v2.0
    Реализация VRRP (протокол резервирования виртуального маршрутизатора) для Linux. В нашей конфигурации keepalived проверяет статус службы HAProxy и в случае сбоя делегирует VIP другому серверу в кластере.

    # PgBouncer — это пулер подключений для PostgreSQL.
    ISC License https://github.com/pgbouncer/pgbouncer/blob/master/COPYRIGHT
    Если планируется что к базам будет много (>500-1000) одновременных подключений, то необходимо использовать пулер соединений, т.к. PostgreSQL на каждое соединение создает отдельный процесс и общая производительность СУБД начинает деградировать.

    # vip-manager — обеспечение единой точки входа (VIP) для доступа к базам данных.
    BSD 2-Clause «Simplified» License https://github.com/cybertec-postgresql/vip-manager/blob/master/LICENSE
    Данный компонент используется для сценария, когда HAProxy в Решении не используется.
    Сервис, который запускается на всех узлах кластера и подключается к DCS. Если локальный узел владеет лидером-ключом, vip-manager запускает настроенный VIP. В случае аварийного переключения (failover) vip-manager удаляет VIP на старом лидере и запускает его соответствующий сервис на новом лидере. Написано на Go. Cybertec Schönig & Schönig GmbH https://www.cybertec-postgresql.com

    Дополнительные компоненты:
    # Ansible Role: Firewall (iptables)
    MIT License
    Штатный в AstraLinux брандмауэр ufw выключается, взамен ему настраивается Ansible Role: Firewall (iptables).

    Дополнительные материалы:
    Позже, планирую тут добавить информацию по настроенным Ansible playbooks под развёртывание с учётом нюансов СУБД PostgresPro и AstraLinux.

    Если это хоть кого-то заинтересовало, то можете мне поддать пинка в комментариях, чтобы я не затягивал :).

Рубрики:PostgreSQL

PostgreSQL. Настройка (заметки)

Инструменты:
* CYBERTEC PostgreSQL Configurator — link
* PGTune (https://habr.com/ru/post/217073/) — link
* postgres-checkup — automated PostgreSQL health checks — link
* Explain PostgreSQL (анализ Планов запросов) — link

Исследования:
* Автономное будущее СУБД — https://habr.com/ru/company/oleg-bunin/blog/456580/

Рубрики:PostgreSQL

Отказ от дефрагментации индексов, если база данных размещена на SSD накопителе

Очень давно ждал подобную статью и дождался.

«Отказ от дефрагментации» , https://blogs.msmvps.com/gladchenko/nodefrag/ , — статья обязательна к прочтению для администраторов баз данных, обслуживающих базы данных, размещаемые на SSD накопителях.

Доп.материалы:
* https://habr.com/ru/post/576882/
* «SQL Server Index Fragmentation on SSD. Фрагментация индексов и SSD диск» https://www.youtube.com/watch?v=sBEHBq-wKiI

Рубрики:SQL Server, SSD

Марсоход Perseverance. Прибытие

Марсоход NASA Perseverance (Настойчивость) приземлится на Марсе 18 февраля 2021 года в районе кратера Jezero.

Perseverance будет искать признаки древней микробной жизни на Марсе, собирать и хранить марсианские камни и реголит (битые камни и пыль), охарактеризовывать геологию и климат планеты и подготавливать почву для исследования Красной планеты человеком.

Видео посадки на поверхность:

Рубрики:Space

Результаты нагрузочных тестов одного сервера 1С+СУБД

Без прелюдий, сразу к делу.
Довелось проектировать сервер под размещение ролей сервера Приложений 1С Предприятие и Microsoft SQL Server с использованием выдающегося аппаратного обеспечения. Результаты тестов впечатляют.

Результаты нагрузочных тестов (сервер одиночный, локальная дисковая подсистема):
1. Нагрузочный тест дисковой подсистемы (DiskSpd):
— «C». RAID1 на двух накопителях HDS-X2A-XS400ME70004 Seagate Lange 400GB SAS 12Gb/s 10DWPD SSD

— «T». Одиночный накопитель, не в RAID, HDS-IUN0-SSDPE21K375GAX Intel 3D Xpoint DC P4800X 375G PCIe3.0 2.5″ 30DWPD

— «D». Intel VROC RAID1 на двух накопителях HDS-IUN0-SSDPE21K375GAX Intel 3D Xpoint DC P4800X 375G PCIe3.0 2.5″ 30DWPD

— «L». Intel VROC RAID1 на двух накопителях HDS-IUN0-SSDPE21K750GAX Intel 3D Xpoint DC P4800X 750G PCIe3.0 2.5″ 30DWPD

— «K». Intel VROC RAID1 на двух накопителях HDS-IUN0-SSDPE21K015TA Intel 3D XPoint DC P4800X 1.5TB PCIe3.0x4 2.5″ 30DWPD

2. Нагрузочный тест TPC-1C:
— каталог сервера Приложений 1С Предприятие и профиль пользователя, под которым запущен сервер 1С Предприятие, размещены на томе «D»;
— том «C» под ОС Windows Server, тома T, K, L под SQL Server;

Рубрики:Hardware, SQL Server

Полёт над поверхностью Луны на высоте 100 км

Ролик выложили на YouTube-канале Sean Doran. Видео создано из множества снимков, сделанных миссией «Кагуя».

Источник:
https://www.obozrevatel.com/tech/science/poyavilos-video-poleta-nad-lunoj-na-vyisote-100-km.htm
Появилось видео полета над Луной на высоте 100 км — Alpha Centauri (thealphacentauri.net)

Рубрики:Space