Настройка YaXAHA Cluster
В этой главе рассматриваются настройки YaXAHA Cluster. С начала идут настройки которые с большой вероятностью будут полезны новым пользователям, кто впервые запускает собственный кластер.
Далее рассматривается функция yt_info, созданная специально для получения текущего состояния и настроек ноды кластера, а так же пример поиска проблем возникающих во время работы кластера.
Перед этой главой рекомендуется ознакомиться с разделом Архитектура YaXAHA Cluster.
Настройки отказоустойчивости#
YaXAHA Cluster позволяет определять на каком количестве нод кластера необходимо обязательное синхронное дублирование транзакции, перед тем как считать ее успешной. Остальные ноды кластера могут выполнять транзакцию асинхронно.
Пользователь может выбирать между:
- Определенным числом нод
- Половиной нод кластера
Число нод можно задать как для всего кластера, так и для отдельных таблиц.
Для каждой транзакции, кластер определяет ее границы и те таблицы, данные которых подвергнутся изменениям. Далее, кластер ищет настройки конкретной таблицы и если таблица не имеет собственных настроек применяются настройки кластера.
Пример для всего кластера:
Повторять транзакции синхронно на половине кластера:
insert into public.yt_config (name, module, value) values ('def_cluster_commit','C','half');
Повторять транзакции синхронно как минимум на двух нодах:
insert into public.yt_config (name, module, value) values ('def_cluster_commit','C','nodes>=2');
Пример для отдельной таблицы:
update yt_config set value = yt_ct_encode('{"value":{"Table":{"timeout_sec":8,"aggregate_timeout":true,"sequential_consistency":false,"cluster_commit":"half"}}}') where name like '%public.orders' and module = 'A';
PgBouncer#
По умолчанию, во время установки пакета yaxaha на каждую ноду устанавливается немного измененная версия PgBouncer. Мы рекомендуем направлять запросы клиентских приложений именно на него.
Зачем PgBouncer?#
PgBouncer в составе YaXAHA Cluster помогает решить несколько задач:
Пул соединений#
Помимо хорошо известных выгод от использования PgBouncer, таких, как экономия ресурсов при повторном использовании соединений с базой данных, мы обеспечиваем пулом соединений системы которые не имеют своего пула соединений.
Транзакционность#
YaXAHA Cluster оперирует транзакциями и хотя современные ORM-фреймворки автоматически оборачивают каждый отдельный запрос к базе данных в транзакцию, существует масса систем посылающих SQL запросы к базе без использования механизма транзакций.
Чтобы помочь YaXAHA Cluster, наша версия PgBouncer оборачивает такие SQL запросы в транзакцию. Это обеспечивает изоляцию запросов друг от друга и корректную работу кластера.
Таким образом, модифицированный PgBouncer дает возможность YaXAHA Cluster работать с ванильным PostgreSQL без каких либо изменений его исходного кода. Что оставляет пользователю доступными все функции PostgreSQL без каких либо изменений.
Исходный код внесенных в PgBouncer изменений доступен в репозитории.
Фактически изменения сводятся к тому, что мы оборачиваем одиночные SQL запросы в транзакцию и вызываем функцию фиксации транзакции в масштабах всего кластера.
begin;
…
select yt_complete(true);
commit;
Настройка PgBouncer#
Ниже приведен пример простейшей конфигурации PgBouncer. Пожалуйста обратитесь к Official PgBouncer Documentation если вам нужна дополнительная информация.
[databases]
* = host=127.0.0.1 port=5432
[pgbouncer]
listen_port = 6432
listen_addr = 127.0.0.1
auth_type = trust
auth_file = userlist.txt
logfile = pgbouncer.log
pidfile = pgbouncer.pid
admin_users = postgres
"dbuser" ""