Построение отказоустойчивого кластера PostgreSQL. HAProxy, давай до свидания. Рецепты от Капитана

17.06.24

Интеграция - Облачные сервисы, хостинг

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана" в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая прочая... Это основное блюдо, на закуску разберемся с отказоустойчивостью. В этой публикации для PostgreSQL, заодно попробуем сделать это по новому.

 

После романтического свидания девушка предлагает:
-Мы можем поехать к тебе и заняться кое-чем непозволительным.
-Ух ты! Будем делить на ноль!
Обрадовался программист.
anekdot.ru©

 

 

Внимание! Метод сборки отказоустойчивого кластера PostgreSQL этой публикации отличается от рекомендованного ИТС.

Кроме того, профессиональным я считаю рецепт от человека, собравшего 10+ работающих по нему систем, в данном случае это не так.

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

Но, пока корифеи в отпуске, почему бы не заняться непозволительным и немного не пошатать их трубу.

Тем кто не любит много букв

Отказоустойчивый кластер PostgreSQL для 1С можно построить без HAProxy, используя виртуальный IP и vip-manager для управления им.

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

Остальные, добро пожаловать.

Постановка задачи

Посмотрим на знакомую схему кластера от ИТС & Co.


 

Ее очевидный недостаток, это лишнее звено в виде HAProxy.

Это, в любом случае, отрицательный вклад в быстродействие и слабое звено как отказоустойчивость самого узла HAProxy.

Ноги этой схемы растут из веб-приложений и там присутствие HAProxy оправдано, т.к. он разделяет трафик, если приложение это умеет, то писатели идут налево, а читатели направо и никто никому не мешает.



Учитывая, что читателей намного больше, производительность возрастает кратно.

1С же не умеет, я надеюсь пока, так работать, и для нее HAProxy это просто переключатель трафика, вносящий процентов 1-10% задержки в зависимости от железа и его настроек.



И не только 1С, много приложений не могут в только чтение, отсюда и попытки различной степени успешности обхода этой проблемы, найти которые можно на любой конференции PostgreSQL.

Обычно схемы получаются весьма замысловатые, тяжелые как обслуживании, так и в понимании.



Напоминающие поход по магазину




А как было бы прекрасно. Вжух...



и все работает без этого лишнего звена.

Такое решение есть у компании CYBERTEC PostgreSQL International GmbH, у меня и теперь будет у вас.



Кстати, у них же более продвинутый PGConfigurator.

Решение это vip-manager, обеспечивающий единую точку входа (виртуальный IP адрес) для доступа к PostgreSQL.

Давайте обо всем по порядку.

Исходные данные

знакомые из предыдущих статей

  • Сервер 1С РедОС 8 
  • Postgres 16 от PostgresPro
  • 1С Предприятие 64-х 8.3.24.1467
  • все в домене test.loc. 
    Пользователь, от которого работает сервер 1С usr1cv83, пароли у всех 123456.
    Все эти значения произвольные и должны в скриптах быть заменены на ваши.
  • все по железу 4ГБ RAM 50ГБ SSD 2 Ядра CPU
  • все развернуто в облаке ©Serverspace из оригинальных iso образов производителей для чистоты эксперимента.
  • база Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.29.62) демо

 

 

Чтобы статья действительно была рецептом, установим все компоненты системы с самого начала. 

etcd, обращаем внимание на версию, это будет иметь значение при конфигурации patroni

dnf install -y etcd
etcd --version
systemctl status etcd.service --no-pager -l
mv /etc/etcd/etcd.conf /etc/etcd/etcd.conf.def
mcedit /etc/etcd/etcd.conf 

Берем шаблон файла настроек с ИТС или с github заменяем в нем имя кластера, адреса хостов, стартуем первый узел, добавляем в базу два других по порядку, тогда все получится с первого раза.

 

ENDPOINTS=red8-cln01.test.loc:2379,red-srv.test.loc:2379,red8-srv.test.loc:2379
etcdctl --endpoints=$ENDPOINTS endpoint health
etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status

 


кластер etcd собирается без особых проблем и работает надежно, недаром его использует Kubernetes, если что-то идет не так, останавливаем службу, удаляем каталог ETCD_DATA_DIR="/var/lib/etcd/cluster-1c" и начинаем сначала

В рабочем контуре, нужно еще создать пользователя root для ограничения доступа к etcd и задать для него пароль.

patroni, при рекомендациях начинать с пустого кластера postgreSQL, Patroni нормально установится и примет уже существующий, это сэкономит время на возню с архивами, единственно, что потребуется, это добавить пользователей для репликации Patroni superuser etc.

Дальнейшая установка описана, как на официальном сайте, так и на ИТС

python3 -m pip install patroni[etcd]
dnf install python3-psycopg2 -y
mkdir /etc/patroni
chown postgres:postgres /etc/patroni
chmod 700 /etc/patroni
mcedit '/1c/create users.txt'

chmod +777 -R /1c

 

После этого службу postgres нужно остановить и выключить
systemctl status postgrespro-1c-16.service
systemctl stop postgrespro-1c-16.service
systemctl disable postgrespro-1c-16.service
mcedit /etc/systemd/system/patroni.service

 

mcedit /etc/patroni/patroni.yml

Шаблон файла конфигурации можно также взять с ИТС или сайта разработчика, а можно командой
patroni --generate-sample-config /etc/patroni/patroni.yml

 

в нем изменяем адреса серверов, имя кластера и т.п.

Т.к. у нас etcd третьей версии, то его настройки надо задавать в разделе etcd3

Проверяем, что нигде не опечатались и корректно расставили отступы

/usr/local/bin/patroni --validate-config /etc/patroni/patroni.yml
mcedit /var/lib/pgpro/1c-16/data/pg_hba.conf

 

 

host    all             all             0.0.0.0/0               md5
host    replication     all             0.0.0.0/0               md5
#проверяем наличие этих строк для доступа к лидеру с реплики

systemctl start patroni.service
systemctl status patroni.service --no-pager -l

Далее идут примеры команд, которыми можно управлять кластером, посмотреть его настройки, состояние etc.



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

/usr/local/bin/patronictl --config-file /etc/patroni/patroni.yml topology cluster-1c
/usr/local/bin/patronictl --config-file /etc/patroni/patroni.yml edit-config cluster-1c --pg max_locks_per_transaction="256" --force

/usr/local/bin/patronictl --config-file /etc/patroni/patroni.yml restart cluster-1c

Итог установки: работающий кластер с лидером и репликой

haproxy, т.к мы идем по инструкции ИТС, то устанавливаем его на отдельный сервер

yum install -y haproxy
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.conf.def
mcedit /etc/haproxy/haproxy.cfg

 

 

Проверяем файл конфигурации на наличие опечаток и корректность отступов
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c

systemctl start haproxy.service
systemctl status haproxy.service --no-pager -l

Можем посмотреть статус по адресу имя сервера:7000


 

И идем делать тесты.

На лидере создаем и инициализируем базу pgbench.
sudo -u postgres psql -U postgres -c "create database pgbench;"
PGPASSWORD='123456' pgbench -h redos-vm -U postgres -i -s 5 pgbench

Затем с клиента проверяем по прямому соединению на лидер   

PGPASSWORD='123456' pgbench  -h red-srv.test.loc -U postgres -c 10 -j 1 -t 10000 pgbench

 


и через HAProxy

PGPASSWORD='123456' pgbench  -h red8-cln01.test.loc -U postgres -c 10 -j 1 -t 10000 pgbench


 

Переключаем соединение базы 1С на адрес HAProxy


 

В облаке ©Serverspace разница получилась не очень большая, в других контурах где удалось проверить, доходило до 10%, кто проверит у себя, пишите в комментариях.

vip-manager, устанавливаем на сервера patroni

Пакет берем с github Releases

echo "net.ipv4.ip_nonlocal_bind = 1"  >> /etc/sysctl.conf
sysctl -p

rpm -ivh *.rpm
systemctl start vip-manager.service
systemctl status vip-manager.service --no-pager -l
systemctl enable vip-manager.service
cp  /etc/default/vip-manager.yml  /etc/default/vip-manager.yml.bak

mcedit /etc/default/vip-manager.yml

 

Прописываем виртуальный адрес в DNS или файлах hosts


 

После этого можем переключать на него соединение базы 1С, HAProxy можно отключать.

Допускаю, что не понимаю пока его истинной ценности для 1С.

Расскажите об этом в комментариях.



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

Можно прогнать тест быстродействия, хотя понятно, что это прямое соединение с лидером.


 

Благодарности:

Благодарю компанию ©Serverspace за предоставленное оборудование, без поддержки собрать такой пингвинариум мне было бы негде.

Главный спонсор этой публикации, питерская погода.



А вы как думаете, почему наш город дал миру столько великих ученых и писателей?

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

 



Ну и заодно, возможно, главный спонсор всех нас, кроме тех, кого нашли в капусте, ведь чинить людей, это посложнее, чем чинить компьютеры.

16 июня 2024 День медицинского работника (День медика)



Давайте помнить и уважать медиков не только один день в году.

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

Мой почет и уважение всем и отдельно тех. отделу ПСПбГМУ.

Планы на будущее:

Дописать про отказоустойчивый кластер уже для 1С.
+ нагрузочное тестирование, оно есть у меня

Уйти в лето.


 

Желающие знают, где меня искать, время за пределами рабочего.

 

 

Статья продолжает серию публикаций:

Серия "Рецепты от Капитана" на всякий случай

 

См. также

Внешние источники данных Облачные сервисы, хостинг Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3205    1    2    

11

Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Облачные сервисы, хостинг Программист Пользователь Платформа 1С v8.3 Управляемые формы 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Данная система предназначена всем, кому нужно выгружать данные в SPOT 2D или в ОРИМИ. Позволяет гибко настроить получение данных для каждого поля файла и файла выгрузки в целом. Имеет отборы по организации, складу, и папкам номенклатуры. Есть возможность выгружать данные как вручную, с выбором конкретного файла, за конкретный период, так и в автоматическом режиме в указанное вами время. Выгрузка может выполняться в файл или через http напрямую. Имеется подробная справка по настройке, а также примеры запросов для приведенных в примерах файлов выгрузки. Может работать в составе любой конфигурации! Обновление от 31.03.2020!

14400 руб.

19.10.2018    28701    7    1    

9

Linux Программист Бесплатно (free)

При многолетней эксплуатации 1С на Windows и MS SQL в базе накапливаются не самые оптимальные запросы, COM-объекты и скрипты, зависящие от ОС. Из-за этого процесс перехода на PostgreSQL и переноса сервера 1С на Linux неизбежно осложняется длительным исправлением кода и оптимизацией запросов. Расскажем о том, как с задачей такого рефакторинга справились в компании Avito.

13.11.2024    4624    klimat12    15    

25

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Завершающая публикация цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием, отказоустойчивостью и прочая, прочая... В этой статье мы определяемся с быстродействием системы, проводим нагрузочное тестирование и отпускаем ее в свободное плавание (зачеркнуто) выпускаем ее в продуктовый контур, где, конечно же, придется отлавливать ошибки, мониторить состояние и т.п.

31.10.2024    1319    capitan    0    

0

Облачные сервисы, хостинг Linux Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая, прочая... На закуску разбираемся с отказоустойчивостью. В этой публикации для серверов 1С заодно попробуем подобно сериалу «Разрушители легенд» подтвердить или опровергнуть пару устойчивых мифов о требованиях назначения функциональности.

18.10.2024    1720    capitan    5    

12

Облачные сервисы, хостинг Бесплатно (free)

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

02.09.2024    444    EFSOL_oblako    0    

-2

Облачные сервисы, хостинг Системный администратор Программист Бесплатно (free)

Примеры решения некоторых насущных проблем при работе с облачными сервисами, покрываемых CLI версией Открытого пакета интеграций - OInt CLI.

05.08.2024    1840    bayselonarrend    7    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aximo 2100 18.06.24 17:30 Сейчас в теме
Почему я 15 лет назад я «свернул» с дороги pg? На тот момент, мне показалось, что эта система уровня - «тут подкрути, там подверни», вероятно заработает, но это не точно…

Не знаю как сейчас дела обстоят с pg… но на тот момент, я даже не нашел как сменить «локацию» файлов базы данных и лога….
5. capitan 2507 19.06.24 15:34 Сейчас в теме
(1)Свернуть с дороги это не так страшно как зайти не в ту дверь.
15 лет назад я собирал линуксовые сервера для 1С и это было никому не нужно )
Небольшой ручеек из желающих начать честную лицензионную жизнь.
Некоторые до сих пор работают)
2. user2093173 19.06.24 08:19 Сейчас в теме
Ничего не понятно. В чём заключается отказоустойчивость? Какие гарантии даёт эта схема по сравнению с обычной (и какая обычная?) И за счёт чего обеспечиваются эти гарантии? Стена текста, а по сути ничего, только примеры каких-то конфигов, которые предлагается бездумно копипастить. Видео 50 минут про это же я, конечно, смотреть не буду.
3. starik-2005 3088 19.06.24 14:01 Сейчас в теме
(2) Лично моя имха в том, что нет ничего лучше потоковой репликации WA:L-файлов с ежедневным бэкапом каталога кластера. Как уж это назвать - второй вопрос. Но все там завязано на свойстве ядра постгреса делать это. Оно может ехать с основного сервера в хранилище или на второй сервер - не сильно важно. Восстановить это все на любую минуту можно достаточно быстро, имея копию каталога кластера и готовый стартануть сервис, на которой можно оперативненько переключить сервер 1С хотя бы даже изменением IP-адреса хоста с потгресом в hosts.
В итоге:
1. Копия каталога кластера, делаемая каждый день.
2. Настроенный для запуска сервис с файлом флага восстановления на час Х..
3. Репликация туда WAL.

Упало, скрипт запустил резервный кластер, который развернул на время падения все транзакции с WAL, на сервере 1С поменялся IP хоста с потгресом на резервный кластер и все через 5 минут работает.

Можно делать через автоматическое переключение на резервный кластер при отказе основного, конечно, но там эмоции не те уже.
CbIHok; slavik27; kauksi; +3 Ответить
8. capitan 2507 19.06.24 15:40 Сейчас в теме
(3)Как пишут в новостях человек похожий на starik-2005 на хабре написал что ничего не понял, а здесь вот оно как.
Я там так удивился, starik-2005 же самый крутой линуксоид, что он пишет )
9. starik-2005 3088 19.06.24 18:46 Сейчас в теме
(8)
линуксоид
Там про 1С не любят писунов.
12. capitan 2507 19.06.24 20:48 Сейчас в теме
(9)
Там про 1С не любят писунов.

Это да.
Там есть люди-человеки которые только за 1С минусуют )
Сейчас примерно пополам плюсуют-минусуют, так что процесс идет
13. starik-2005 3088 19.06.24 22:44 Сейчас в теме
(12) Лучше расскажи рецепт о том, как написать там статью с 50+?
17. capitan 2507 21.06.24 10:00 Сейчас в теме
(13)
Так же как и здесь.
Найти 50+ друзей которые ее плюсанут)
15. slavik27 101 20.06.24 09:00 Сейчас в теме
(3) а есть какое то описание как такое реализовать?
16. starik-2005 3088 20.06.24 10:15 Сейчас в теме
(15) Документации на сайте постгреса мало? Гуглите архивацию WAL, там найдете и восстановление. Как бэкап кластера сделать - так там сто вариантов, включая синк линуксовый.
6. capitan 2507 19.06.24 15:37 Сейчас в теме
(2)Самый правильный подход
Читать ничего не буду дальше заголовка и смотреть ничего не буду.
Буду бухтеть в комментариях.
4. user2093272 19.06.24 15:24 Сейчас в теме
Если упадёт виртуалка red8-srv.test.loc. у кого окажется vip адрес?
7. capitan 2507 19.06.24 15:37 Сейчас в теме
(4)У red-srv.test.loc
На принтскринах и на видео это есть
По сути это свитчовер лидера
10. user1142959 1 19.06.24 20:20 Сейчас в теме
keepalived можно вместо vip-manager.
Также в таких кластерах любят pgbouncer применять.
На гитхабе видел плейбук для развертывания такого кластера с postgres pro.
11. capitan 2507 19.06.24 20:46 Сейчас в теме
(10)
keepalived можно вместо vip-manager.

vip-manager прямо из коробки умеет etcd
а keepalived надо скриптами учить и он как то хитро сеть поднимает
pgbouncer вроде как для 1С ничего не улучшает, сервер 1С сам отлично соединения держит и не плодит тысячами
Хотя если пару тысяч пользователей одновременно что то запишут, может и стоит поставить
Я пробовал на 250 ничего не улучшилось
14. slavik27 101 20.06.24 09:00 Сейчас в теме
Подскажите пожалуйста правильно ли я понимаю что изначально haproxy нужен был бы для того чтобы переключать нагрузку между серверами или для 1с такое фантастика или если допустим первый сервак помер то всех юзеров бы перевело на второй и тд.3.4 сервак? Есть такое или это фантастика?
18. capitan 2507 21.06.24 10:02 Сейчас в теме
(14)Вы сначала определитесь с вопросом, а потом я определюсь с ответом)
изначально haproxy нужен был как прокси
в высоконагруженных веб приложениях его используют чтобы переключать читающую и пишущую нагрузку между серверами, для 1с такое сейчас не реализуемо
если допустим первый сервак помер то всех юзеров бы перевело на второй и тд.3.4 сервак? Есть такое
Оставьте свое сообщение