Заинтересовался докладом с PGConf.Russia. И решил сделать статью по этому видеокурсу. Для начала немного о Patroni. Patroni - это Python-приложение для создания высокодоступных PostgreSQL кластеров на основе потоковой репликации. Оно используется такими компаниями как Red Hat, IBM Compose, Zalando и многими другими. С его помощью можно преобразовать систему из ведущего и ведомых узлов (primary - replica) в высокодоступный кластер с поддержкой автоматического контролируемого (switchover) и аварийного (failover) переключения. Patroni позволяет легко добавлять новые реплики в существующий кластер, поддерживает динамическое изменение конфигурации PostgreSQL одновременно на всех узлах кластера и множество других возможностей, таких как синхронная репликация, настраиваемые действия при переключении узлов, REST API, возможность запуска пользовательских команд для создания реплики вместо pg_basebackup, взаимодействие с Kubernetes и т.д. Слушатели мастер-класса подробно узнают, как работает Patroni, получат практические навыки настройки высокодоступных кластеров на его основе, познакомятся с различными дополнительными возможностями и поучаствуют в диагностике проблем. Будут рассмотрены следующие темы:
-
область применения: какие задачи HA успешно решаются Patroni
-
обзор архитектуры
-
создание тестового кластера
-
утилита patronictl
-
изменение конфигурации PostgreSQL для кластера, управляемого Patroni
-
мониторинг с помощью API
-
подходы к переключению клиентов
-
дополнительные возможности: ручное переключение, перезагрузка по расписанию, режим паузы
-
настройка синхронной репликации
-
расширяемость и универсальность
-
частые ошибки и их диагностика
Для полного участия в мастер-классе вам понадобится ноутбук с установленным git, vagrant и virtualbox. Vagrant можно загрузить со страницы https://www.vagrantup.com или установить с помощью пакетов в вашем дистрибутиве. Virtualbox: https://www.vagrantup.com После установки Vagrant и Virtualbox нужно выполнить: $ git clone https://github.com/alexeyklyukin/patroni-training $ cd patroni-training $ vagrant up $ vagrant ssh
После того, как patroni поднимется и установит необходимые пакеты к нему можно подключиться с помощью vagrant ssh.
Александр Кукушкин, Алексей Клюкин разработчики из Zolando по базам данным являются также разработчиками Patroni очень рады использовать эту возможность для того чтобы поделиться с вами нашими знаниями и может быть поспособствовать тому чтобы больше людей спала спокойно используя автоматический failover и используя при этом Patroni ну и мы хотим также рассказать о каких-то дополнительных возможностях которые возможно мы еще не освещали в наших докладах.
Архитектура Patroni и автоматический failover Для начала мы не будем рассматривать архитектуру Patroni, а сделаем широкий взгляд на high availability (высокодоступные) решения чтобы делать PostgreSQL высокодоступным. Давным давно существует разделяемые хранилища - это может быть либо какое-то сетевое хранилище когда вы выделяете раздел и монтируйте его на сервер и при падении мастера это хранилище просто перемонтируется на другой сервер и там запускается PostgreSQL. Как правило такие хардварные решения они достаточно дорогие поэтому люди используют предпочтительней drbd + lvm. Для того чтобы в таком случае переключать мастер используют corosync pacemaker. Это тоже это очень сложная система. Люди очень часто делают ошибки в настройках corosync pacemaker. Основная проблема pacemaker в том то что большую часть времени он работают. Люди постепенно забывают как с ним управляться, как он настраивается. В какой-то момент что-то идет не так. В этот момент вы понимаете, все знания уже утеряны. Непонятно что делать. Логическая репликация или репликация основанный на триггерах примерно на самом деле это одно и то же. Логическая репликация появилась в PostgreSQL в десятой версии. Это совсем недавно, около полугода назад всего, но никакой большой разницы между триггер-based репликации или логической репликации по сути нет. У них есть свои плюсы и минусы. Но главный минус в том то что как правило при использовании такой логической репликации вы реплицируется только данные. У вас не реплицируются какие-то служебные объекты такие как роли, юзеры. Реплицируются только какие-то отдельные базы либо таблицы, то есть не реплицируется кластер целиком. К счастью, в 2009 году появился PostgreSQL 9.0, в котором появилась физическая (потоковая) репликация, которая позволяет кластер реплицировать один в один и как правило все решения по high availability строятся на физической репликации. Многие думают что с появлением мульти-мастера у них просто эта проблема отпадет, потому что у вас будет много нод каждый нода сможет принимать данные на запись. В данный момент это можно реализовать с помощью BDR или Bucardo, но это обычно не то что люди хотят. Поскольку и BDR и Bucardo также реплицируют исключительно данные, они не реплицируют никаких служебных объектов базы. Вам в том числе при таких решениях необходимо каким-то образом настраивать разрешение конфликтов. Потому что две ноды могут затрагивать один и тот же объект и не всегда понятно каким образом и в каком порядке эти изменения должны быть применены. Конечно, там можно настраивать эту стратегию, но никакой стратегии по умолчанию невозможно придумать, которое бы удовлетворяло всех.
Поэтому большинство решений по high availability всегда строятся на потоковой репликации.
Какая в этом проблема? Сама по себе потоковая репликация не является полным решением высокой доступности потому что нет никакого встроенного решения, который бы позволил перевести standby в режим нового мастера, если что-то произошло со старым мастерам. Конечно, в том числе у этого решения есть такой очень глобальный недостаток, что потоковая репликация работает только на той же самый мажорной версии.
Первое что люди пытаются делать - создают primary и standby базы, которая будет получать данные через потоковую репликацию. Пишут скрипт, который будет периодически запрашивать состоянии мастера и при условии что мастер недоступен мы будем превращать стендбай в нового мастера. Кто знает что здесь может пойти не так?
Мы живем в реальном мире к сожалению и поэтому сеть тоже не идеальны. Могут быть какие-то короткие всплески недоступности, то есть по факту с мастерами ничего не случилось он до сих пор работает. Он обслуживает соединение клиентские все хорошо. Стендбай каким-то образом оказался изолированным.
У нас получается два мастера - это так называемый сплит brain.
Поэтому есть другой подход к решению данной проблемы. Мы будем принимать решение о переводе стендбай в новый мастер с помощью 3 сервера. Как вы думаете что здесь может пойти не так? Во-первых, этот сервис тоже может сам по себе исчезнуть. Мы живем в реальном мире. Железки имеют обыкновение иногда сгорать, глючить. В этом случае мы теряем автоматический failover. C одной стороны ничего критичного. Мы можем поднять. Но с другой стороны что может произойти. В момент когда нода, которая принимает решение недоступна у нас может отказать мастер. И никто его не переключит. Никто не даст команда в реплике переключиться. Есть еще одна ситуация. Может так оказаться что мастер и стендбай оказались в разных сегментах сети. Нода, которая принимает решение может оказаться в том сегменте где у нас находится стендбай. Нода понимает что мастер у нас недоступен. Хотя мастер живой и обслуживает соединение. Нода принимает решение перевести стендбай в новый мастер. И опять мы получаем тот же самый split-brain.
И потихоньку мы подходим к способу так называемому современному и правильному определение кто является ли мастера и реплика живыми это можно сделать только при условии что у нас есть нечетное количество нот который проводит голосование в данном случае у нас есть три ноты если две ноты соглашаются о том что у нас праймари недоступен то эти две ноты и являются у них у них есть большинство голосов два из трех это большинство четное количество почему не рекомендуется использовать в принципе в этом ничего страшного но для того чтобы получить бы большинство из четырёх нот должны проголосовать 3 согласиться с результатами выборов конечно же очень важно и является убить старые соединение мастеру для этого как правило либо выполняется стонет это по-русски будет пристрелить другую другую ноду в голову корм позволяет нам решать сложные задачи разрешения партиции рования сети как даче как и какой-то сегмент сети недоступен то другой другие несколько сегментов могут принимать решения за изолированный сегмент в этом случае должен остановить 2 мастера и очень хорошо иметь watch dog это такой либо аппаратный либо программный комплекс который позволяет перезагрузить ноду при условии что наш сервис не отвечает например если что-то произошло с Patroni to watch dog не будет получать периодических сигналов пингов и просто перезагрузить ноду это тоже такой способ закрытия сервер и потому что мы не должны оставлять мозга раз работать сам по себе и потихоньку мы приходим к так называемому подходу бота который был придуман ребятами из компас в данный момент композ является одним из подразделениям или в общем компост был куплен обеим то есть это достаточно большая компания идею в том то что мы рядом с каждым пол сбросом на каждой ноги запустим специального демонов который будет заниматься тем что управлять нашим инстанциям подбросы случае если все хорошо и у нас есть доступ к какому-то распределенном у хранилищу где мы можем периодически обновлять лог том данные ноду может работать как мастер либо если у нас блока нет то надо будет работать как реплика и вот общем-то занимается многими вещами но основная его задача следить за тем то что у нас по сгрыз работает либо в режиме мастера он был обязан быть один и только один либо в режиме реплики и вот как все у нас происходит здесь на картинке у нас есть нода а который является текущим мастером она периодически от отправляет в эти сиди запрос на обновление ключа лидеры она это делает по умолчанию с периодом раз в десять секунд и что важным у ключа лидера есть так называемый тел это время в секундах которые частички папа по истечении которого ключ пропадет то есть если у нас но да вдруг что-то случилось нашей но дай и она не будет обновлять ключ лидера и потихоньку мы придем к ситуации когда ключ лидеры исчезнет и две оставшиеся ноды ну или любое любое количество там может быть одна но да они получат оповещения о том то что лидера нет согласны эти сиди и мы должны провести новые выборы как они это делают каждую но до обращается ко всем другим нодам включая старого stars старый исчезнувшей мастер потому что вдруг это было какое-то какие-то временные проблемы вдруг он там до сих пор еще жив нам надо убедиться в этом и каждый но до сравнивает позицию волн в рай то hotlog по сравнению со своей при условии если надо является впереди всех остальных ну или хотя бы не не отстаёт как в данном случае в обоих реплик оказался в позицию равен 100 то они начинают гонку реальную гонку за лидеров за лидером то есть они отправляют запрос на созданию нового ключа лидером в эти сиди и в чем прелесть эти сидит а что он позволяет такие вещи делать атомарного то есть одна но до когда создала ключ-то 2 но до при условии что что что мы запрещаем перезаписывать уже существующей ключ и воссоздать не сможет и вот здесь мы на этом слайде видим то что надо c выиграла она успела сказать лишь лидера но до б не смогла и в результате мы получаем что но dc становится новым мастером она выполняет про mode для подвеса но до b становится новой репликой который будет уже реплицировать не с ноды а которая недоступна а смотрится и немного про эти сети это конечно не нее не является главной темой нашего мастер-класса но патроним очень сильно зависит от таких дистрибьютор can since this top таких как эти сиди консул жуки пир в том числе мы можем использовать оберните сопи эти сидя построен на алгоритме ровд и для его функционирования ну мы должны иметь больше двух нот лучше 3 или 5 и вот по этой замечательной ссылке вы можете поиграть с тем как эти сидел внутри себя выполняет лидер election каким образом он определяет какая из нот является ведущей какие ноты являются реплики и позволяет разрешать в том числе любые проблемы сети и сети которые когда у нас одна сеть становится недоступна по отношению к другим на торг пар тишину извините пожалуйста не знаю как по-русски это сказать на и Patroni собственно говоря имплементировать такой шаблон бота он Patroni написан на питоне и в основном разработкой занимаемся мы в zalando но в том числе у нас очень много других разработчиков в основном это какие-то мелкие патч исправление проблем иногда документация но большую помощь нам оказывают один из сотрудников сайбер так это очень известная компания которая занимается консалтингом разрисован они в том числе тоже используют ее поподробней для своих клиентов так что мы не единственный пользователь а сейчас мы перейдём собственно это была присказка а сказка будет сейчас мы сейчас перейдем к тому что создадим наш первый Patroni кластер возможно для некоторых людей это будет не первый но в любом случае мы покажем что это достаточно просто создать хай вода билетик ваш штор для этого требуется всего несколько команд этот сайт который был изначально это если вы хотите следовать за нами то вас уже на компьютере должен был поставлен vagrant у вас должно быть virtual виртуальная машина и вы должны можете сделать vagrant ssh туда и получить собственно выполнить команды из суда по сброс и там будет конфигурация Patroni поднимите руки кто хочет за нами следовать и кто может замечательно мы сделаем так если если у вас будут какие-то затруднения то есть если вы выборе выполните те команды которые я выполню здесь я надеюсь что те команды которые выполнишь здесь приведут к тому результаты которые есть на слайдах но если у вас будут какие-то затруднения вы получите другой результат вы можете поднять руку и саша к вам подойдет и попробует помочь вам решить эту проблему я не буду спешить я в данном случае буду ждать и мы попробуем вместе получить наш первый файл выберите Patroni квартиры потому что это просто и я хочу показать вам что это просто да еще один вопрос кто из вас уже запустила ground up и дождался окончания это замечательно с лично успешного окончания хорошо хорошо собственного я буду показывать слайды как оно должно быть и буду показывать экран если вы сидите так что вам и кран не виден то вы в принципе можете пересечь если бы чуть-чуть поближе либо чуть чуть подальше потому что транслирует трансляция идет так же на вот эти вот два монитора собственно говоря запуск Patroni это очень просто в нашем в нашей машине vagrant а уже запущен этой сети поскольку это локальная виртуальная машина там запущен всего 1 инстанции ты сиди на продакшен квартирах естественно вы запускаете три и больше инстанции эти сиди потому что вся идея эти сиди в том чтобы хранить информацию о состоянии кластера и ключ лидер и это вот как раз та система которая должна быть постоянно доступна поэтому пожалуйста не запускайте 11 о продакшене потому что если он упадет то никакого ability не будет Patroni перейдет в режим только чтение собственно говоря мы переходим когда мы стали по скоростному пользователям позже раз мы перешли в каталог Patroni у нас там есть три конфигураторе ямал файла откуда мы взялись я могу файлы эти ямы файла мы взяли из с гитхаба поскольку Patroni это open source проект то на гитхабе выложенные вы исходные коды и в том числе тут есть вот вот эти вот я могу файлы мы их не придумывали из головы мы просто взяли их вот как они есть здесь есть если вы сделаете git клон Patroni то вы в принципе тоже сможете это повторить на локальной машине если у вас есть питоны все зависимости просто виртуальной машине те зависимости уже установлены вот собственно моя машина есть два разгруз а я перехожу каталог Patroni я уже здесь и собственно запускаю python разгрыз патроним нет не поэтому потом не просто Patroni сгрыз 0 ямал ну ты как интересно вот так файл это импорт концу так . что же у нас месяце дион да есть нам надо установить python от сиди там потому что последних версиях при установке надо указывать текст а тогда python да прошу прощения у меня на оказалось старой версии виртуальной машины там не установлен python и т.д. поэтому попытка Patroni соединиться cassidy оно ни к чему не привела дай мне нужен судили давайте перейдем крутом так если кому то нужна помощь и не стесняйтесь поднимите руку попытка номер 2 от тронет так вот бриз яму да нам нужно перейти в каталог Patroni отлично вот я запустил первый узел Patroni первый узел Patroni увидел что квартира у нас еще нету и инициализировал мастер уже он запустил и не тебе и нигде by отработал вот есть вывод и не тебе и он нам показал в конце концов что мы инициализировали новый квартир и вот он мог элмер то есть я вот этот вот узел который на котором это запустили у него есть лак то есть у него есть индикация что он лидер и он об этом говорит local не разгрыз и по сгрыз 0 я по сгрыз 0 все хорошо я работаю как мастер теперь давайте сделаем то же самое со вторым углом мы запустим python взгляд один я был что произошло со вторым узлам второй узел нашел exedy сервер нашел что кластер уже создан у него уже есть лидер и в эти сиди уже есть информация про то что кластер создали поэтому вместо того чтобы запускать и нигде беги стать мастером он естественно запустил печи bs backup это утилита по сброса которая позволяет вам создавать реплики и создал себя в качестве реплики вот он себя создал и после этого попытался стартовать по сгрыз он ждет пока позы стартует это может занять некоторое время после чего он сказал что я не могу получить вал файлы с мастера почему он не может до вас вот он сказал что он не может получить файлы с мастера почему это происходит то есть мы сделали реплику все хорошо Patroni и настроил дело втом что Patroni создает слот репликации для каждой реплики кто из вас знает что такое света репликацию для тех кто не знает в подгрести для потоковой репликации есть возможность сохранять те изменения которые должны быть переданы на реплику то есть в нормальном случае если вы не создадите слот и ваша реплика будет погашена по каким то причинам то через определенное время мастер возьмет все в файлы которые у него накопились и а трассирующих и если реплика после этого подключиться к квартиру то она запросит вал файлы которых на мастере уже нету & replication будет невозможно вам для этого придется перенеся лидировать реплику салаты репликации были созданы в плоскости как раз для того чтобы решить эту проблему то есть когда у вас есть сад репликации то этот слот по сути говоря накапливает в себе изменения и не дает по сбросу эти изменения эти вау файлы от ротировать и как только вы подключаете реплику она подключается к этому свету и все файлы передаются у этого способа есть также и недостаток потому что если ваша реплика потушено asot создан то никто эти вал файлы не проигрывает они накапливаются на мастере и они будут накапливаться пока у мастера не закончится место поэтому в Patroni есть возможность выключить сваты репликации но мы настоятельно рекомендуем ими пользоваться потому что это избавляет вас от проблем когда вы нам вам нужно ненадолго потушить реплику и после этого включите ее обратно собственно говоря что здесь происходит он сказал что он не может включить с тремя реплики репликацию потому что Patroni ещё не создал слот на мастере Patroni смотрит на список реплик которые подключились и для каждой реплики создается вот через некоторое время вот мы сейчас чуть-чуть подождали здесь и вы видите что эти ошибки прекратились эти ошибки выдаются не подробней ошибки выдается под курсом то есть видите он попытался подключиться к салату под названием по сброс 1 а под газ один это имя нашей реплики и у него не получилось до определенного момента пока Patroni все-таки не создал слот и после этого репликация пошива нормально то есть вот это вот сообщения показывается на реплики она говорит что реплика что мастера лаком завладел по сгрызть 0 а я пас газ 1 то есть я соответственно не мастер я реплика у меня нет пока я не предпринимаю никаких действий а действия в данном случае могут быть промоушен потому что я следую за мастером у кого кого у которого есть урок и дальше Patroni будет это показывать периодически данном случае достаточно часто вот и на мастере и на реплики то есть он будет подтверждать каждый раз что здесь он показывает я мастер здесь Patroni показывает я реплика собственно у кого получилось довести это до конца поднимите руку пожалуйста ago 2 человека а у остальных какие проблемы тоже нету поэтому эти сети давайте я прошу прощения давайте сделаем это я покажу ещё раз если нужно эту команду я создам новую консоль то есть что вам нужно это зайти в сравни тренинг зайти в vagrant ваши и сказать pip install python эти сиди вот это вот вот это вот команда она установит эти сиди модов для python а после чего вот те команды которые я сделал для запуска Patroni а не увенчаются успехом Patroni найдет эти сиди и сделает кластер не получается давайте посмотрим новый я просто уже поставил этот модуль какую ошибку он выдает давайте сейчас мы сделаем следующим образом так я пока оставлю вот этот слайд это сайт на котором показаны успешное завершение и сейчас тоже помогу некоторым из вас для того чтобы это все закончилось буквально но я думаю что нам нужно 35 минут так я вижу что в некоторых случаях есть проблемы с установкой пойду на 10 мы можем эти проблемы решить чтобы сейчас не задерживать время давайте мы эти проблемы решим в перерыве между двумя частями этого мастер-класса потому что нас будет пятнадцатиминутный перерыв на кофе и я попробую и саша попробует помочь вам для того чтобы разрешить эти проблемы сейчас мы пойдем дальше кого-нибудь до удалось ли не если у кого-то не работ не отработает они дебита возможно вам нужно поставить локаль в общем давайте эти проблемы решим в перерыве сейчас пойдем дальше то есть я показал вам как создать квартир Patroni и кластеру нас создан он работает вот показан мастер показано реплика что мы сделаем дальше это мы возьмем утилитку которое называется патрон не сидел Patroni сетей предназначено для контроля Patroni контролить Patroni control в данном случае мы посмотрим на состояние нашего кластер а как мы это сделаем мы откроем еще одну консоль с опять зайти так захожу в Patroni и говорю patrol не посетил указываю конфигурацию одного из узлов из этой конфигурации он достанет имя кластером можно альтернативно указать ему имя квартиру и указываю команду которую я хочу выполнить лист и что я получаю я получаю вот такую вот табличку в этой табличке указано название квартира указано название узла разгрыз 0 или пост диск 1 указан хвост на котором находится в данном случае того колхоз и очень важно указано ролик то есть мы видим что у нас квартир живой все хорошо у нас есть один лидер и указано также состояние по сброса то есть по сгрыз запущен на обмен на обоих узлах последняя колонка это если у нас есть реплика она может отставать от мастера по разным причинам потому что реплика медленная потому что сеть потому что на мастер большая нагрузка если у нас есть отставания Patroni это отставание измеряет и показывает вам в виде вот утилитки Patroni через утилитку патрон несите в отдельной колонке сейчас мы видим что у нас никакого отставания нету потому что в общем на квартир никакой нагрузки нет но в общем то то что я вам показал это ни разу не автоматический файла мир правильно это просто как инициализировать квартир с точки зрения Patroni что я вам хочу показать это как Patroni реализует автоматически файлами и но собственно есть терминология есть свеча вверх есть файла мир то есть с вечера и я думаю что на русском это будет переключение узлов это когда вы сами решаете переключить мастер на какой-нибудь другой узел в то время как файла бар или на русском аварийное переключения это когда от вас ничего не зависит ваш сервер сгорел мортир или с ним что-то случилось не хорошая и вы хотите чтоб Patroni переключился собственно мы покажем вам имена файлов и для этого что мы сделаем мы возьмем и остановим Patroni на мастере и дамы не не задний остановим Patroni специальным образом так мы не сделаем келп отраву не потому что если я сделаю его Patroni вот так же остановит по сбросу вместо этого я сделаю control же то есть переведу подробнее в the ground решим и она становится давайте попробуем это сделать вот мой лидер я нажимаю control и вот и я его остановил вот моя реплика что происходит с репликой показ ничего не происходит почему с ней ничего не происходит потому что пока еще у Patroni есть режим лидера то ему пока еще в эти сиди находится ключ лидера он еще не успел не успел раза x париться то есть пока что он там есть пройдет некоторое время для того чтобы он при 30 секунд в данном случае при дефолтные конфигурации до 30 секунд это контролируется специальным параметром тайм ту лив детей но это все настраивается вот мы см и вы можете поставить я расскажу чуть чуть позже там есть некоторое соотношения между разными параметрами Patroni ну вы можете поставить его и восемь секунд и 10 секунд и может быть меньше вам просто нужно соблюдать баланс между тем как ваша сеть падает и поднимается и тем насколько надежно вы хотите сделать файл умер но честно говоря я бы не рекомендовал делать этот параметр сильно меньше чем 30 секунд собственно что мы видим вот это последняя 1131 сообщения в 33 секунды что случилось дальше дальше случился вот такой вот волне в логах Patroni сказал request right то есть нельзя не получилось сделать вот такой вот get request что это такое Patroni попросту попытался увидел что локо в эти сиди больше нету и поставь попытался постучаться на мастер когда блок теряется Patroni стучится на все узлы которые известны в кластере Patroni на каждом узлов стучится на каждой другой и спрашивает у этого узла во-первых мастер летали а во вторых если он не мастер позицию вала то есть насколько этот узел ближе к мастеру и вот то что мы видим у нас было два узла и он попытался спросить у мастера доступен ли ты и мастер был ничего не ответил потому что мы потушили Patroni на мастере и после того как это случилось он принял решение сделать себе промоушен то есть стать после этого лидером вот видите промоутеров талер бак вопрос сейчас это порядка 2 секунд то есть он для каждой ноты там порядка 2 секунд тратит что получить оттуда ответ но он все все ноды опрашивают параллельно до некоторое время он ждет пока не ответит мастер после этого дела и тебе промоушен вот вы видите да нет не обязательно как правило лучше просто иметь отдельный кластер он не очень ресурсоемкие эти сиди то есть принципе у него основное требование не николич небольшое количество память небольшое количество процессоров ему нужны только быстрые диски что моим писал данные в данной конфигурации это просто иди демон то есть у нас здесь всего одна эти сиди но да как бы то есть только для того чтобы Patroni работал в принципе это как говорится вы сами можете решать вы можете иметь две ноты на которых будет работать по сбросу плюс на каждый из них будет работать эти сиди имейте какой-нибудь 3 сервер как на котором будет исключительно 1 но дайте сидит сейчас по факту нас в этой виртуальной машине работает и эти сиди и 2 Patroni и 2 полоса да просто потому что это проще для дома поможете нет если один эти сиди упадет это в некотором смысле является точкой отказа если вы его не восстановите если у вас эти сети работает независимо от по сброса то два эти сиди сервера по-прежнему выполняет свою функцию то есть вот просто это ваша задача что если один из эти сети серверов отказал то что надо быстренько его поднять до вопрос был что произойдет с этих идей если наверное не сплит брейна network портишь нет то есть когда один из узлов оказывается изолированным эти сиди сам по себе у него тоже есть лидер не он сам выбирает лидера если в этой части сети который оказалось изолированным изолированный был лидер то две оставшиеся два оставшихся сервер выбирают нового лидера и соответственно новый лидер будет находиться вот в одной из двух оставшихся сетей старый лидер нет он он он он начнет перевыборы потому что он поймет то что две других модах недоступны но при этом не какая запись на через вот эту старую лидера не будет возможно так давайте сейчас может быть отложим чуть-чуть дальнейшие вопросы мы можем пообщаться так же и в перерыве и вот этот вот узел который мы только что оставили то есть оставшиеся в живых Patroni он сделал себе промоушен и дальше он работает как лидер говорит я лидер у меня и севок я пас грэс-1 и все хорошо теперь мы сделаем очень интересную вещь в банке что она по сгрыз 0 узле мы остановили Patroni мы остановили Patroni но позволь что там еще работает и потом сейчас работает в режиме мастера мы сделали специально потому что в реальной жизни как правило могут данные какие-то быть не реплицировать мы этот пояс оставили только для того чтобы сделать так называемый небольшую небольшой сплит brain совсем небольшой тут у только для во вторых дыма картинка сейчас такая у нас есть бывшая реплика которая сделала промоушен и стала мастером у нас есть бывший мастер который вот так вот и осталась работать мастером потому что мы потушили на нем Patroni сейчас мы возьмём на бывший мастер и запишем какие-то данные таким образом сделав искусственный спред brain а потом вы посмотрим как Patroni будет бороться с этим сплит и нам что мне для этого нужно мне для этого просто нужно создать таблицу я вот создаю таблицу которая называется сплит brain и вот интересная возможность возгласе можно создавать таблицы вообще без какой-либо колонки без небе с нулем kavanagh но этого достаточно теперь я создал таблицу и теперь самое интересное я возьму тот Patroni который у меня сейчас остановлен и скажу ему продолжать свою работу пришло так мы здесь должен быть хайграунд процесс один мы поставили процессы мы поставили Patroni на фа браун то есть на запускаться его как как основным процессом и вот что получилось вот он сказал что внезапно он увидел что он мастер и уже существует мастер и что он сделал он сделал где могут по сбросу как насколько настолько быстро насколько возможно начнем сказал позвонок сделай мидер шандон то есть прямо сейчас без всяких прелюдий и пускай сделаем идет shutdown это вот такой вот полу панический shutdown то есть он просто убивает все процессы которые у вас есть и мы итак а вот как раз сейчас видим он запусти он остановил базу данных и потом сказал да я себя я сделал de mode то есть 10 обратно promobud.ua потому что у меня нет локон вот и после этого он сейчас стартовал под гараж он делал так называемый крыши recovery потому что имиджа down это не является чистой остановкой базы и он препятствует тому что препятствует педигри войну и поддерево нет откажется работать с кластером который у которого не было чистой остановки поэтому мы запускаем так называемым краше recovery mode single user мод ничего не делаем просто он запускает его single user останавливает после этого запускает виде реван потому что Patroni знает то что там старый мастер был немного впереди нового мастера как когда произошел про мол то есть мы запустились в краше и кавери сейчас немножко раньше он проверил touch когда он запустился он проверил свои свой timeline то есть свою позицию вол хавал сегмент и он проверил вал сегмент мастера и он нашел что произошел с плит brain потому что он реплика но он ушел вперед от мастера потому что мы вот сделали вот это корейцы бушприт brain и он принял решение запустить perego young кто его знаешь такой perego young отлично это такая утилитка в позу россия тоже кратко остановлюсь которая позволяет предыдущему мастеру подключиться как х реплика и перемотать обратно все те изменения которые не попали на текущий мастью то есть он грубо говоря перематывает до того момента когда произошел разрыв между мастером и репликой когда собственно существующей мастер он сделал про mode вот и мы здесь это вот увидим вот он написал ранен печоре wine from по сброс один поджаривает написал что до был сплит brain что мастер и реплика разделились вот в такой позиции сказал что мы сделали rewind написал дан и теперь мы можем увидеть что старый мастер подключился как реплика он говорит что мастер по фгос 1 а я по сгрыз 0 т.е. в данном случае мы увидели что несмотря на то что произошел сплит браян сплит дуэйн произошел потому что мы остановили Patroni если бы мы не останавливали Patroni никакого сплит браяна не было несмотря на то что это произошло мы все равно смогли разрешить эту ситуацию автоматически то есть Patroni смог запустить найти что у нас 2 мастер быстро его остановить после этого запустить его как реплику сделать ему perego young и включить его в кластер теперь мы можем посмотреть снова на результат работы утилиты патронника поверь и здесь мы теперь увидим картину которая похожа на предыдущую только лидер у нас переключился на пост 1 раньше он был возглас но сейчас он пас грэс-1 но соответственно по сгрыз 0 и у нас тоже есть он работает нормально он является репликой и он совершенно не отстают то есть таким образом мы показали вам симулировали файвер и показали что Patroni может этот ковер успешно разрешать смысле он может успешно разрешать такие ситуации да пожалуйста вопрос был что случилось с этой таблицей которую я вставил этой таблице уже нету то есть если я сейчас пойду на мастер то я не найду этой таблице потому что данные со старого мастера от мотались назад и нет мы не сможем получить эти данные но вот произошел шпилит brain и эти данные потерялись вы собственно задач Patroni не допускать подрайонов для того чтобы не получить таких потери данных к сожалению мир у нас реальный иногда репликации прыжку происходит даже с какой-то малейшей задержкой миллисекунды то есть какое то количество транзакций при аварийной ситуации может быть потерянным чтобы избежать потерь необходимо использовать синхронную репликацию и синхронная репликация поддерживается Patroni мы к этому доберемся немножко попозже вот но по большей части люди используют а синхронную репликацию потому что синхронная репликация очень сильно бьет по производительности силиката или теперь что я хочу вам показать это содержимое эти сиди вот та содержимое которая в котором хранятся информация про наш кластер с помощью утилиты с идеей фитиль я могу вам показать что мы храним внутри эти сиди это может быть также консул жуки пер или кубер нет с в принципе структура она одинаковая т.е. у нас есть эти диета такая система ключ и значение то есть у нас есть какие-то ключи и у этих ключей есть какое-то значение вот что вы можете сразу увидеть у нас есть ключ лидера у нас есть ключ для каждого из участников квартира то есть для подвесного линий по сброс 1 у нас есть ключ и ниша лайс который говорит о том что кластер инициализирован и внутри хранится интенсификатор кластера который позволяет подключиться только те мозгам которые являются частью этого кластера т.е. если вы подключите узел который является частью какого-то другого кластер а он не сможет подключиться потому что в этом ключе вы не шалость хранится как раз индификатор и ключ связанные с конфигурации кластера давайте я покажу их на слайдах потому что там немножко выделены немножко лучше выделено то есть вот даже тот же самый результат после этого я смотрю на то что хранится в узле members под gs1 и в этом узле у нас хранится несколько это джейсон в котором хранится несколько важных параметров в частности здесь хранится юрл по которому можно подключиться к этому по сбросу то есть можно подключиться к базе данных по сбросу здесь хранится и пионеров то есть ural по которому Patroni может спросить другого узла Patroni вот тогда когда он делает промоушен он спросит мастер ли ты или нет он использует этот тип я юров для этого здесь хранится состояния базы данных то есть у нас может быть Patroni запущен на узле но база данных еще не запущена тогда там будет не ранее на старте не ли что-то другое у нас хранится роль и у нас храниться текущая позиция x logo для данного или вала для данного узла то есть насколько он сейчас в какой позиции он восстанавливает или создает в у сегменты и также у нас хранится здесь timeline у нас есть несколько других ключей есть ключ history который показывает подробно если вы знаете чтобы time do in history то есть это история грубо говоря промоушенов данного квартира история того как квартир становился из реплики мастером несколько раз то здесь хранится вот эта история и также хранится время когда случился промоушен то есть по этому ключу вы можете например узнать когда произошел последний файл avi следующее что я хочу вам показать то есть у нас есть кластер он работает я хочу показать как можно динамически менять конфигурацию вашего по сброса почему то важно почему это нужно а почему это нужно потому что у вас есть кластер там есть несколько узлов вы можете конечно пойти на каждый из этих узлов и поменять там пожгли сквер гольф или сделать all the system для того чтобы изменить параметры конфигурации но это изменение будет применено только к одному узлу а в реальной ситуации если вы запускаете кластеры с мастером и несколькими репликами то вам очень-очень хочется чтобы конфигурация на этих узлах была идентичной а потому что любой из ваших любой из ваших реплик может стать мастером и вы не хотите чтобы у вас нового мастера параметры такие как shirt bofors например imax connection сильно отличались потому что это повлияет на функционирование кластера собственно что я хочу показать это как отредактировать параметр который называется main dining свеклы мари который делает подсказку планировщику по сбросу о том сколько у нас памяти хранится сколько у нас памяти доступна для запросов для этого я просто для вакуум и для созданием биться до спасибо для этого я создал я возьму патронник отель сделаю вот так вот то есть укажу ему конфигурацию скажу edit конфиг и укажу название кластера да можно даже не указывать не нужно сделать отбор вы должны выбрать ваш любимый редактор то есть вы можете указать в переменный идет арвен или немцы видит или не знаю на но вот собственно сама команда вот она и вот результат и что я хочу сделать так это поставить вот этот параметр maintenance of memory вот я еду в разгар с параметр и выставляю его м и говорю ему 128 мегабайт так у нас да абсолютно так после этого я сохраняю коррозии редактор и сохраняю и патроним не выделяет он говорит вот изменения которые произошли хотите ли вы применить эти изменения и я говорю что я хочу применить эти изменения и теперь мы смотрим на то что случилось с нашими мастерами посмотрим на лидера например вот лидер говорит я получил сикхов это сигнал который говорит который используется под глазом для перезагрузки конфигурации то же самое что почистите и вот я получил sea club и параметрами intence в окне мари поменял свое значение теперь он равен 128 мегабайтами теперь я пойду на реплику я увижу то же самое что я получился клуб и этот параметр встал тоже равен 128 мегабайт то есть мы сделали одно действие на одном узле и результат этого действия стали применять применились ко всему квартиру более того Patroni сделал ли голод за вас то есть вам нужно поменять конфигурацию в одном месте и все Patroni сделает все остальные действия за вас принципе Patroni canpol можно запускать с вашего ноутбука это не обязательно делать на сервере теперь мы сделаем более интересное действие потому что maintenance в окне мари можно менять не перезагружая кластер теперь посмотрим что произойдет если мы поменяем параметр для которого нужна перезагрузка кластера этого мы также запустим edit конфиг только вместо мониторинг memory мы поменяем такой параметр как маркус connections кто знает на что влиять параметра max connections это максимальное количество соединений который может получить ваш пост газ кластер если вы направите на него больше клиентов чем макс connections to wash ваши клиенты получат сообщение о том что у глостера уже слишком много соединений кто знает сумок сканэкс нельзя поставить на реплики меньше чем на мастере а кто знает почему о замечательно расскажите мне а потом не только вал тоже певица собственно говоря макс connections мы сейчас поставим значение 101 и посмотрим что произойдет вот тот же самый вывод макс connections поменялось стала что один apple очень частая который применить результат применить изменения и давайте посмотрим на мастер будет ли на нем что-то показывается то есть он продолжает работать говорит в корпус газ один я пас глас 1 и ничего не показывает как будто ничего не произошло почему потому что для того чтобы изменить этот параметр нужна перезагрузка сброса Patroni не будет за вас перезагружать ваш кластер почему потому что если вы перезагрузите мастер то клиенты которые соединяются с мастером отвалятся и к вам позвонят разработчики и спросят что же вы такое делаете посередине продакшена и зачем вы это делаете поэтому это решение Patroni оставляет пользователю то есть вам каким образом мы можем узнать о том что нам нужно перезагрузить кластер мы можем узнать спросив у самого Patroni как мы можем это спросить мы можем использовать 300 и пиаре у Patroni есть 300 и пиарь который позволяет вам узнать очень много информации про квартир в частности то информация ту информацию которая есть в эти сиде то есть мы сейчас выполним эту команду 808 и что мы здесь видим мы здесь видим вот это реплика да это реплика но на самом деле это не так важно что мы здесь видим кроме того что эта реплика это то что у нас вот такой вот флаг бензин restart включился и стал true type 1 restart это требуется требуется перезагрузка раньше этого флага не было сейчас он стал true и по значению этого флага мы можем знать что для того чтобы все изменения которые были сделаны в конфигурации вступили в силу необходимо перезагрузить квартир если мы пойдем на мастер то мы видим то же самое то есть все узлы ждут пока мы перезагрузим квартир собственно говоря это тоже показано здесь то есть и на том и на том узле у нас есть этот флаг теперь нам собственно говоря нужно перезагрузить этот квартир что мы сделаем мы можем еще пару не control list запустить мы можем запустить Patroni control list для того чтобы увидеть то же самое сначала параметр простите поставить вопрос просто наверное подгрузку l0 является репликой в данный момент все верно это обратите внимание на порты то что мы делали 2 1 теперь запросы один порт был 8008 на другой порт 8000 9 собственно 8008 это позгалев скилл 0 а 8000 9 это подгрузку l1 они просто на разных портах слушают мастер у нас сейчас на разгрузку l1 и вот мы видим порт не 9 собственно вот этот мастер роль мастер так собственно говоря вот патронник отель тоже показывает вам что оба узла нуждаются в перезагрузке что мы можем сделать теперь мы можем просто взять и перезагрузить патронник отель то есть перезагрузить Patroni с помощью команды патронник отель reese старт и нужно указать узел который нужно перестраховать сначала я скажу что я хочу перед стартовать с грейс келли 1 то есть мастер момент разгрузки из него restart и квартирный маток вот здесь у нас есть два квартира он спрашивает какую узел я хочу президент он передо вы можете указать либо из комод из нет он сейчас по спрашивает просто подтверждения вот я скажу ему что я хочу вообще перезагрузить все узлы кластера тают и распространена по сгрыз 2 в продакшн ситуации я могу сначала перезагрузить реплики потом сделать на них на выбор потом перезагрузить мастера были просто перезагрузить мой стрим дальше тут есть различные опцию рестарта которые есть еще на который я сейчас заострять внимание не буду и что у нас получилось мы перезагрузили реплику мы перезагрузили мастер упрощения вот при этом мастер не потерял своего ключа то есть он остался мастером вот и реплика соответственно оставайся репликой реплицируется мастера тех давайте посмотрим получилось ли наша затея с изменения макс connections или нет этого мы подключимся к любому из этих узлов и скажем так уют командочка шоу макс connections видите 101 давайте проверим другую яму тоже 101 то есть мы изменили макс connections мы с помощью Patroni перезагрузили весь кластер и изменения применились если бы мы это делали вручную нам нужно было быть очень аккуратным потому что макс connections на реплики должен быть не меньше чем макс connections на мастере если бы мы макс connections на реплики если бы мы в начале увеличили бы макс connections на мастере оставили реплику неизменной та реплика был нас не смогла реплицировать данные с мастера если бы мы это все делали вручную в случае Patroni нам не нужно об этом задумываться Patroni все делается в крайнем случае если реплика поймет то что макс connections на мастере был увеличен она становится Patroni увидит то что под груз не работает и запустите его с новым макс connections а теперь давайте сделаем да конечно дело в том что restart требует указать имя кластера и например одну ноту и имя одной но да то есть вы можете выбрать как какую воду вы хотите за рестарте до бэтмен это имя кластером то есть если он им не как никаких нот не указывать то он сделает restart для всех нот кластере но в принципе вы можете вот указать какую то конкретную ноду да еще вопрос какие карт параметры кроме макс collections пишутся вол или что или а как какие параметры мы к этому вернемся немного попозже то есть там есть ряд параметров которые обязаны быть идентичными на всех углах мы вернемся у нас все это есть давайте не забегать вперед чуть-чуть теперь что я хочу показать Patroni работает хорошо теперь я хочу показать экстремальную ситуацию когда наш когда что-то пойдет не так для этого я хочу остановиться на конфигурации самого Patroni то есть мы сейчас меняли конфигурацию по сбросу но у Patroni тоже есть конфигурация записанная в яму и в частности до этого у нас был вопрос насколько быстро может мастер может реплика определить что мастера уже нету и после этого сделать промоушен этот параметр это это поведение регулируется параметрам тайм ту лифте тел то есть время жизни ключа лидера в 10 или в другой системе и есть определенная зависимость между этим параметрам тетиву и некоторыми другими параметрами как работает Patroni нужно немножко остановиться у Patroni есть так называемый event лук то есть цикл обработки событий когда он определяет смотрит на свою роль он смотрит на какие то действия которые ему возможно необходимо выполнить такие как например сделать рестарт сделать файл оверлей что-либо еще и после этого если никаких действий не надо сделать он засыпает он засыпает и после этого опять просыпается вот этот вот параметр насколько он засыпает это вот параметр a good faith то есть сколько он ждет после этот перед тем как начать новую тракцию цикла вот что будет если мы поставим этот параметр и луп white больше чем те тел да будет очень просто Patroni заснет во время того как он спит он потеряет ключ если он мастер и произойдет промоушен какого-то другого узла у этого другого узла ситуация повторится ровно зеркально то есть этот узел опять заснет у него он потеряет свой ключ лидера и опять произойдет промоушен ошибочка промоушна не будет почему нибудь промоушена мы сейчас вернемся мнения разделились хорошо поэтому есть фундаментальная зависимость что titiyo должен быть больше чем муп faith но есть еще один одно слагаемое в этой формуле потому что когда Patroni не видит эти сиди он не мгновенно пытаюсь как говорит de mode а пытается несколько раз соединиться с этих идей для того чтобы действительно убедиться что ее нету и вот этот вот вот это среди время соединения регулируется параметрам ретро и тайм-аут соответственно формула такая что time туле включали дира должен быть больше чем клуб white + 2 значения ретро этой маунта и вот на схеме видно что есть руб white если де трай тайм-аут и вот это вот большое-большое это когда скобки это когда истечет ключ лидера то есть и телу что мы сейчас попробуем сделать так это эту зависимость нарушить то есть мы поставим губ weight очень маленьким детей очень большими не тот своей то почему не тот вот этот сайт то есть мы здесь поставим лупает в 10 секунд антител в 5 таким образом ключ леди раза x париться в то время когда патрон не будет спать посмотрим что будет тоже самое я делаю по троне сидел edit конфиг и ставлю тетиву в 5 и лупит оставляю в значение 10 можно так что произойдет в данном случае мы сейчас увидим так мы применили значение изменения вот и сразу же мы видим что поддержка будет долго которая есть в Patroni сказала ошибка потому что в данном случае у нас еще и вот так успеет если бы мы включили watch dog он был нас просто убил бы этот кластер потому что у нас нет ключа лидера что мы еще видим здесь это то что наш лидер потерял ключ лидера и после этого получил этот ключ лидера заново он пишет он сработает как мой стиль да он пишет aqua it совершенно blog is a leader то есть что произошло пока наш Patroni спал клюв лидера за x парился Patroni все еще был мастером он после этого увидел я мастер у меня нет ключа лидера я должен получить этот ключ и лидера получил ключ лидера заснул после этого отключить опять за x паримся потому что мы спим больше чем время экспирации ключа и это поведение у нас повторяется все время то есть он все время перед забирает ключ лидером и сам же его теряет после этого гораздо интереснее посмотреть что на реплики происходит на реплики происходит полное полный хаос потому что реплика постоянно видит у нас нету больше ключа лидера и пытается себя избрать новым лидером и получает за ответ от текущего лидера то есть она когда пытается исправить избрать себя новым лидером она опрашивает бывшего лидера через раз ты пьян и получает они в ответ что я жив я ранее не у меня роль мастер и она говорит нет я не могу сделать себе промоушен вместо этого я должна следовать вот таком вот лидеру который у нас есть и вот это вот тоже повторяется никакому в данном случае вы себе ничего не записано там пусто поэтому она никого несли ну да вот она говорит full body front лидер то есть следую другому лидеру ну поскольку включаете сидя у нас нету тогда просто остается в режиме только чтение то есть оно не реплицирует ниоткуда и эта ситуация повторяется то есть у нас есть мастер который перья получает свой ключ и есть реплика которая просто остановилась и ничего не делает ну так делать нельзя это собственно как делать не надо поэтому мы сейчас поменяем конфигурацию в обратную сторону и убедимся что все у нас работает то есть мы поставим ти тел в вопрос да мы думаем об этом но изначально идея была такая что вы в принципе сами ответственны за то что вы делаете это наоборот президенту все эти параметры можно менять на лету и что сделать в случае если вы задали какие-то значения которые не удовлетворяют вот этому условию не не совсем ясно к сожалению то есть мы не можем остановить кластер это не самое лучшее решение я думаю вы с этим согласны и как бы то есть принял предложение такое стойка когда как а когда мы редактируем вот эти параметры через редактор на самом деле их можно поменять из полностью просто командной строки редактор не обязательно показывать какой нибудь предупреждая хорошая идея мы за видит мы заведем ее шью по этому поводу и имплементировать да но поскольку вы можете менять конфигурацию с помощью рис 3 я с помощью вашего клиента в котором не будет никаких проверок этого то это всегда нужно иметь в голове что вы можете поменять поставить вот эти параметры тела и глупый таким образом что вас ничего работать не будет данном случае я поменял конфигурацию обратно и вы можете увидеть что лидер перестал перья получать свой ключ то есть лидер начал стабильно работать как лидер отныне и мы можем видеть что реплика подключилась к этому лидеру и начала нормальную репликацию это было иллюстрация на тему того как можно то есть почему вот это вот важно почему вот это соотношение что детей л должен быть больше чем клуб white + ретро таймаут на 2 это соотношение должно меняться вывод из этого такой если вы хотите чтобы если вы хотите определять что ваш мастер исчез и делать это быстро вам нужно уменьшить и тел но когда вы уменьшаете детей вы должны также следить за тем чтобы это соотношение выполнялось что и соответственно уменьшать и луп white тоже иначе вы получить эту проблему которая мы так что при равана и скорее всего ретро тайм-аут тоже придется сделать поменьше но при этом не забывайте то что иногда сеть может лагать и и если в течение в течение ретро и тайм-аут не удается выполнить какое- то действие выйти сидит у Patroni сделает di molto текущему мастеру собственно в дата центре таком обычном где у нас работают обычные сервера мы наоборот вы увеличили тел до 60 секунд потому что у нас один раз была проблема когда свечи просто перезагружались и в течение 30 секунд не было никакой связи и когда мастер прыгает туда-сюда это не самая лучшая ситуация собственно говоря о конфигурации я бы хотел показать самому конфигурацию Patroni данном случае давайте посмотрим на то как она выглядит так принципе типичная конфигурация Patroni на ваш на экранах и в этой конфигурации есть так называемая bootstrap секция в этой bootstrap секции мы можем увидеть вот эти параметры телу plaid который мы уже указали также ветрами тайм-аут и некоторые другие в том числе и параметры по сбросу а чего же служит это bootstrap секция когда вы инициализируете абсолютно новый квартир в этих идей то параметры из этой bootstrap секции записываются в эти сиди и после этого применяются на других на другие узлы этого кластера частности вот этот отель в частности вот это вот faith она не записывается изначально и после этого новый узел который стартует он получает эти параметры из 10 и продолжает работать с этими параметрами в частности например у нас есть после сквер параметры и us5 rival and который говорит о том что мы хотим использовать perego young это параметр Patroni это не параметр по сбросу мы также можем указать параметры по сброса в данном случае у нас тут нет ничего то есть все параметры закомментированы но мы можем указать любой из параметров и он будет применен на всех узлах квартира изначально когда квартир стартует но если после того как кластер был создан вы поменяли секцию bootstrap и перезагрузили Patroni то в общем то ничего не произойдет вся дальнейшая работа с такой конфигурации должна выполняться при помощи Patroni control то есть вы должны менять ее выйти сиди Patroni control общем-то составляет удобный интерфейс для этого то есть как только квартира был создан то есть грубо говоря когда первый нод этого квартира когда информация выйти сиди был осознай когда первый нод был инициализирован успешно с этого момента как бы вы не меняли параметры вот в этой конфигурации той секции bootstrap она эти изменения никаким образом не приму не войдут в силу потому что эти параметры записываются при изначальном создание квартира и после этого они игнорируются что же делать почему как же нам менять параметры по сгрыз а для этого у нас есть несколько возможностей несколько путей один из путей это поменять их в Patroni яму у нас есть секция bootstrap но также если мы промотаем чуть ниже у нас есть просто секция под grace pain и в этой секции прогресс queen те параметры которые бы укажем они локальные для данного кластера той с помощью параметров Patroni мы можем поставить какие-то параметры на для этом на этом узле квартира эти параметры не применятся к другим узлам например если у нас узлы кластера неравнозначные с точки зрения конфигурации железа на одном узле и у нас 16 гигабайт памяти на другом всего 4 мы можем поставить на одном узле 4 гигабайта shahid bofors на другом всего один и таким образом у нас будет сохраняться баланс между размером памяти размером шайба pharos то есть один из способов это изменение конфигурации Patroni вот в секции локальной конфигурации не в секции bootstrap of секции локальной конфигурации есть другие способы мы можем эту конфигурацию поменять в эти сиди в 10 у нас есть ключ конфиг мы можем на этот час просто посмотреть эти сидиси тел сиди сети лвс сервис бэтмен нафиг вопрос у нас конфигурация получается собирается из разных источников в первую очередь мы смотрим что у нас выйти сиди хранится потом в Patroni ямал то есть конфигурационном файле для к данной конкретной ноды можно какие-то параметры переопределить если вам эту вот хочется то есть мы мы у себя продакшене которые латыни делаем потому что все сервера более-менее одинаковые вот третьим вариантом может быть поменять не знаю в каком то конфигурационном файле под газ а ну и четвертым вариантом может быть alt российским или еще что-то мы сейчас мы сейчас к этому придем я хотел показать что у нас хранится в эти сиди в конфигурации то есть вот у нас есть конфигурация которая инициализировать в момент bootstrap в момент создания кластера вот оно здесь в том числе и ретро и таймауту по и ты в том числе и параметры по сброса таким же образом можно в эти сиди что-то записать в этот пост параметр это что мы там запишем применится Patroni на узлах но все кластера когда мы сделаем Patroni revolta то есть когда мы скажем Patroni явно перезагрузить конфигурацию и собственно Patroni control показывает вот данную конкретную конфигурацию когда мы и редактируем только единственная разница то что хранится она в джейсоне а Patroni control использует ямал который более человека читаемый и самое главное человека записываемый потому что редактировать и джейсон вручную эту это еще занятие вопрос вот вот посмотрите в первую очередь он берет из эти сидим если тот же самый код параметр указан Patroni ямал то он будет переопределять то что вы себе записано то есть варг веум быть и сиди был 16 мегабайт Patroni я мол он стал 12 мегабайт то есть Patroni ему будет иметь приоритет и под к как это работает Patroni просто сгинет генерирует вас готовый конфигурационный файл куда записывает 12 мегабайт дальше вы еще в принципе можете использовать alter систем но это не обязательно то есть патрон ямал имеет приоритет над эти сиди то есть вот например вас горшком который записывает от равнин для кластера которого инициализировал это просто поддержки альфонс я еще раз покажу команда которой я выполню вот я хочу показать посмотреть содержимое этого файла и самые первые две строчки говорят о том что не надо редактировать этот файл вручную этот файл создан Patroni и следующая строчка у нас include разгрузки л . bass точка ком мы можем посмотреть на этот этот bass файл вы можете редактировать любому можно в конфигурации Patroni сказать пожалуйста использование бы смайлы а какой-нибудь другой то есть файл который вы можете деплоить избитое за своим как угодно и сами менеджеру что взял Patroni это он взял оригинальный по сказкам в которой был создан они гибель и переименовал его впо сга сквер . боюсь . kong мы видим что это в общем то первозданный по сгрыз файл и после этого он создал свой пост гаскон в которой он непосредственно записывает те параметры которые он получает из эти сиди и других источников и включил в него также паскаль пояском что это нам дает это нам дает в частности возможность также редактировать конфигурацию с помощью команды out a system эти параметры будут применены эти параметры будут записаны в паз газ бы из клонов и эти параметры будут использоваться но опять же если вы сделаете out a system на каком-то узле то эти параметры которые вы изменили будут применены только на одном узле если вы хотите поменять параметры где глобальным во всем квартире то используйте патрон не слетел edit конфиг вот так же как я вам показал на примере maintain sword мемы лишь erdmann и лишает bofors они в таком случае применяться на всех узлов кластера здесь показано как раз последовательность который мы уже сказали то есть сначала берутся параметры из узла исключат конфиг параметры могут также перри определяться в Patroni яму если они периоде переопределены в Patroni яму для конкретно этого узла то эти параметры будут более приоритетные чем параметры из конфига если один параметр указан и там и там или есть параметры out a system которые еще более приоритетные для данного узла но если вы поменяете что-то с помощью on the system что требует перезагрузки классный пример такой параметры от max- connections в Patroni вам об этом не скажет с помощью p1 restart чуть изалит российским не получится мог сказать fins поменять хорошо плохой пример shad bofors есть также список параметров вот это как раз те параметра которые должны быть абсолютно идентичен не не идентичны не так они параметры на маркеры и параметры на реплики а независимые частности парами значения на реплики должно быть не меньше чем значение на мастер это те же самые макс connections максиму эксперт транзак шанс волновал потому что он регулирует каким образом волк создаваться на мастерит если вы поставите минимум вас просто реплики не будет никакой она не сможет эти волны проигрывать и Patroni просто не разрешит по сути должен быть либо реплика либо лодышку что происходит да что происходит в Patroni он когда запускает то сгрыз он передает эти параметры в командной строке поэтому вы не сможете переопределить их локально для данного конкретного класть потому что выше ваши переопределения будут перезаписаны Patroni вы сможете переопределить их только с помощью Patroni сетей edit конфиг глобально для всего кластера это в общем то то что вы хотите потому что это позволит вам избежать ошибок и избежать случая когда реплика не может стартовать потому что этот параметр указан установлен в неправильное значение на этом я предлагаю сделать перерыв у нас 15 минутная пауза на кофе если у вас есть вопросы подходите к нам и задавайте если вы не смогли исследовать за нами потому что что-то у вас не получается на вашем ноутбуке мы сейчас также можем посвятить это время тому чтобы исправить те оплошности который мы запустили когда создавали да здравствуйте еще раз мы продолжаем кофе-брейк затянулся немного поэтому теперь мы поговорим про Patroni в основном и про раз такой который он предоставляет как его можно использовать и вообще для чего нужен значит самого самого начала проекта Patroni предоставлял 2 или 3 2 или 3 and point а просто 51 из них мастер или просто слэш он принимает только get request и в принципе еще об шанс принимает но это не так важно и для чего нужен мастер вернет статус 200 это и степи окей только при условии что данные конкретные но до работает как мастер то есть подгрузку ели у нас не работает в рекавери и у нас есть ключ лидера вот реплика она вернет статус 200 только в случае если данные ноды работает как реплика если она не исключена из балансирования readonly нагрузки и при условии что у нас там по сгрыз работает то есть если отгрыз там стартует или сломался или еще что то то реплика не не вернет 200 вернет 503 соответственно с мастером тоже если но да не работает как мастер то такой in point flash мастер будет возвращать статус 503 есть у нас еще Patroni в принципе он возвращает такой же ответ как и мастер или лет реплика то есть помимо статуса они возвращают там такой джейсон документ в котором будет указан оппозиции к слоган состояние по сгрыз а так и например которые настроены для данной конкретной ноды и какая-нибудь другая дополнительная информация например требует ли данный конкретный узел рестарта и тому подобное но отличие в том что Patroni всегда возвращает статус 200 есть у нас еще отдельный in point для изменения и просмотра конфигурации в принципе он сейчас не очень нужен потому что все делается очень удобно через Patroni control но раньше это был единственный способ управления такой глобальной конфигурации Patroni умеет делать свечи и failover switch over как мы уже знаем это штатная операции переключения то есть у нас был мастер он абсолютно в работоспособном состоянии но по какой-то причине мы решили что мастер у нас теперь должен жить на каком-то другом сервере потому что старый сервер мы хотим не знаю про провести какие-то там работы регламентные то есть заменить жесткий диск или там блок питания один из блок питания сбоит то есть под Patroni также через rest api умеет при стартовать по сгрыз для этого есть у нас restart in point и Patroni умеет и инициализировать кластер то есть может возникнуть такая ситуация то что реплика ну не получается ее не стартовать переварен тоже не работает оно очень сильно запаздывает вот на корпуса по отношению к мастеру может быть там какие-то вала были потеряны может еще что то и собственно единственный вариант это у нас сделать полный решалась то есть остановить по сбросу удалить дата директорию взять боясь backup вот и в принципе большинство из этих and point of они используются Patroni control и вам в общем то не обязательно их дергать вот собственно как мастер как как выглядит ответ от Patroni and point на мастере это джейсон документа джейсон он показывает нам наш data бы системы dante fire это такой уникальный ключ который генерируется только когда мы создаем новый кластер он говорит о том что это у нас за кластер какое у него имя этого батман когда у нас по сгрыз стартовал на мастере мы еще видим тут состоянию репликации он говорит то что мы работаем как мастер и в in the jar формате он говорит версию пользоваться то есть в данном случае это у нас десятка причем десять ноль вы можете например мониторить то что у вас по сгрыз самой последней версии то есть десять ноль старый у нас 10 1 уже почти три месяца существует вот завтра и 10 2 появятся то есть нам надо провести бы апгрейт неплохо на реплики выглядит примерно так же только вот она говорит то что я реплика я работаю у меня timeline 2 и ics lock выглядит тоже чуть чуть по другому потому что у реплика реплики есть информация о том сколько какая позиция их слово было получено от мастера сколько было его применено последний таймс темп в данном случае ну кто нибудь знает как как такое может произойти почему реплей таймс темп нал у нас просто не было никакой активности когда мы этот скриншот делали соответственно если на мастере никаких транзакции не не происходит то не ничего не известно о том как как какой-то мисс темпл последний транзакции вот еще такой вопрос у нас реплей таймс темп каким-то образом получился больше чем рисе вт на-на- на примерно 300 байт почему как такое может быть и можете погромче нет на самом деле вот эти две функции которые возвращают данные позиции они не транзакционные просто запрос составлен таким образом что recipe таймс темп он запрашивается раньше чем реплей там стенд то есть мы мы конечно это исправим поменяем их местами вот и собственно говоря всего таким поинты можно использовать для мониторинга состояние по сброса для мониторинга состояния Patroni мы можем использовать в том числе этим point и для того чтобы перенаправлять клик клиентские соединения на мастер либо делать какую-то балансировку между репликами то есть и чей прокси умеет посылать такие активные запросы о состоянии то есть еще и прокси периодически посылает на все ноды которые описаны в его конфигурации дай пожалуйста а скажем не работаешь ли ты как мастер собственно мастер только скажет статус 200 реплики скажут статус 503 и с репликами наоборот и на основе этого найти прокси может отправлять клиентские запросы которые предназначены для мастера исключительно на мастер и в принципе он делает такой round robin балансировку между репликами как еще можно клиентские connect и перенаправлять в принципе если вы работаете внутри одного дата центра или у вас есть какая-то возможность назначать ай пи пи между разными дата центрами но один и тот же айпи либо менять их dns в этом случае не требуется общем-то перекидывать айпиес 1 дата-центр на другой Patroni есть возможность выполнить какой-нибудь исполняемый файл обычно этот shell script и Patroni дернет такой файл при некоторых событиях например когда он стартует конкурс он выполнит скрипт который описан он старт при остановке по сброса он выполнить скрипт который описан в он стоп он reload и он restart в принципе все то же самое он ролл чинишь это немножко хитрее то есть допустим у нас было реплика которая стала мастером то есть мы выполнили pitch control pro молд Patroni выполнил пиджи control pro могут и сразу же после этого Patroni выполнить скрипт который написан описано в n roll sushi вы можете например назначить новый виртуальный api на этот сервер где мастер работает как а вы еще у нас есть возможности как бы поскольку топология кластер может меняться вы мы можем перенести на воду с одного с одной машины на другую там может идти поменяться и поддерживать конфигурацию еще и прокси это такая задача малоприятное наверное будет мы не мы не хотим просто каждый раз брать идти в чьей прокси и менять удалить старую но в ноду оттуда добавить новую он для этого есть замечательная утилита называется can где она написана она написана келси хайтауэр это парень он работает над кубер нить из и собственно он это утилита позволяет с помощью информации который хранится либо быть и сидели бы в зуке пир либо вообще там на основе каких-то переменных которые в январе мент хранятся строить конфигурационный файл по шаблону вот и собственно для вот этой утилиты у нас есть во первых во первых просто файл с настройками что мы не должны делать при как когда у нас вынесете что- то поменялось то есть и если новый консервируется конфигурационный файл получается измененным то в первую очередь этот конвэй может про проверить выполнить какую-то команду который проверит вообще корректность вот этого нового файла вот она описана в чек семьи и так же он может при при том что чек был выполнена успешно записать новый файл и сделал тяжело то есть перезапустите ли перечитать новую конфигурацию и чей прокси вот и можем посмотреть на то как выглядит собственно template на основе которого да вот это такой темплейт для и чей прокси мы описываем здесь макс connections описываем какие-то тайм-аут и и описываем значит два сервера один который будет перенаправлять трафик мастера другой который будет балансировать трафик между репликами что самое главное мы обязаны применить вот такую такую опцию он он markdown shutdown station что это означает если вдруг но до которая раньше была мастером и отвечала статусом 200 вдруг стал отвечать статусом 503 или вообще перестала быть доступна то еще и прокси просто возьмет и отрубит все вот эти соединения то есть он не будет больше отправлять наших запросов клиента на сервер который в общем-то мастером был но теперь перестал быть и потому что может быть ситуации то что пол сгрыз до сих пор работает и выполняет какие- то транзакции их этого мы обязаны избежать и в общем то еще и прокси позволяет это решить и с помощью вот такой вот хитрый конструкция и она не очень легко читаемые ещё сложнее было написать в принципе оно генерирует список узлов q который между которыми чей прокси будет выполнять вот эти half чеки балансировать и какую еще у нас есть вариант мы можем в принципе адаптировать вот такой же подход для кан где чтобы он генерировал конфиг для пищи баланса это может быть даже лучше потому что пиджи баланс умеет ставить вот наше соединение на паузу и если вдруг происходит ситуация когда мастер перемещается на другую ноду потому что файловый произошел то клиент в принципе может даже не заметить этого то есть спиде bouncer позволит разрешить данную ситуацию начинаю спускаться десятой версии мы можем в принципе указать несколько постов в connectionstring вот в таком формате то есть мы можем запросить режим ряду райт то есть ли пи кью просто сам возьмет и нас попытается подсоединиться к всем указанным хастам и в случае если это у нас мастер to an anonymous становится можно указать readonly и или еще что-нибудь так и теперь давайте посмотрим немного более подробно накал бекки то есть это вот пример на самом деле конфигурации которую мы используем в нашем классическом дата-центре там мы у нас есть call back скрипт который либо добавляет такой сервис айпи виртуальная эти либо убирает его при определенных ситуациях если мы стартуем как мастер или вдруг нашим надо было за промолчи надо мастера то мы должны добавить сервиса и пили виртуальное во всех остальных ситуациях мы в общем то должны его удалить с данной конкретной ноды то есть этот скрипт он исполняется только на одной ноги другая но да и да если она имеет этот скрипт она его будет исполнять независимо от этого и этот скрипт как параметры получает во-первых имя вот этого callback а во-вторых роль которые который имеет вот этот узел то есть если это этот узел стал мастером то скрипт будет вызван как он ролл change мастер и скоб это имя кластера пластины до что важно знать про кубики они исполняются асинхронно по по отношению ко всем остальным действием в кластере и может возникнуть такая ситуация что мастер прыгает туда- сюда и call back завершится на каком-то как колокол бег на одном из узлов на котором он был запущен раньше он завершится на самом деле позже по времени чем call back запущенный на другому узле соответственно если у нас мастер вдруг станет прыгать туда-сюда то может оказаться неприятной ситуации то что вот этот виртуальный api вдруг окажется назначен на какую-то неправильную ноту поэтому тут надо быть осторожным там есть у нас так не шью где вы можете почитать подробности но в принципе вот у нас она работает и в общем то никаких больших проблем у нас не было так же собственно возник а как очень часто возникает ситуация как мы можем управлять поведением not что мы можем сделать если вот у нас есть ноды в каком-то удаленном дата- центре мы не хотим чтобы она стала со стола мастером в результате вот вот таких выборов для этого у нас есть такое так называемый механизм таков эти теги прописываются в конфигурации Patroni в отдельной секции их можно прописать только в конфигурации если вы даже пропишите эти теги глобально в в эти сиди то никакого значения они не будут иметь на на нотах исключительно в конфигурационном файле если вы хоть не хотите избежать чтобы вот но до него никогда не стала мастером то вы можете установить текст но файлов true по умолчанию он фолз что у нас есть тот баланс то есть если мы делаем readonly лот balancing при помощи и чей прокси то даже когда но ты действительно работает как реплика она все равно будет выдавать статус код 503 при условии что у нас так установлен в true есть еще интересная интересный так называется клон хром это говорит о том что надо разрешает с нее взять боюсь backup как мы знаем пищи боюсь backup умеет делать бэкап не только с мость страной в общем с любой реплике если вы создаете какие то новые моды то мы как правило не хоть не хотите загружать мастер бесполезной нагрузки например вам надо скопировать один терабайт данных мастеру и так есть чем заняться на транзакции выполняет мы в принципе если какая-то из существующих других мод имеет выставлены так план фронта Patroni просто возьмет быть backup сад и ноды если у нас несколько таких но тонн в общем то возьмет и в случайном порядке выберет какую- то из них так же есть возможность контролировать синхронную репликацию на таком уровни для для каждой ноты то есть может быть ситуация когда есть какая-то ну да тоже удаленном дата-центре iping достаточно большое мы хотим избежать чтобы это надо просто не становилась синхронный никогда даже если она осталась единственной а вот в этом случае мы можем ее пометить с помощью но sing и последнее Patroni в принципе предоставляет возможность строить такую то такие каскадное решение то есть мы можем реплицироваться не напрямую смочить раскатка с какой-то и существующих not например когда это может быть полезно если у вас есть два или три дата центра и один из этих дата-центров удаленной и значит вы настраиваете одну из нот в этом дата-центре на то чтобы он реплицироваться с мастера а все остальные ноты будут реплицировать с данной конкретной но да то есть вы будете гнать трафик из одного дата центры в другой всего лишь один раз и то в общем то выгодно когда канал узкий или трафик дорогой но что важно предыдущие все теги они были типа boolean репликейт from он говорит о том с какой конкретный но да мы хотим реплицировать данные почему нельзя сделать наоборот то есть почему нельзя его тоже сделать бульон потому что патроним создает рипли кислоты и но да не может создать рипли кислоты для каких-то других not если она не знает что с нее хотят реплицировать то есть мастер создает слоты для всех нот которые хотят реплицировать мастера какая-то но до с которой ведется каскадная репликация она создаст слоты для нот которые хотят с нею реплицировать для чего реплики ищем слот нужны вы знаете реплики ищем слот в общем то нужны для того чтобы избежать удаления волос сегментов которые вдруг не были репрессированы по пока папа сгрыз вот на на какой-то реплики был недоступен ну или он запаздывает или еще что-то ну я уже сказал то что вы можете сконфигурировать теги только на внутри Patroni конфигурационного файла и бесполезно их писать выйти сиди вы можете в принципе вот поиграть с каскадной репликации для этого у нас есть по сброс 2 я могу файл насколько я помню там прописан то что она должна реплицировать под gs1 и соответственно под грэс-1 создаст грипплики чем слоты под грэс-2 будет реплицировать с нею так в чем разница свеча вор и failover и всегда ли общем-то файлов может быть автоматический свет свечи ворота так называемой плановой работы то есть мы берем и переключаем мастера с одной с одной ноги на другую файла ворот когда возникает нештатные ситуации когда у нас мастер отказал но своего ворам могут быть такие проблемы что Patroni контролирует можно ли использовать данную конкретную реплику для того чтобы она стол стала новым мастером может возникнуть ситуация когда реплика очень сильно запаздывает а мастер он периодически записываете сеги свою последнюю позицию x logo и этот параметр настраиваемый по умолчанию по моему он 0 может быть 10 мегаватт not не важно поскольку его можете настроить зависимости от ваших требований и вот если нам замечает а у меня лак то был бы побольше чем вот такие 10 мегабайт и принимать решение то что она не может стать новым мастером вот и ситуации звезды на небе могут сойтись сойтись таким образом что все ноды понимаю там и очень сильно запаздывание в одном случае нам придет на помощь такой мануал файлов то есть мы можем выбрать какую-то конкретную ноду которые ближе было было ближе всего к мастеру ну просто вручную сказать вот ты будешь новым мастером switcher бывает прямо вот в данный момент времени мы его можем сделать моим или мы можем сделать его отложенным то есть беда дать задание Patroni но самое важное то что switcher можно сделать только если у нас мастер есть и он в данный момент работает и что особенно важно Patroni позаботиться о том чтобы определить может какая-нибудь из других not стать новым мастером то есть прежде чем остановить пол раз она под падроне возьмет под конектится к оставшимся модам и для того чтобы понять если среди них хороший кандидат если кандидата нет то свечой он просто откажется делать то есть так то тоже и защиту от дурака и не дает себе выстрелить в ногу давайте теперь попробуем сделать свечу в я хотел бы еще спросить у нас есть эти два варианта вы мы можем давать достаточно подробно рассказывать про каждую команду и показывать ее на экране или мы можем оставить чуть-чуть времени под конец доклада для того чтобы ответить на ваши вопросы что вы думаете кто за то чтобы кто за то чтобы оставить время чтобы ответить на вопросы а кто хочет смотреть на эти команды как я их набираю смотреть на мои ошибки никто не хочет есть отлично один человек а два человека замечательно давайте знаете что тогда сделаем давайте может быть мы вот часть команд мы так пропустим то есть я хочу показать вам сейчас все таки свеча вор и мы покажем синхронную репликацию в таком интерактивном режиме а все остальное я буду показывать вам на экране потому что эти слайды они ваще похоже да просто эти команды есть на слайдов то есть мы используем те же самые команды они слайды будут доступны вы можете на них посмотреть и я прошу прощение что vagrant бокс у нас сейчас не сработало но мы его почтением и вы сможете повторить то что мы вам показываем интерактивном режиме у себя в виртуальной машине отлично давайте тогда посмотрим на святого то есть по сути говоря что я сделаю сейчас это запущу ту же самую команду которую нас есть патрон несите и switch и я укажу имя квартира мимо квартиру наш бэтмен насколько я помню эту команду нельзя указать указанием все равно нам нужно указывать параметры параметр конфигурации потому что он был Patroni цветов должен найти где находятся эти идеи вот и так он спрашивает мастер по сгрыз 1-я на прижимаю enter то есть я с ним согласен он предлагает меня кандидата на выбор я могу указать конкретного кандидата или я могу сказать что мне все равно и он переключится на реплику на любую реплику которая будет претворять условием переключения которая будет достаточно близко к мастеру и которая будет на которой будет работать по спросу даже не достаточно близко сычева гарантируют отсутствие потери данных то есть одна из реплик будет гарантированно в общем-то все реплики которые реплицируют с мастер приз вечера они будут они гарантированно получит все данные прошлому монстр даже и теперь самое интересное у нас есть возможность переключиться по расписанию то есть мы можем сказать что переключиться нужно не сейчас а через некоторое время это было сделано для того чтобы можно было например обновить все реплики на она вы версию по сброса а после этого где-нибудь в 4 часа ночи сказать сделайте нам с вечера для того чтобы не просыпаться и не делать это вручную доверить эту задачу Patroni мы это много раз делали на амазоне и в общем мы очень рады у нас такая возможность есть потому что это экономит точнее позволяет нам спать спокойно ночью одни заниматься мы заниматься поддержкой кластеров учение 150 кластер за одну ночь не самое приятное занятие с Patroni мы спим спокойно но давайте я сейчас скажу сейчас чтобы показать как она работает и он меня и по ipad и Patroni систем показывает последние подтверждение о спрашивай действительно ли это то что я хочу это действительно то что я хочу давайте на секунду смотрим вот у нас есть реплика под газ под газ 0 и вот у нас есть мастер по фгос 1 сейчас мы говорим да и что произойдёт сейчас мы сделаем патронник отель лист бэтмен решение лист скорее всего на данный момент у нас уже на данный момент наружу лидер поменялся то есть вот когда он сказал свечи вор он сказал секс с вами файл этого то по сгрыз 0 то есть успешно переключились на пост блеснули вы сразу можете увидеть что пост близ 0 это лидер предыдущий мастер был остановлен то есть его мы восстановили потом перевели его в режим readonly он соединимся и после этого стал исследовать существующему текущему мастеру вот вы можете увидеть что через некоторое время с состоянии stopt поменялось на состояние раним и сейчас он запустить запущен и работает мы можем посмотреть это на примере logo в Patroni что в данном случае произошло давайте возьмем старый мастер не давайте сначала возьмем реплику и реплики в реплике не было logo небо не было лог а вот после этого в какой-то момент мастер остановился мастер остановился удалил ключ лидера это в общем то важно потому что в данном случае у нас не будет ситуаций когда у нас одновременного мастера работает вот после этого реплика нашла что включали ключа лидера нету сделала про mode себя и после этого запустилась как маркер после этого продолжил работать как мастер мастер соответственно какой-то момент сказал что он получил запрос на то чтобы сделать свечу в вот с такими параметрами то есть он подтвердил что да я еще лидер мы указываем лидеров свечи горе потому что вы можете сделать с вечера потом лидер поменяется и тогда мы свеча вор делать не будем потому что состояние квартиру же изменилось вот и собственно говоря мастер здесь спросил у реплики здесь такие в состоянии чтобы убедиться в том что у нас есть реплика это что она в состоянии стать новым мастером да он спросил он убедился что реплика действительно работает что она точнее все нормально и что она может стать мастером и после этого отдал ключ лидерах остановился отдал ключи лидера вот мы не враги маусов там на самом деле даже два запроса производилась в первую очередь Patroni опять Patroni control делал такой запрос автор и по после этого уже сам switcher происходил внутри вот этого цикла ability to есть Patroni потом еще раз убедился перед тем как сделать не молд то что у нас есть реплика и она готова то есть такой двойной двойная защита потому что например если мы делаем скидывал ты или отложенный свечой то в начале в общем-то даже не имеет смысла убеждаться то что там есть реплика которая готова стать новым мастером но ночью там в 4 часа утра Patroni перед тем как остановиться все-таки убедиться что у нас есть реплика которые готовы для данного действия и вот вы видите что мастер сделал de mode после этого остановился после этого стартанул здесь он попытался сделать посмотрел нужно ли мы сделать perego young видимо решил что не нужно потому что мы на него ничего не записывали и присоединимся к реплики присоединился к новому мастеру и стал реплицировать я решил не делать перепаде re-volt не потому что ничего не записывали потому что у нас был клин в одном но по сути говоря macbook лишь on down и ничего нельзя было записать вот тогда же собственно говоря что мы можем еще сделать что мы можем еще сделать здесь я не буду это показывать на в живу я просто покажу на свой да что мы можем указать время когда мы хотим сделать вещи вор в данном случае вы указали и вас . с точностью до минуты и после этого вместо того чтобы не при они прямо сейчас сделать свечу в Patroni его внесет в своем когда расписание и после этого когда наступит искомое время Patroni сделает священных а до этого момента Patroni сетей вам покажет что вот есть вечера который запланирован на вот такую вот дату и запланирована вот вот это вот узла то есть этот узел будет мастеру и дальше на когда эта дата наступит он выберет реплику и сделать в чём а также у нас есть возможность перезагрузить узел по сгрыз а зачем нам это нужно то есть мы вы можете перезагрузить узел позориться с помощью 50л минус d до той директории restart у этого способа есть один недостаток если у вас есть если этот узел мастер он может в это время потерять ключ мастера и сделать про могут это в общем то я думаю не то что вы хотели когда вы хотели перезагрузить вопрос самая частая причина зачем нужно перезагружать по сбросу это наверное либо изменить параметр который требует перезагрузки или поставить новую версию под груша майнер версию там 10 955 на 956 например то есть таким образом мы можем это сделать не теряя ключ лидера просто сказав restart в рестарте можно указать конкретный узел он ресторан сделать перезагрузку этого узла в рестарте также можно указать перезагрузить все узлы ногам перезагрузить все узлы и также у нас есть возможность делать следуют restart опять же это очень полезно если вы обновили по сбросу и хотите чтобы эти изменения пришли применились не в то время когда у вас пиковая нагрузка а в тот момент когда у вас почти нет клиентов он работает также как scarlett failover по сути вы говорите я хочу сделать рестарт в такое-то время и после этого Patroni в это время делает restart и он вам пишет о том что если вы сделаете Patroni сетей лист то есть посмотрим не состоянии квартира он также у вас вам укажет что запланировано перезагрузка квартира здесь есть вывод то что патроним вам показывает по сути говоря тоже самое что похожее на Patroni city of power то есть пока restart не произойдет он вам будет говорить ждем рестарта и будет говорить через сколько секунд произойдет restart вот и когда restart произойдет он напишет вам что есть restart который был запланирован и пошел крестах произойдет мы видим что Patroni который раньше был мастером вот он продолжает быть мастером то еще не потерял лак и главная причина почему мы можем театре started но если вы решите схитрить и все таки при старте под груз вручную с помощью пиджи control the Patroni это заметить и в следующий раз больше историй не будет кто из вас читал статью пусть мартом в git лабин то есть разбор полетов после того как в тетради произошла большая проблема с базами данных находилась примерно год назад вот есть ссылка на статью если будете потом смотреть на эти слайды хорошее чтение для того чтобы понять что может пойти не так в большой организации немножко не с таким вот ненулевым бардаком с точки зрения инфраструктуры идея была такая что они у них за у них начала запаздывать реплика они решили ее переинициализация backup у них отработал не праве не отработал до конца из-за каких-то проблем они решили point они решили удалить дату директорию и по ошибке удалили дата директории на мастере ну все game ower поэтому мы считаем что удаление до той директории на реплики это не очень хороший способ для того чтобы эту реплику инициализировать потому что можно ошибиться при удалении вручную вообще выполнены таких действий конечно вручную до поэтому в Patroni есть команда raynet которая позволяет вам инициализировать узел который вы указали то есть мы говорим время нет название от мастера имя узла он вам попросит Patroni попросят подтверждение действительно вы хотите инициализировать у него вы скажете да он этот узел инициализирует и когда он будет варенье завизировать статус под газ а что под brass работает поменяется на статус который будет говорить кретин репликаторы создаем реплика до того момента когда реплика не создаст во после этого он опять будет ранее что будет если вы скажете папа троне сидел ринит кластер и укажите имя узла мастера ринит просто откажется работать ринит скажет что мы не можем инициализировать мастер если вы действительно хотите ли не цель и делать по сгрыз на этом узле то вам сначала нужно сделать свечу пор куда-нибудь еще уже потом принцы лидировать эту службу как реплику по понятным причинам вы не хотим случайно затереть наш мастер никто не хочет собственно говоря и богатого папы Patroni это в этой статьи бы не было но статья всем интересны и есть такой вот у нас режим режим паузы для чего мы этот режим изначально придумали у нас есть Patroni который управляет под газ квартирам делает автоматический failover и останавливая и стартует узлы которые после этого как были остановлены по каким-то причинам в некоторых случаях мы этого не хотим некоторых случаях мы хотим не хотим чтобы патрон не делал автоматический failover потому что мы что-то делаем с нашим после с кластером выполняем какие-то ручные операции мы знаем что это мы и мы не хотим чтобы Patroni вмешиваемся мы говорим Patroni уберите чтобы он убрал руки от нашего квартира такой хантон month по сути говоря вот и этот режим называется режим паузы этот режим включается также патронника таэль Patroni стиль Patroni сетей пауз номер имя квартира и этот режим глобальных для всего кластера то есть и мастер и все реплики они перейдут от этот режим они передают не сразу тогда когда увидят ключ паузы в эти сиди через некоторое время это время но пропорционально глуп выйду то есть времени когда работает в in club но достаточно быстро при этом они будет происходить автоматически failover то есть если у вас мастер станет недоступным то ну так так так итак квартир и будет продолжать работать то есть он не день и не возьмет и не выберет на какого не какой-нибудь из узлов в качестве нового мастера и не сделает ему про могут вот соответственно полезно еще функции этого режима это если у вас недоступен а ты сиди но потому что вы например ваш эти сиди и потушили для тоже для апгрейда или для чего-то то квартир продолжит работать к так как он работал но самое главное включить режим паузу того как вы делаете штук эти сидит понять да то есть вы включаете режим паузы сначала квартир переходит в режим паузы после этого вы хотите сиди ваш квартир они внезапно не не уходит free данный режим и не начинает показывать тысячи сообщений об ошибках а там стоит среди не доступна и в общем паника вместо этого он продолжает работать так как он работал до тех пор пока режим паузы у вас сохраняется соответственно в режиме паузы если вы остановите Patroni Patroni еще раз потруднее управляет с гасом то есть нормальной ситуации если восстанавливаете Patroni патрон не останавливает по сбросу на случай чтобы не было такого что вы остановили Patroni и после этого сделали про могут вашему вашей реплике вас учимся multimaster в режиме паузы Patroni этого делать не будет в режиме паузы если вы остановите Patroni пост газ кластер продолжит работать как ни в чем не бывало также если вы остановите под газ и Patroni будет в режиме паузы Patroni не попытается его запустить нормальном режиме Patroni попытается это сделать он подумает что что то случилось и с возгласом надо это исправить надо его запустить в режиме паузы вы можете остановить пожар сделать с ним что то что вы хотите сделать поменять бина реки например установить extension что-то еще и после этого запустить по сгрыз обратно Patroni не будет вмешиваться однако если у нас работает мастер и работают реплики мастер будет продолжать обновлять свой ключ лидера в эти дни но если среди конечно доступен вот кроме того вы в этом режиме все равно сможете создавать новые реплики то есть если вы подключите новый новый узел к квартиру то этот узел в режиме паузы и будет инициализирован и получит bass бэкап с мастером и также в этом режиме вы можете делать ручной failover то есть если вы явно скажите я хочу чтобы вот этот узел стал мастером то Patroni это учтет и поменяет роль мастера на тот узел которые вы скажете то есть свечи в работает failover если мастер умрет работать в этом режиме не будет вот такой вот у нас режим он включается командой пауза есть ключ имеет который не возвратит вам управление пока режим паузы не будет включен на всех узлах по умолчанию просто скажет я учел что вы хотите режим паузы и режим паузы будет включен через лупает интервал в режиме в этом будет ждать пока он не включен и в этом режиме когда вы говорите лист для квартира когда вы говорите покажите нам я уже он также укажет что режим паузы включенном явно это укажет и для в логе Patroni каждый узел будет сообщать о том что помимо того что я лидер ну или я реплика также включен режим паузы вот такой вот режим для различного различных операций с квартирами которые достаточно много меняю для того чтобы Patroni это заметил и вот если вы хотите чтобы подравнять ничего не делал поставьте режим паузы в режиме паузы интересное что можно сделать чтобы наверное не хотите делать это сделать про могут одному из узлов которые являются репликами 3 вас есть квартир с мастером и у вас есть реплика в этом квартире вы приходите в ручную креп лики соединяетесь с ней и говорить ему пичи city of говорить это реплики е50м postgres один про mode и что получается по сброс не Patroni никаким образом вам не препятствует он не меняет состояние этого квартира в вас в квартире становится два мастера естественно это не multimaster то есть они между собой общаться не могут и вас становится сплит brain на этот сплит brain вы сами сделали поэтому Patroni в этом не виноват во явные мы сказали пауза и после этого сделали про маму что интересно в этом случае Patroni вам скажет что я продолжаю работать как мастер но loko у меня нет то есть у меня нету индикации выйти сиди о том что я мастер потому что в эти седин ap есть ключи лидера который указывает на другого мастера а я мастер потому что вы меня за промыть или но я работаю как мастер без залога и такая ситуация продолжится до момента когда вы еще очень важное замечание если вы пойдете вот на такой вот мастер без блока который вы сами за промоутеры и спросите у него через рис 3 и через 3 из ваш мастер действительно ли вы мастер то он вам ответит мастер на это ответит 200 нормальный правильный мастер у которого есть лидер блок вот такой вот фейковый мастер которым вы сами из-за промывать или в режиме паузы он вам ответит 503 зачем затем что если вы посылаете клиентов на мастер то даже если вы за промывать эти один из узлов вручную все равно клиенты пойдут на настоящий мастер если вы используете 1 35 фейковые мастеру он не будет тебя не будет сообщать о себе через ристопии как о мастере он будет сообщать о себе он все равно продолжит говорить 503 кстати наверное для реплики тоже будет говорить 503 так что на него скорее всего вообще никто не может прийти что произойдет когда мы в такой ситуации то есть мы сделали вот этого сплит барин мастера которого которого нет loko а потом взяли выключили в квартире режим паузы произойдет следующее он вот этот вот мастер которого мы сделали сразу же получит имиджа down то есть Patroni сразу же скажет мы не можем быть мастером у нас уже есть мастер делать сделаешь a down my death pass газ после этого остановится и когда он запустится пост газ попробует патронник попробует сделать perego young для того чтобы вот этот вот ваш сторонний мастер которым вы сделали смог снова присоединиться к кластеру вот в нашей ситуации вы видите он говорит запускаем perego young и он смог сделать три войны и после этого продолжил стартовал и как стендбай как secondary и после этого присоединимся к мастеру как будто ни в чем не бывало Patroni починил вот это вот проблему сплит брейна которую мы сами и сделали что у нас есть еще что в общем то очень полезно для случаев когда вы хотите пустить клиентов на реплики это поддержка синхронная репликация и поддержка синхронная репликация у нас работает в двух режимах патрон на самом деле что вам нужно указать это указать в конфигурации Patroni режим синхронный режим асинхронной репликации это будет параметра true или false этот параметр применится для всего кластера и что произойдет Patroni найдет реплика которая хороша для синхронная репликация которая по сути говоря не отстает и добавит в на мастере параметр синхронным синхронист and buy names это параметр по сброса он парами и он добавит эту реплику в сент roner стендбай на то есть он просто сделает вам обычную синхронную репликацию но кроме этого Patroni не будет позволять вам сделать Patroni не были делать failover ни на какую реплику кроме синхронный раз вы сказали что вы хотите синхронную реплику для того чтобы она была постоянно постоянно я имела те же самые данные что и мастер то Patroni вам не даст сделать фрезер на какую-либо другую реплику кроме синхронный что в данном случае еще важно с предположим что у вас синхронной реплики нету ну она у каким- то образом исчезла она упала с ней что-то случилось что в этом случае сделает Patroni в этом случае Patroni предпочтет доступность над надо надо возможно надо возможностью принимать записи от клея запись от клиента и переведет квартир обратно то есть выключить синхронный режим и у вас по сути говоря будет мастер и асинхронная реплики как правило далее либо реплики которые не могут быть синхронными потому что кто-то их пометил но sing либо например у вас остался только мастер и для того чтобы не терять возможность записи Patroni переведет его просто в обычный режим не синхронный что в некоторых случаях мы этого не хотим то есть мы поставили синхронный режим и мы рассчитываем что у нас всегда должно быть две копии данных то есть если у нас синхронная реплика исчезает то правило что у нас есть две копии данных идентичные она может не соблюдаться и в этом случае если нам действительно всегда нужно чтобы там чтобы всегда было синхронная реплика если синхронно реплики нет то мы просто не принимаем записи на мастер в этом случае Patroni может вам помочь в этом случае вы можете поставить режим sincro у него смогут strict строгий режим асинхронной репликации он работает так же как и обычный синхронный режим за одним исключением если у вас синхронная реплика исчезает то мастер асинхронный режим остается и мастер просто перестает принимать соединения до момента когда у вас синхронная реплика появится снова однако есть возможность выключить синхронный режим для каждого запроса не многие это знают в космосе есть замечательная функция которая есть не не в так мне не в многих других базах данных для каждой конкретной транзакции вы хотели вы можете сказать хотите ли вы ее передавать синхронно или хотите вы сделать ее асинхронный то есть даже если у вас сконфигурирована асинхронная реплика вы можете сделать транзакция синхронно и тогда она не будет ждать пока транзакция передастся на реплику и от реплики перед его цвет это делается с помощью параметры синхронного scummed которые вы можете указать прям в транзакции сенсин красками дту of local колокол в данном случае то есть сделать его локальным на мастере и в этом случае он не будет ждать пока данные не передадутся на реплику и даже если вы установили строгий асинхронный режим в этом случае вы потенциально можете транзакцию потерять если во время этой транзакции все упадет но это уже ваш личный выбор вопрос к сожалению нет Patroni может выбрать только одну реплику по поскольку информация об этой реплики должна быть записана войти сидит вот с двумя репликами это сильно сложнее не получается у нас есть идеи как сделать всего кворум то есть 10 версии покупай появилась возможность по форуму синхронные реплики выбирать вот у нас есть идеи как это имплементировать но чтобы было 2 они 1 так не получается к сожалению ну я понимаю то есть даром папаш был одержим ли вам больше чем одну синхронную реплику нет мы пока я не поддерживаем у нас есть не не нету пол request и есть обсуждение на гитхабе вы в принципе можете присоединиться к и к нему и мы вместе решим как реализовывать поддержку более но синхронно реплики но до кворум это скорее всего то что мы поддерживаем начиная с десятки я хочу продать как это как она включается еще раз повторю эту команду то есть я редактирую конфигурацию квартира и после этого говорю включить синхронный режим то есть пишу здесь вот у нас кран с режим true вот до этого она стояла в да да это он стоял в фонд по молчанию и говорю применить эти изменения и давайте посмотрим что случится в этом случае вот у нас есть лидер у которого есть блок у нас есть реплика и вот что интересно и случилось как только эти изменения применились он нашел реплику нас единственно реплика она не отстает поэтому очень логично что он сделал эту реплику синхронный и он показывает Patroni показывает что параметры синхронным стендбай names то есть тот самый параметров по сбросе которую позволяет вам задать реплики был установлен в пуск из 1 ну и и Patroni также говорит об это позже раз говорит о том что после 1 1 сейчас является асинхронным стендами на реплики у нас ровным счетом ничего не поменялось но мы можем посмотреть на Patroni сити а у лист и в данном случае у нас будет кластер лидер как и раньше вот это вот реплика она у нас будет не просто ну то есть ее роль будет синхронный стендбай не просто санбой но синхронно таким образом мы можем увидеть что в квартире есть синхронные реплики и вдобавок к этому у нас есть специальный and point который позволяет который возвращает 200 только тогда когда вы обращайтесь к синхронно реплики передавать попробуем сейчас сделать вот так вот 800 9 sing вот видите этот and нам возвратил 200 зачем это нужно ваши клиенты у вас у клиентов может быть необходимость читать данные сразу после того как данные были изменены вы запустили апдейт и вы после этого запустили select на ту же страничку и вы хотите чтобы этот select возвратил уже данные которые были обновлены если бы не было этого интента вы бы могли попасть на какую-нибудь другую реплику у которой эти данные еще не пришли потому что сильные репликации асинхронные в нашем случае мы можем использовать этот винт point для того чтобы прийти на синхронную реплику и собственно быть уверенным что эти что вы получайте самые свежие данные ну мы можем попробовать у нас есть еще а sing and point который соответственно возвращает вам 200 только если реплика является асинхронный то есть обратная в данном случае вот мы пришли сделали а sing на асинхронную реплику и понятное дело что он возвратил 503 потому что реплика несинхронная ну и давайте его выключим таким же самым образом мы можем сказать синхронно смогут focus или даже брать вайс конфигурации и в данном случае пройдет некоторое время и мастер выключить синхронный режим дать посмотрим патрон неси телом а вот он говорит что получили перезагрузку конфигурацию выключили синхронный режим и соответственно если мы все сделаем лист то мы увидим что вы реплика снова синхронной если мы попробуем обратиться к sing and point он возврате 200 обратимся к симкин пойдут а он кстати 503 то есть мы доказали что репликой асинхронная дальше так дальше саша расскажет вам про то как можно расширить функциональность Patroni можно ну все все я понял вопрос такой что произойдет если мы хотим перезагрузить синхронный стендбай вот у нас есть так вопрос у вас значит есть один мастер одна реплика который является синхронной правильно значит и у нас есть два режима один просто synchronous mode а другой сильных synchronous mode strict скрипт он запретить любые операции любые транзакции на мастер если у нас нет реплики вообще вот а обычный синхронный режим если у нас реплики нет то он отключит вот этот синхронный режим и собственно мастер будет примет при применять все транзакции то есть это то что вам надо попал после то после того как вы обратно включить и реплику и в тот момент когда она догонит мастер Patroni и сделать синхронные автомате автоматически Patroni он нам позволяет делать в общем очень интересные вещи он позволяет кастомизировать очень много разных вещей таких как создание новых реплик или создание новых кластеров либо папа позволит выполнить какие то действия после того как мы создали новый кластер для чего все это надо к примеру значит мы хотим создавать новые реплики не используя bass backup на использую воли потому что у нас есть всего вот один мастер у нас есть вот этот backup который где-то лежит сделанные с помощью воли и мы хотим создать новую реплику не нагружая мастер в принципе Patroni позволяет описать конфигурацию и указать какие то скрипт и которые Patroni должен выполнить для того чтобы инициализировать реплику из какого-то внешнего источника то есть в данном случае мы описываем реплика creation метод это список соответственно Patroni попробуйте выполнить несколько методов из этого списка в порядке того что в том порядке как они описаны то есть первым в списке у нас идет воли и для воля у нас есть своя конфигурация так сказать так сказать для конфигурации мы обязательно обязаны написать команда команду которую мы должны выполнить и мог мы можем передать некоторые параметры то есть эти параметры в общем который описан объем ли они будут конвертированы особым образом в аргументы командной строки как все это происходит некоторые параметры очень имеют такое двойное назначение например у нас есть такой параметр как но мастер это означает что вот данный метод создания реплики будет рабов будет вызван и будет работать даже если у нас мастера нет то есть для чего это надо может что-то может произойти какая-то нештатная ситуация когда у вас в кластер пусть полностью не доступен вы потеряли все машины но вы хотите вас у вас есть бэкапы вы хотите восстановить все из бекапа для этого достаточно запустить Patroni Patroni выполнит команду какую-то который возьмет этот backup из развернет новый кластер я в данном случае уточнил что речь идет о физическом бэкапе то есть этого сегменты ибо из backup это не 5 там нет они логический backup логический backup в общем случае это даже не backup это такой snapshot данных определённый момент времени и вот каким образом все это конвертируется в команду то есть у нас есть воля restore соответственно Patroni начинает строить эту команду это воли restore он передаст ему имя кластер и и передаст дата директорию куда мы должны положить наши файлы передаст зачем-то роль хотя большого смысла в этом нет передаст connectionstring по которому он может достучаться до мастера для чего это надо вы можете обратиться к мастеру и понять как ситуация изменилась и посчитать например сколько это hotlog было на генерировано если там на guerrini на генерировано терабайт логов то может быть восстановление с помощью такого метода не самый эффективный лучше сделать без backup то есть в принципе это вы можете все за скриптовой и вот он передает но мастер мвд рф это по параметр это это директория которая содержит некоторые конфигурацию конфигурационные параметры для воли и например ретро ли это просто сам скрипт обязан обрабатывать большинство из этих параметров вот и соответственно если при исполнении команды у нас был код возврата ноль значит команда была исполнена успешно и мы можем попробовать стартовать вот этот кластер если команда была не успешно то Patroni попробовать следующую команду в списке если следующей команды нет он в общем ничего пробовать не будет но на следующей итерации он сделает еще попытку вот по умолчанию когда мы создаем вот создаем абсолютно новый кластер Patroni его инициализирует с помощью винить baby но может возникнуть ситуации когда вы хотите например взять и сделать полный клон какого-то существующего кластер а вот у вас есть кластер продакшене вы хотите попробовать накатить какие-то изменения вы хотите его просто склонировать как есть для этого мы поддерживаем так называемый кастом bootstrap метод он работает примерно так же как и к к кастом реплика крейсер метод то есть вы описываете метод и описывайте какие-то параметры для этого метода то есть обязательно надо писать команд в данном случае это склонировать кластер с 3 это в данном конкретном примере мы будем делать point in time recovery то есть мы знаем у нас тут произошел какой-то несчастный случай какие-то были данные удалены и мы знаем когда это случилось соответственно мы описываем такую команду которая возьмет и за string вот этот какой-то backup который попадает в данной recovery таргет timeline после того как у нас backup был развёрнут ис-3 Patroni создаст recovery конов с некоторыми параметрами то есть мы указываем что пожалуйста возьми последней актуальной timeline и сделай promod в тот момент когда ты достигнешь вата danova recovery таргет time но сделай пожалуйста про mode за миллисекунду или микросекунду то есть нет нет не включая прям вот вот именно этот таргет timeline чуть чуть раньше им после того как удалось Patroni запустит по сгрыз по сброс начнёт восстанавливать волны из какого-то внешнего хранилища из ис-3 в данном случае и в какой-то момент произойдет про mode после этого Patroni запустит пост boost bootstrap скрипт для чего это надо в этом скрипте вы можете создать например каких то пользователей какие-то служебные таблицы то есть это все конфигурируемые то вы сами должны решить вы сами должны знать что вам нужно ценить тебе происходит примерно то же самое то есть мы имеем возможность задать какие-то параметры для них baby например выключить траст аутентификацию которая по умолчанию включена для локалхост вот но все вот это происходит только после того как один из инстансов Patroni взял ключ инициализации то есть у нас вот этот bootstrap будет происходить исключительно на одной ноги это примерно ситуации как с лидером но если у нас какой-то из шагов вот этого bootstrap оказался неуспешным то Patroni удалит и ниша лайс ключ и даст другим нодам шанс попытаться если других not нет то он сам тоже будет пытаться дальше вот пример того как мы можем попов bootstrap использовать например мы возьмем создадим переса statements extension внутри до база данных template один для чего это надо то есть по пользователь дальше создаст какую-то другую базу и у него уже там будет сразу 500 statements достаточно удобно то есть под а потому что просто так как астана члены создавать нельзя это может делать только супер юзера обычно пользователь не стоит давать суперюзер в данном случае мы просто взяли и решили вот так вот проблемы одним махом вот и давайте теперь поподробнее посмотрим на конфигурацию конфигурационный файл Patroni тут есть несколько секций по во-первых мы должны описать что у нас за plaster то есть во всех модах которые относятся к данному классе трус коп должен совпадать то есть мы тут используем бэтмен namespace это параметр говорит о том где внутри эти сидим мы будем держать информацию о нашем классе тире по умолчанию это сервис но вы можете при переопределить то есть можете использовать Patroni можете использовать еще что то но самое важное чтобы namespace совпадал для среди всех узлов у данного кластер а дальше мы можем каким-то образом спины сконфигурировать rest api Patroni на данной конкретной ноги как каким образом Patroni будет общаться с этим сиди как мы будем делать bootstrap какие мы хотим конфигурационные параметры применить купон сбросу watch dog и tex сейчас rest api а здесь в общем то все просто мы говорим на каком эти порту мы будем слушать и каким образом другие ноты как на могут обратиться опционально вы можете включить ссср и можете включить basic авторизацию . authentication в de ses поскольку мы поддерживаем разные de ses такие как эти сиди консул то же самое вы должны писать холст вы должны описать какой протокол использовать может быть требуется авторизация может быть требуются какие-то сертификаты и ключи все это конфигурируемые звуки первым примерно такая же ситуация только там нет авторизации если я не ошибаюсь но для звуки при вы обязаны перечислить все хасты в кластере где петр немного позволяет это упростить но как правило люди и у них не очень часто используют на bootstrap мы уже один раз смотрели и уже о нем говорили соответственно все что написано bootstrap будет использована всего один раз когда мы создаем кластер на bootstrap метод мы тоже уже смотрели конфигурации по сброса здесь два в два важных момента опять же мы должны определить лист надрез и connect адрес лист надрез это где мы будем где была сгрыз будет слушать и connect адрес это для того чтобы эти сидя публиковать как к нам можно обратиться это для исключительно для для реплик и второй важный момент это authentication соответственно Patroni должен принято из при нейтрализации кластера создать супер юзера и создать пользователь для репликации вот а на репликах эти параметры должны быть абсолютно такими же как и на всех это как и на мастере ну и плюс опционально вы можете какие-то конфигурационные параметры для по сбросу здесь настроить call байки реплика кречей метод про все мы это говорили watch dog если вы работаете на железе то это в общем очень важно его правильно настроить тут ручек которые можно покрутить совсем немного есть такой параметр только как с цепи марджан он говорит пожалуйста за пять секунд до того как у нас истечет ключ лидера перезагрузились сервер то есть это для того чтобы обезопаситься от всего-всего и собственно protex мы уже говорили достаточно подробно да собственно очень многие параметры можно сконфигурировать не только через яму файл можно использовать января по по ссылке все это подробно описано и в принципе есть возможность прямо целиком конфигурационный файл передать через одну инвариант variable она называется Patroni configuration но при этом важно то что никакие другие января минут варилось просто не будут использованы и даже если вы где-то перед передадите конфиг в командной строке то он просто тоже будет игнорировать trouble shooting видимо вам останется как домашнее задание но мы сможем быстренько пробежаться потому что тут не очень много про утро больше у тебя и это были либо разъем потому что все эти ошибки и девушкам disease is no tags особого то есть если у вас есть идеи на эти идеи перестает быть доступной для какого-то из узлов то этот узел на вам начнет выдавать ошибки о том что он пытается общаться со среде у него не получается и после этого покажет вам сообщение о том что он ждет пока эти сидение станет доступным это относится к другим системам тоже сама так такое довольно часто проблема это вы установили дбн вас в день и ваши бинарные файлы по сгрыз а то есть по сгрыз и 50е и все остальные и не тебе они находятся где-то они в пасе не не в переменной пауз а там где-нибудь юзеры по сгрыз версия по сброса и так далее последовал вы запускаете Patroni Patroni у вас отваливается вот из именно такой ошибкой он говорит с а про усы скол не возвратил успешный результат и говорить нет такого файла почистите его ну и соответственно никакого мастера после этого быть не может потому что у вас просто под газ фонариков нету и решение этого достаточно простая нужно пойти в конфигурацию и прописать такой параметр от биндер он должен указывать на путь где вашей бина реки находятся ну или альтернативно указать в переменной page будет где находятся бинарные файлы и погрыз а вот это ген в эту ошибку я уже показывал в живую это когда он Patroni создается сваты для репликации он ее святых для реплики он создает их не сразу а тогда когда он обнаруживает что реплика появилась поэтому первые несколько секунд или может быть здесь показывается вот это сообщение что нельзя стартовать репликацию потому что скота нету она исчезнет сама по себе и не db вы можете указать конфигурацию нет db внутри Patroni сетей ямал в некоторых случаях люди указывали конфигурацию неправильно то есть например у нас есть параметр дата чек сам с которой позволяет включить чек самой включить контрольные суммы на кластер который вы инициализируете этот параметр в самом и нигде бей он показывается как минус минус минус минус до точек санс не минус минус да . сам словно утру а минус минус датчик sams Patroni соответственно требует его в таком же виде если вы укажете да . сам стру то вы получите такую ошибку которая говорит что опция датчик sams не предусматривает аргументов и не db не сработает и вам придется поменять конфигурацию Patroni перед тем как продолжать работа с этим квартирам и моя любимая ошибка ямал это язык то есть это я вообще называют форматом который доступен для записи обычным людям то есть обычные люди должны уметь писать яму я был так разрабатывался но форматирование в ямале имеет значение то есть один тация в нем ли так же как и в питоне она значима если вы забудете указать пробелы то я могу вместо подчиненного списка решит что это находится что эти параметры находятся на одном и том же уровне в данном случае он что он попытался сделать он попытался нам сделать роль он подумал эта стройка да он он попытался он попытался это все преобразовать в строку разбиваю на отдельные символы и в общем получилось чепуха на поэтому ваш я мол если вы видите что-то подобное то вы лидируете ваш геном в начале мы вообще вы лидируете ваш я могу перед тем как вы запускаете его в продакшене да и вот это вот интересная проблема вы поставили в бибионе по сброс когда в их доме не ставите по заснули в убунте он вас вам по умолчанию делает они тебе для квартира и по моему даже во запускает что произойдет если вы попытаетесь после этого этот узел в котором произошел в нить деби подключить к существующему квартиру как реплику у нас есть мастер у вас есть вот этот вот и не деби который произошел независимо от того мастера у каждого подгрузку остера есть такая штука как системный индификатор который говорит от которой одинаков на всех узлах на всех мы на мастерах и на репликах и на рожден и и другой на других квартирах которые сделаны с помощью и не тебе отдельно и вот когда вы пытаетесь Patroni подключить вот такой вот квартиру-то Patroni вам скажет критическая ошибка системный индификатор текущего узла который инициализировал этот квартир не совпадает системным индикатором той реплики которые вы попытались подключить поэтому это реплика подключить подключиться не сможет и я не могу продолжать это сделано специально для того чтобы вы не потеряли данных попытаем не по не потеряли данные попытавшись подключить совершенно не относящейся к этому квартир узел и потом увидев что он не подключился не сделали рея нет этому злу и не потеряли данные вот Patroni так говорит и решение в общем то если этот db на если у вас уже есть дата директории дата директория то вам просто нужно эту директорию удалить и подключить ее к крему собственно говоря это все из нашего туториала есть полезные ссылки то есть есть Patroni Patroni находится на гитхабе тампон source проект вы можете пойти туда и открытию или от пойти туда и посмотреть на другие шею или просто приди туда и сделать git клон и запустить его есть документация Patroni 1 находится на отдельном а по отдельному адресу по дороге vitox . и эта документация поддерживает поиск если вы ищете какой-то параметр вы можете найти там подробно описываются все параметры подробно описывается как работает Patroni разные в режиме Patroni в том числе например синхронная репликация как работает кубер нет с про который мы сегодня не говорили потому что у нас просто не хватило для этого времени есть докер-образ который включает тебя пользоваться Patroni и многое другое он называется с пиво он также также находится на гитхабе вы в open source и мы его используем отрисован для того чтобы запускать под груз и в общем то вы тоже можете его использовать для той же самой цели большое вам спасибо большое вам спасибо за то что вы проходишь и нашу территорию а я прошу прощения за некоторые неудобства мы исправили в следующей версии приходите на следующую версию сейчас и мы бы хотели ответить на ваши вопросы на пожалуйста в купер и вопрос был еще раз в кубе нет если что в кабинет и все мы запускаем Patroni в спину и управляем с помощью под газ оператора это отдельный open source проект я вчера про это дело lightning я вчера про это делал доклад молнию наверное слайды будут куда-нибудь выложены хороший вопрос надеемся да потому что red hat в этом тоже заинтересован для нас именно джош burcu'c для наш поддержка упали shift предусматривать наличие у пришив то которого у нас нету поэтому поддержка пришив занимаются люди которые до в этом заинтересованы в частности red head я думаю что будет еще вопросы да просто так так Patroni может да да да да и мы поняли ваш вопрос у вас уже есть мастер есть уже стендбай существующей можно ли подцепить патронник существующему строю не не перенесли зиру его правильно да это возможно то есть в первую очередь вы должны запустить Patroni на мастере вот чтобы ничего непредвиденного не произошло и уже только потом спустить его на вот этом посте где работает стендбай но как бы эта операция такая не очень хорошо документированы так скажем и прежде чем это выполнять на продакшен вы лучше потренируйтесь где-нибудь не знаю на своем лаптопе например но в принципе мы это проделывали то есть у нас именно такая ситуация в классическом дата центре у нас есть мастер у нас есть can buy мы сначала пустили Patroni на кости где у нас мастер он все записал что нужно в звуке пир в нашем случае потом мы запустили Patroni на реплики соответственно она по Patroni понял то что у нас уже есть мастер и собственно весь этот кластер стал работать под управлением Patroni нет никакой переинициализация делать не пришлось с 3 это до такой дата стороны ws для этого вы можете использовать неволя что-нибудь другое то есть это это все кастомизируют а то есть вы впредь вы можете написать любые скрипты которые будут выполнять бэкапы если ваш вопрос был можете ли вы использовать с трение сама зона просто с вокальной машины туда в принципе вы можете это сделать тоже помажьте покататься на ис-3 даже не были даже не находясь в амазонии если в этом есть смысл я помню вас было просто жанна то есть если вы пазлы запускайте не с помощью 50 ела с помощью какой-то своей специальной команды патрон не управляет после сам на данном конкретном узле то и соответственно для каждого узла Patroni запускает по сбросу вы не можете взять и сделать так чтобы Patroni запустил сразу несколько по сбросов один Patroni на разных узлах вопрос кастомизируют соли строка запуска по сброса в Patroni нет она не кастомизируют а зачем я не раз слышал что сделать конкретное а почему не указать это в параметрах Patroni вот это вы можете сделать то есть указать Patroni яму то что вы хотите где показывается вашей у них соки directory например и после этого или курский порт поменять на самом деле все параметры она процессором запустить на определенных я понял о чем вы говорите [музыка] думаю что для этого вам нужно запустить патрон не нова этих процессорах поскольку в Patroni потом запустить по сброс он соответственно запрут вам наследуется ли все это потому что я честно говоря не знаю вероятно да потому что вы запускаете postmaster который после этого запускает возгласы поэтому если это работает случае просто по сбросу который с представляю себя много процессоров запускающих процессов которые запускаются изначально пас мастером то это сработает с точки зре и из Patroni тоже но в вашем случае я бы экспериментировал ответ на ваш вопрос это примените эти параметры Patroni принципе да звучит логично еще вопросы какие-нибудь из да а просто а это и как раз и произойдет если что-то произошло синхронный репликой то Patroni какой-нибудь из существующих асинхронных реплик которые удовлетворяют определенным условиям просто выберет следующий синхронный а весь вопроса будет вся вся вся дело будет в том что он будет делать в этот момент пока у него нет синхронной реплики то еще можете подарить его синхронный режим совсем либо продолжать считать себя в синхронном режиме и не принимать соединения пока у него не будет действующий синхронно реплики вот как раз на вот это время пока он выбирает синхронно реплику следующую ну имейте ввиду то что все вот эти операции они не правда не происходит мгновенно то есть требуется некоторое время понять что у нас вот это синхронно или реплика отвалилась еще вопросы мы можем ответить на отдавайте последний вопрос наверное один из последних сода начинаешь и запас воды из подровнял физика ваша 80 вы и так возможно ли использовать Patroni на физическом сервере вместо облака да возможно по тронуть не связан каким-либо контейнером вы можете запустить его на местном сервер это то чем мы занимаемся здесь у нас было виртуальная машина и мы запустили Patroni виртуальной машины и все прекрасно сработал мы использовали его на физическом сервисе то есть он не привязан контейнером есть топит контейнер гис спела нос успела есть воздух и Patroni о Patroni это программа которая может работать везде прокси это балансировщик нагрузки и его первичная цель направлять трафик от клиента мастеру потому что если у вас более одного узла в кластере например три узла to each и прокси отвечает за то чтобы определить где работает мастер и когда клиент подсоединяется к чай прокси то автоматически чепрак тир направит это на правильный узел ну это запрос и ответ на запрос из под колеса нет в этом случае он работает как обычный тисе пи прокси он не использует пост 1 протокола но направляет он направляет трафик от клиентов пост раз остальные вопросы на я предлагаю уже трясти перевести это из доклада дальше рядов кулуары чтобы не занимать дополнительное время спасибо вам большое еще раз за того что бы у вас было здорово Горизонтальная линия