Уровень 3.0
Предусловия:
- Изучена лекция 10 «Обеспечение высокой доступности»
Кластер включает в себя следующие узлы:
- Master
- Replica
- Arbiter
На узлах Master и Replica, помимо экземпляров Pangolin, также развернуто приложение Pangolin Manager и распределенное хранилище (DCS) etcd.
На узле Arbiter развернуто только распределенное хранилище.
Вспомним, что Pangolin Manager используется в роли агента на каждом узле для управление экземпляром Pangolin. Управление кластером выполняется путем взаимодействия компонентов Pangolin Manager посредством хранилища etcd, а также напрямую.
Узел Arbiter потребовался для протокола консенсуса RAFT, используемого в etcd. Протокол RAFT основан на определении кворума (большинства), поэтому в кластере должно быть минимум три узла с etcd.
Все действия в этой лабораторной работе выполняются на виртуальной машине Master
Анализ работы кластера Pangolin
-
Подключитесь к виртуальной машине через
webssh, указав IP-адрес Master. -
В терминале запустите оболочку от имени пользователя
postgres:[student@ServerName ~]$ sudo -iu postgres -
Перейдите в каталог с конфигурацией
pangolin-manager:[postgres@ServerName ~]$ cd /etc/pangolin-manager/ -
Посмотрите первые 30 строк файла конфигурации:
[postgres@ServerName pangolin-manager]$ head -n 30 postgres.ymlrestapi:listen: 0.0.0.0:8008connect_address: 172.29.53.69:8008allowlist: []allowlist_include_members: trueauthentication:username: patroniymlpassword: dev_api_pastroni_pass!etcd3:hosts: 172.29.53.69:2379,172.29.53.148:2379username: patronietcdpassword: patronipass12345audit:enabled: truedirectory: /pgerrorlogs/06/auditfilename: pangolin-managerrotation_age: 1drotation_size: 10Mlog:dir: /pgerrorlogs/06/pangolin-managerfile_name: pangolin-manager-%Y-%m-%d_%H%M%S.logdestination: filefile_mode: 600redirect_min_size: 10Локальная конфигурация Pangolin Manager хранятся в файле
postgres.yml. Глобальная динамическая конфигурация кластера хранится в распределенном хранилище etcd.Настройки сгруппированы по секциям.
В том числе имеются настройки подключения к REST API (сeкция
restapi).Pangolin Manager предоставляет программный интерфейс REST API для управления и мониторинга кластером. Указанный интерфейс сам использует Pangolin Manager, а также может использоваться внешними средствами, например HAProxy или администратором кластера.
Также есть настройки для подключения к распределенному хранилищу etcd (секция
etcd3). -
Посмотрите содержимое секции
bootstrapфайла конфигурации:[postgres@ServerName pangolin-manager]$ grep -A 27 bootstrap postgres.ymlbootstrap:dcs:ttl: 135retry_timeout: 60loop_wait: 10maximum_lag_on_failover: 1048576synchronous_mode: truesynchronous_mode_strict: falsepostgresql:parameters:max_connections: '110'max_worker_processes: '32'max_prepared_transactions: '3'wal_level: replicawal_log_hints: ontrack_commit_timestamp: offwal_keep_size: 8GBmax_wal_senders: '10'max_replication_slots: '10'logical_decoding_work_mem: 64MBauth_activity_period: '60'authentication_max_workers: '16'use_pg_rewind: trueuse_slots: trueinitdb:- encoding: UTF8- data-checksums- locale: en_US.UTF-8Секция
bootstrapсодержит настройки, которые применяются при инициализации кластера, то есть значения параметров в этой секции применяются один раз.В подсекции
dcsуказываются общие настройки для узлов кластера, которые сохраняются в распределенном хранилище.Здесь и общие значения для параметров экземпляров Pangolin. Некоторые параметры Pangolin должны совпадать на мастере и на реплике (с учетом того, что реплика может стать мастером). Поэтому их нужно настраивать только через распределенное хранилище.
Также отдельно стоит остановиться на параметрах
ttl,retry_timeoutиloop_wait.Параметр
ttlопределяет время жизни ключа лидера в DCS в секундах.Вспомним, что DCS является хранилищем типа «ключ-значение». Информация о том, какой узел сейчас является мастером, хранится в ключе лидера.
Каждые
loop_waitсекунд Pangolin Manager просыпается и выполняет некоторые действия, в числе которых обновление информации в ключе лидера.Если в течение
ttlсекунд мастер не обновил ключ лидера, то считается, что произошел сбой на мастере и инициализируются выборы нового мастера.Помимо этого, есть параметр
retry_timeout, определяющий время, через которое выполняется повторная попытка обращения к DCS, если предыдущая была неудачной.Для корректной работы кластера указанные параметры должны находиться в соотношении:
ttl>=loop_wait+ 2*retry_timeoutТакже есть секция
initdb, содержащая параметры для инициализации кластеров баз данных (не путайте с кластером узлов) утилитойinitdb. -
Посмотрите содержимое секции
postgresqlфайла конфигурации:[postgres@ServerName pangolin-manager]$ grep -A 33 '^postgresql' postgres.ymlpostgresql:pgpass: /home/postgres/.pgpasslisten: 0.0.0.0:5433bin_dir: /usr/pangolin-major.minor/binbin_dir_client: /usr/pangolin-dbms-client-major.minor/binconnect_address: 172.29.53.69:5433data_dir: /pgdata/06/data/create_replica_methods:- basebackupbasebackup:format: plainwal-method: fetchauthentication:replication:username: patronipassword: PatroniTestPassword1029!@database: replicationsuperuser:username: patronipassword: PatroniTestPassword1029!@callbacks:on_role_change: /opt/pangolin-pooler/bin/pangolin-pooler-restart.shparameters:# debug_pretty_print: False# pgaudit.log: none# performance_insights.enable: False# pg_stat_statements.track: all# pg_stat_statements.max: 5000# pg_hint_plan.parse_messages: warning# pg_hint_plan.message_level: log# masking_mode: disabled# relnblocks_enable: False# enable_monitor_object_modification_date: Falsearchive_mode: offВ этой секции хранятся параметры, относящиеся к экземпляру Pangolin, агентом которого является Pangolin Manager.
В том числе указан каталог данных, параметры подключения и конфигурационные параметры экземпляра.
Важно отметить, что конфигурационные параметры экземпляра, указанные в файле
postgres.yml, имеют приоритет над параметрами, указанными в DCS.Однако есть ряд параметров, которые должны совпадать на всех экземплярах кластера. Указание этих параметров в файле
postgres.ymlне даст эффекта.Также необходимо учитывать, что Pangolin Manager перезаписывает параметры в файлах
postgresql.conf,postgresql.auto.confиpg_hba.conf, поэтому изменение параметров на экземпляре Pangolin, например командойALTER SYSTEM, может быть перезаписано.Для применения изменений, внесенных в файл
postgres.yml, необходимо вызвать командуpangolin-manager-ctl reloadБолее подробно о конфигурировании Patroni (или Pangolin Manager) можно узнать из документации.
-
Посмотрите содержимое конфигурационного файла хранилища
etcd:[postgres@pangolin-prac-dba-3-4-rdldb7 pangolin-manager]$ cat /etc/etcd/etcd.confETCD_NAME="pangolin-prac-dba-3-4-rdldb7"ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"ETCD_ADVERTISE_CLIENT_URLS="http://172.29.53.69:2379"ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.29.53.69:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd"ETCD_INITIAL_CLUSTER="pangolin-prac-dba-3-4-gh2eru=http://172.29.53.232:2380,pangolin-prac-dba-3-4-rdldb7=http://172.29.53.69:2380,pangolin-prac-dba-3-4-n6vz6c=http://172.29.53.148:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_DATA_DIR="/var/lib/etcd"ETCD_ELECTION_TIMEOUT="5000"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ENABLE_V2="true"ETCD_LOG_OUTPUTS="/pgerrorlogs/06/etcd/etcd.log"ETCD_LOGGER="zap"У хранилища etcd есть свой конфигурационный файл.
Из него, в частности, можно узнать, какие узлы входят в состав распределенного хранилища (
ETCD_INITIAL_CLUSTER). -
Посмотрите состояние узлов кластера:
[postgres@ServerName pangolin-manager]$ pangolin-manager-ctl -c postgres.yml list+ Cluster:----------+-----------+----+-----------+| Member | Host | Role | State | TL | Lag in MB |+---------------+--------------------+--------------+-----------+----+-----------+| 172.29.53.148 | 172.29.53.148:5433 | Sync Standby | streaming | 2 | 0 || 172.29.53.69 | 172.29.53.69:5433 | Leader | running | 2 | |+---------------+--------------------+--------------+-----------+----+-----------+Утилита
pangolin-manager-ctlпозволяет как управлять кластером, так и получать информацию о его текущем состоянии.В этом случае с использованием команды
listи ключа-c, указывающего на файл конфигурации, была получена информация о текущем состоянии узлов кластера.Видно, что мастером является узел
172.29.53.69(Role=Leader), а синхронной репликой — узел172.29.53.148(Role=Sync Standby).Поле
Lag in MBсодержит информацию об отставании в MB реплики от мастера.Поле
TLсодержит номер линии времени. При переключении реплики на мастера указанный номер должен увеличиться для исключения пересечения сегментов WAL. -
Подключитесь в
psqlк базе данныхpostgresс рольюpatroni, введя пароль, указанный в секцииpostgresqlфайлаpostgresql.yml:[postgres@pangolin-prac-dba-3-4-rdldb7 pangolin-manager]$ psql -U patroniPassword for user patroni:psql (15.5)Type "help" for help.Роль
patroniиспользуется для администрирования кластера. Для администрирования экземпляра — рольpostgres. Чтобы можно было с ней подключаться с учетом текущих настроекpg_hba.conf, необходимо задать пароль. -
В сеансе
psqlзадайте пароль для ролиpostgres:postgres=# ALTER ROLE postgres PASSWORD 'PostgresTestPassword1029!@';ALTER ROLEСохраните указанный пароль. Он понадобится в дальнейшем.
-
В сеансе
psqlподключитесь базе данныхpostgresс рольюpostgres, указав IP-адрес хоста Replica:postgres=# \c - postgres 172.29.53.148Password for user postgres:You are now connected to database "postgres" as user "postgres" on host "172.29.53.148" at port "5433".Возможность подключения к реплике от имени роли
postgresподтверждает, что изменения, сделанные на мастере, до реплики дошли и применились. -
В сеансе
psqlпроверьте, что экземпляр работает в режиме восстановления:postgres=# SELECT pg_is_in_recovery();pg_is_in_recovery-------------------t(1 row)Экземпляр работает в режиме восстановления, а значит, является репликой.
-
Проверьте в сеансе
psql, работает ли реплика в режиме горячего резерва, и выйдите изpsql:postgres=# SHOW hot_standby;hot_standby-------------on(1 row)postgres=# \qРеплика работает в режиме горячего резерва, поэтому может выполнять запросы на чтение.
Перенаправление подключений
-
Подключитесь в
psqlк кластеру, указав два IP-адреса: для реплики и для мастера.Также в строке подключения укажите пароль для роли
postgresи значение параметраtarget_session_attrs=read-write:[postgres@ServerName pangolin-manager]$ psql "host=172.29.53.148,172.29.53.69 user=postgres password='PostgresTestPassword1029\!@' dbname=postgres target_session_attrs=read-write"psql (15.5)Type "help" for help.Вспомним, что для подключения к кластеру необходима какая-либо точка входа, которая будет направлять клиентов на подходящий узел.
В этом случае запросы на чтение могут выполняться как на мастере, так и на реплике, запросы на запись — только на мастере.
В качестве точки входа будем использовать библиотеку
libpq, с помощью которой в том числе организуется подключениеpsql.В строке подключения в параметре
hostперечисляются все хосты кластера, а в параметреtarget_session_attrsмогут быть указаны требования к подключению. Здесь мы запросили подключение, в котором могут выполняться запросы на запись (target_session_attrs=read-write).libpqпоследовательно перебирает хосты и организует подключение с первым из них, который удовлетворяет требованиями параметраtarget_session_attrs. -
Проверьте в сеансе
psqlпараметры подключения и выйдите изpsql:postgres=# \conninfoYou are connected to database "postgres" as user "postgres" on host "172.29.53.69" at port "5433".postgres=# \qБыло выполнено подключение к мастеру, поскольку было указано требования выполнения запросов на запись.
-
Снова подключитесь в
psqlк кластеру. На этот раз укажите значение параметраtarget_session_attrs=read-only:[postgres@pangolin-prac-dba-3-4-rdldb7 pangolin-manager]$ psql "host=172.29.53.148,172.29.53.69 user=postgres password='PostgresTestPassword1029\!@' dbname=postgres target_session_attrs=read-only"psql (15.5)Type "help" for help. -
Проверьте в сеансе
psqlпараметры подключения:postgres=# \conninfoYou are connected to database "postgres" as user "postgres" on host "172.29.53.148" at port "5433".Теперь было организовано подключение к реплике, поскольку она первой указана в списке хостов и не требовалось выполнение запросов на запись.
Настройка конфигурационных параметров
-
Посмотрите в сеансе
psqlзначения параметров, относящихся к скорости выполнения очистки и автоочистки, и выйдите изpsql:postgres=# SELECT name, setting, context FROM pg_settings WHERE name IN ('vacuum_cost_limit', 'autovacuum_vacuum_cost_limit', 'vacuum_cost_delay', 'autovacuum_vacuum_cost_delay');name | setting | context------------------------------+---------+---------autovacuum_vacuum_cost_delay | 20 | sighupautovacuum_vacuum_cost_limit | -1 | sighupvacuum_cost_delay | 0 | uservacuum_cost_limit | 200 | user(4 rows)postgres=# \qНаша текущая цель — настроить один из конфигурационных параметров сразу на всех экземплярах Pangolin.
Для этого значение параметра должно быть записано в хранилище
etcd.Однако, стоит учитывать, что значения параметров, указанных в файле
postgres.ymlимеют приоритет над значениями, указанными вetcd. Поэтому мы будем менять значение параметра, которого заведомо нет в файлеpostgres.yml.Для примера будем использовать параметр
autovacuum_vacuum_cost_limit, который определяет объем работы, выполняемый автоочисткой между паузами длинойautovacuum_vacuum_cost_delay.Можно заметить, что изменение значения параметра
autovacuum_vacuum_cost_limitв текущий момент не окажет влияния на реплику, поскольку очистка на реплике не выполняется. Однако, реплика рано или поздно станет мастером, тогда этот параметр станет актуальным.Значение параметра
autovacuum_vacuum_cost_limitпо умолчанию равно -1, что означает использование значения параметраvacuum_cost_limit, которое равно 200.Немного увеличим скорость выполнения автоочистки, задав значение
autovacuum_vacuum_cost_limit = 300.Обратите внимание, что параметр
autovacuum_vacuum_cost_limitимеет контекстsighup: для его применения необходимо перечитать конфигурацию путем посыла сигналаSIGHUP. -
Измените значение параметра
autovacuum_vacuum_cost_limitс использованиемpangolin-manager:[postgres@ServerName pangolin-manager]$ pangolin-manager-ctl -c postgres.yml edit-configloop_wait: 10maximum_lag_on_failover: 1048576postgresql:parameters:auth_activity_period: '60'authentication_max_workers: '16'logical_decoding_work_mem: 64MBmax_connections: '110'max_prepared_transactions: '3'max_replication_slots: '10'max_wal_senders: '10'max_worker_processes: '32'track_commit_timestamp: falsewal_keep_size: 8GBwal_level: replicawal_log_hints: trueuse_pg_rewind: trueuse_slots: trueretry_timeout: 60synchronous_mode: truesynchronous_mode_strict: falsettl: 135Выполнение изменений общих параметров в etcd выполняется командой
edit-configутилитыpangolin-manager-ctl.В ходе выполнения команды будет запущен текстовый редактор
Vimс отображением общих параметров узлов кластера.Добавьте
autovacuum_vacuum_cost_limitв список параметров:- Нажмите клавишу
i—Vimперейдет в режим редактирования - Вставьте строку
autovacuum_vacuum_cost_limit: 300в конце секцииparameters:(после строкиwal_log_hints: true) - Нажмите
Esc—Vimвыйдет из режима редактирования - Наберите
:wqи нажмитеEnter
Vimсохранит изменения и отдаст управление вызвавшей его команде, то естьpangolin-manager edit-config.В результате будет задан вопрос о необходимости применения измененного параметра:
---+++@@ -15,6 +15,7 @@wal_keep_size: 8GBwal_level: replicawal_log_hints: true+ autovacuum_vacuum_cost_limit: 300use_pg_rewind: trueuse_slots: trueretry_timeout: 60Apply these changes? [y/N]: yВведите
yи нажмитеEnter:Configuration changed - Нажмите клавишу
-
Подключитесь в
psqlк базе данныхpostgresна мастере и проверьте значение параметраautovacuum_vacuum_cost_limit:[postgres@pangolin-prac-dba-3-4-rdldb7 pangolin-manager]$ psql "user=postgres password='PostgresTestPassword1029\!@' dbname=postgres"Type "help" for help.postgres=# SHOW autovacuum_vacuum_cost_limit;autovacuum_vacuum_cost_limit------------------------------300(1 row)На мастере значение параметра успешно применилось.
Pangolin-Manager не только изменил значение параметра в конфигурационном файле экземпляра, но и послал сигнал
SIGHUP, чтобы экземпляр перечитал конфигурацию. -
Выйдите из
psql, снова подключитесь к базе данныхpostgres, на этот раз указав IP-адрес хоста Replica, и проверьте значение параметраautovacuum_vacuum_cost_limit:postgres=# \q[postgres@ServerName pangolin-manager]$ psql "host={IP-Address} user=postgres password='PostgresTestPassword1029\!@' dbname=postgres"psql (15.5)Type "help" for help.postgres=# SHOW autovacuum_vacuum_cost_limit;autovacuum_vacuum_cost_limit------------------------------300(1 row)И на реплике значение параметра успешно применилось.
-
Выйдите из
psql:postgres=# \q
Аварийное переключение (failover)
-
Проверьте состояние узлов:
[postgres@pangolin-prac-dba-3-4-rdldb7 pangolin-manager]$ pangolin-manager-ctl -c postgres.yml list+ Cluster: ClusterName ----------+-----------+----+-----------+| Member | Host | Role | State | TL | Lag in MB |+---------------+--------------------+--------------+-----------+----+-----------+| 172.29.53.148 | 172.29.53.148:5433 | Sync Standby | streaming | 2 | 0 || 172.29.53.69 | 172.29.53.69:5433 | Leader | running | 2 | |+---------------+--------------------+--------------+-----------+----+-----------+Пока все без изменений.
-
Выйдите из оболочки, запущенной от имени пользователя
postgres:[postgres@ServerName pangolin-manager]$ exitlogout -
Посмотрите состояние сервиса
pangolin-manager:[student@pangolin-prac-dba-3-4-rdldb7 ~]$ sudo systemctl status pangolin-manager● pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQLLoaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; enabled; preset: disabled)Active: active (running) since Sun 2025-11-30 09:29:55 UTC; 3 days agoMain PID: 73751 (pangolin-manage)Tasks: 21 (limit: 10826)Memory: 311.3MCPU: 7min 39.024sCGroup: /system.slice/pangolin-manager.service├─73751 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml├─93213 /usr/pangolin-major.minor/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.>├─93216 "postgres: ClusterName: logger "├─93217 "postgres: ClusterName: checkpointer "├─93218 "postgres: ClusterName: background writer "├─93220 "postgres: ClusterName: idle sessions terminator "├─93221 "postgres: ClusterName: walwriter "├─93222 "postgres: ClusterName: autovacuum launcher "├─93223 "postgres: ClusterName: integrity check launcher "├─93224 "postgres: ClusterName: license checker "├─93225 "postgres: ClusterName: authproc "├─93226 "postgres: ClusterName: password policy cache "├─93227 "postgres: ClusterName: pg_cron launcher "├─93228 "postgres: ClusterName: logical replication launcher "├─93233 "postgres: ClusterName: patroni postgres 127.0.0.1(49710) idle"└─94079 "postgres: ClusterName: walsender patroni 172.29.53.148(50580) streaming 0/E000000"Сервис Pangolin Manager работает.
Обратите внимание, что экземпляр Pangolin запускается указанным сервисом —
/usr/pangolin-major.minor/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.. -
Остановите сервис
pangolin_manager:[student@ServerName ~]$ sudo systemctl stop pangolin-manager -
Запустите оболочку от имени пользователя
postgresи проверьте состояние узлов:[student@pangolin-prac-dba-3-4-rdldb7 ~]$ sudo -iu postgres===============================================================You are connected to Pangolin Cluster- Hostname : pangolin-prac-dba-3-4-rdldb7.novalocal- IP Address : fe80::f816:3eff:fe50:6878%eth0 172.29.53.69---------------------------------------------------------------- node ( master ) :- node ( replica ) :- arbiter : 172.29.53.232- Manager version : 2.1.8- Pangolin version : 06.006.00===============================================================[postgres@ServerName ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list+ Cluster: ClusterName -----+---------+----+-----------+| Member | Host | Role | State | TL | Lag in MB |+---------------+--------------------+---------+---------+----+-----------+| 172.29.53.148 | 172.29.53.148:5433 | Leader | running | 3 | || 172.29.53.69 | 172.29.53.69:5433 | Replica | stopped | | unknown |+---------------+--------------------+---------+---------+----+-----------+Реплика быстро обнаружила отсутствие мастера, не дожидаясь истечения срока (
ttl) ключа лидера вetcd.Дело в том, что узлы проверяют состояние друг друга не только посредством
etcd, но и напрямую с использованиемREST API.После этого реплика повысила свой статус до мастера, а бывшему мастеру был назначен статус реплики, который начнет действовать после его восстановления.
Также обратите внимание, что увеличен на 1 номер линии времени (
TL=3). -
Подключитесь в
psqlк базе данныхpostgres, указав IP-адрес хоста Replica:[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ psql "host={IP-Address} user=postgres password='PostgresTestPassword1029\!@' dbname=postgres"psql (15.5)Type "help" for help. -
Проверьте, что теперь экземпляр не в режиме восстановления:
postgres=# SELECT pg_is_in_recovery();pg_is_in_recovery-------------------f(1 row)Теперь бывшая реплика стала мастером.
-
Создайте базу данных
some_dbи выйдите изpsql:postgres=# CREATE DATABASE some_db;CREATE DATABASEpostgres=# \q -
Выйдите из оболочки, запущенной от имени пользователя
postgres, и запустите сервисpangolin-manager:[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ exitlogout[student@pangolin-prac-dba-3-4-rdldb7 ~]$ sudo systemctl start pangolin-manager -
Запустите оболочку от имени пользователя
postgresи проверьте состояние узлов:[student@pangolin-prac-dba-3-4-rdldb7 ~]$ sudo -iu postgres===============================================================You are connected to Pangolin Cluster- Hostname : pangolin-prac-dba-3-4-rdldb7.novalocal- IP Address : fe80::f816:3eff:fe50:6878%eth0 172.29.53.69---------------------------------------------------------------- node ( master ) : 172.29.53.148- node ( replica ) : 172.29.53.69- arbiter : 172.29.53.232- Manager version : 2.1.8- Pangolin version : 06.006.00===============================================================[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list+ Cluster: ClusterName ----------+-----------+----+-----------+| Member | Host | Role | State | TL | Lag in MB |+---------------+--------------------+--------------+-----------+----+-----------+| 172.29.53.148 | 172.29.53.148:5433 | Leader | running | 3 | || 172.29.53.69 | 172.29.53.69:5433 | Sync Standby | streaming | 3 | 0 |+---------------+--------------------+--------------+-----------+----+-----------+Узел Master восстановлен после сбоя, теперь новая реплика стала активной.
-
Подключитесь в
psqlк базе данныхpostgresна текущем хосте и получите список баз данных:[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ psql " user=postgres password='PostgresTestPassword1029\!@' dbname=postgres"psql (15.5)Type "help" for help.postgres=# \lList of databasesName | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |some_db | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgres(4 rows)Изменения, сделанные на новом мастере, дошли до новой реплики после ее восстановления.
Процедура
failoverотработана.
Завершение
-
Выйдите из
psql:postgres=# \q -
Выйдите из оболочки, запущенной от имени пользователя
postgres:[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ exitlogout
Самопроверка
Вопрос 1
В оболочке bash выполнена следующая последовательность команд:
[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list
+ Cluster: bootcamp (7578448142890470662) ----------+-----------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+---------------+--------------------+--------------+-----------+----+-----------+
| 172.29.53.50 | 172.29.53.50:5433 | Sync Standby | streaming | 2 | 0 |
| 172.29.53.90 | 172.29.53.90:5433 | Sync Standby | streaming | 2 | 0 |
| 172.29.53.70 | 172.29.53.70:5433 | Leader | running | 2 | |
+---------------+--------------------+--------------+-----------+----+-----------+
[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ psql "host=172.29.53.70,172.29.53.50,172.29.53.90 user=postgres dbname=postgres target_session_attrs=read-only"
psql (15.5)
Type "help" for help.
К базе данных какого хоста было выполнено подключение в результате выполнения последней команды?
Вопрос 2
В оболочке bash выполнена следующая команда, показывающая текущее состояние настроек в кластере:
[postgres@pangolin-prac-dba-3-4-rdldb7 ~]$ pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config
loop_wait: 10
maximum_lag_on_failover: 1048576
postgresql:
parameters:
auth_activity_period: '60'
authentication_max_workers: '16'
logical_decoding_work_mem: 64MB
maintenance_work_mem: 256MB
max_connections: '110'
max_prepared_transactions: '3'
max_replication_slots: '10'
max_wal_senders: '10'
max_worker_processes: '32'
track_commit_timestamp: false
wal_keep_size: 8GB
wal_level: replica
wal_log_hints: true
use_pg_rewind: true
use_slots: true
retry_timeout: 35
synchronous_mode: true
synchronous_mode_strict: false
ttl: 85
Через какой интервал времени (в секундах) мастер обновляет ключ лидера в DCS?
Вопрос 3
Каким способом могут изменяться конфигурационные параметры сразу на всех экземплярах кластера?
Вопрос 4
Какое минимальное количество узлов с DCS должно быть в кластере, состоящем из одного мастера и двух реплик?