После романтического свидания девушка предлагает:
-Мы можем поехать к тебе и заняться кое-чем непозволительным.
-Ух ты! Будем делить на ноль!
Обрадовался программист.
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С.
+ нагрузочное тестирование, оно есть у меня
Уйти в лето.
Желающие знают, где меня искать, время за пределами рабочего.
Статья продолжает серию публикаций:
- В облако на работу: Архивирование postgres. Дайте два
- В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана
- Бесплатный вебинар "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС"
- В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)
- Три пингвина под окном... Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux
- Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux
- Установка 1С:Сервера взаимодействия. Заметки на полях
- Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана обратите внимание на дату публикации
- 1С в 1cloud.ru. Теплое, ламповое, свое отчет о походе в питерский офис ©Serverspace когда он еще не был Serverspace
Серия "Рецепты от Капитана" на всякий случай
- Подготовка к экзамену 1С:Специалист по платформе. Рецепты от Капитана
- Настройка сборки данных в Performance Monitor Windows Server. Рецепты от Капитана
- Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана