Задание 2: Развертывание по умолчанию с помощью Pangolin Installer
В этом разделе мы изучим процесс проверки корректности виртуального окружения, выполним запуск установки по умолчанию и последующую проверку ее результатов. Завершающим этапом будет подключение к кластеру для подтверждения его работоспособности.
Проверка виртуального окружения
Виртуальное окружение Python было установлено в задании второго уровня этой темы.
Проверим:
[student@srv1 ~]$ rpm -qa 'pangolin*venv*er'
pangolin-ansible-venv-controller-6.7.0-redos8.0.x86_64
Виртуальное окружение представляет собой каталог с программным обеспечением Python:
[student@srv1 ~]$ ls -ld /opt/pangolin*venv*er
drwxr-xr-x 6 root root 4096 апр 17 14:43 /opt/pangolin-ansible-venv-controller
В этом каталоге все необходимое ПО для работы ролей Ansible, выполняющих установку СУБД Pangolin.
В частности, в подкаталоге bin имеется скрипт activate, позволяющий активировать виртуальное окружение:
[student@srv1 ~]$ ls -l /opt/pangolin*venv*er/bin/a*te
-rw-r--r-- 1 root root 1764 апр 17 14:22 /opt/pangolin-ansible-venv-controller/bin/activate
Права на исполнение у этого скрипта отсутствуют, так как он предназначен для загрузки в текущую оболочку с помощью команд source или . (точка).
Сравним значение переменной окружения PATH до активации виртуального окружения:
[student@srv1 ~]$ echo $PATH
/home/student/.local/bin:/home/student/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
[student@srv1 ~]$ which python
/usr/bin/python
И после:
[student@srv1 ~]$ . /opt/pangolin-ansible-venv-controller/bin/activate
(pangolin-ansible-venv-controller) [student@srv1 ~]$ echo $PATH
/opt/pangolin-ansible-venv-controller/bin:/home/student/.local/bin:/home/student/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
(pangolin-ansible-venv-controller) [student@srv1 ~]$ which python
/opt/pangolin-ansible-venv-controller/bin/python
В виртуальном окружении установлены Python пакеты:
(pangolin-ansible-venv-controller) [student@srv1 ~]$ pip list
Package Version
------------ -------
ansible 4.10.0
ansible-core 2.11.7
cffi 2.0.0
cryptography 46.0.3
dnspython 2.7.0
Jinja2 3.1.6
jmespath 1.0.1
MarkupSafe 3.0.3
netaddr 0.8.0
packaging 25.0
pip 25.3
pycparser 2.23
pyparsing 3.2.1
PyYAML 6.0.3
resolvelib 0.5.4
setuptools 80.9.0
six 1.17.0
wheel 0.45.1
А в ОС Ansible посредством RPM не установлен:
[student@srv1 ~]$ rpm -qa | grep -i ^ansible
Запуск установки по умолчанию
После выполнения задания второго уровня уже установлен и работает кластер из трех узлов. Ставится задача выполнить повторную установку по умолчанию. При этом Pangolin Installer должен автоматически удалить предыдущий развернутый кластер.
Воспользуемся уже существующим файлом конфигурации, в котором не производилось никаких изменений:
[student@srv1 ~]$ less config.yml
Вывод команды:
hosts:
master:
hostname: srv1
username: student
password: student
replica:
hostname: srv2
username: student
password: student
arbiter:
hostname: srv3
username: student
password: student
local_distr_path: /home/student/Distr/distributive
pangolin_license_path: /home/student/license.json
tune_pangolin_local_repo: true
[student@srv1 ~]$ /opt/pangolin-ansible-venv-controller/bin/pangolin-installer terminal -c config.yml -a install
Вывод команды:
Запуск предварительных проверок.
Предварительные проверки пройдены.
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| clean |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Node | Action | CPU | MEM | Disk available | OS | Version OS | Packages Removed | Packages Installed | Configuration |
|----------------|---------|-----|------|--------------------------|--------|------------|------------------------------------------|--------------------|---------------|
| node: master | install | 1 | 4 GB | / 14G | RED OS | 8.0 | pangolin-ansible-venv-controller (6.7.0) | | cluster |
| ip/dns: (srv1) | | | | | | | pangolin-installer (1.0.3) | | |
| | | | | | | | pangolin-timescaledb-6.7-apache (2.25.0) | | |
| | | | | | | | pangolin-ansible-venv-controlled (6.7.0) | | |
| | | | | | | | pangolin-auth-password (6.7.0) | | |
| | | | | | | | pangolin-certs-rotate (6.7.0) | | |
| | | | | | | | pangolin-security-utilities (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7-client (6.7.0) | | |
| | | | | | | | pangolin-manager-venv (2.1.13) | | |
| | | | | | | | pangolin-manager (2.1.13) | | |
| | | | | | | | pangolin-backup-tools-venv (6.7.0) | | |
| | | | | | | | pangolin-backup-tools (6.7.0) | | |
| | | | | | | | pangolin-pooler (1.5.6) | | |
| | | | | | | | pangolin-diagnostic-tool (6.7.0) | | |
| | | | | | | | pangolin-auth-reencrypt (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-pltcl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-bool-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-ltree-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-tuner (1.1.1) | | |
| | | | | | | | | | |
| node: replica | install | 1 | 4 GB | / 18G | RED OS | 8.0 | pangolin-timescaledb-6.7-apache (2.25.0) | | cluster |
| ip/dns: (srv2) | | | | | | | pangolin-ansible-venv-controlled (6.7.0) | | |
| | | | | | | | pangolin-auth-password (6.7.0) | | |
| | | | | | | | pangolin-certs-rotate (6.7.0) | | |
| | | | | | | | pangolin-security-utilities (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7-client (6.7.0) | | |
| | | | | | | | pangolin-manager-venv (2.1.13) | | |
| | | | | | | | pangolin-manager (2.1.13) | | |
| | | | | | | | pangolin-backup-tools-venv (6.7.0) | | |
| | | | | | | | pangolin-backup-tools (6.7.0) | | |
| | | | | | | | pangolin-pooler (1.5.6) | | |
| | | | | | | | pangolin-diagnostic-tool (6.7.0) | | |
| | | | | | | | pangolin-auth-reencrypt (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-pltcl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-bool-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-ltree-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-tuner (1.1.1) | | |
| | | | | | | | | | |
| node: arbiter | install | 1 | 4 GB | / 19G | RED OS | 8.0 | | | cluster |
| ip/dns: (srv3) | | | | | | | | | |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
Процедура очистит стенд от компонентов Pangolin. Продолжить? (Y/N): Y
Выполняемая задача: clean
🟢 Роль MAIN PLAY - Завершена! [Время выполнения: 0:02:14] Задач выполнено: 43 | | |#####################################|
Очистка стенда(ов) прошла успешно!
Запуск предварительных проверок.
Предварительные проверки пройдены.
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| install |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Node | Action | CPU | MEM | Disk available | OS | Version OS | Packages Removed | Packages Installed | Configuration |
|----------------|---------|-----|------|--------------------------|--------|------------|------------------------------------------|--------------------|---------------|
| node: master | install | 1 | 4 GB | / 15G | RED OS | 8.0.2 | pangolin-ansible-venv-controller (6.7.0) | | cluster |
| ip/dns: (srv1) | | | | | | | pangolin-installer (1.0.3) | | |
| | | | | | | | pangolin-timescaledb-6.7-apache (2.25.0) | | |
| | | | | | | | | | |
| node: replica | install | 1 | 4 GB | / 20G | RED OS | 8.0.2 | pangolin-timescaledb-6.7-apache (2.25.0) | | cluster |
| ip/dns: (srv2) | | | | | | | | | |
| node: arbiter | install | 1 | 4 GB | / 20G | RED OS | 8.0.2 | | | cluster |
| ip/dns: (srv3) | | | | | | | | | |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
Выполняемая задача: install
🟢 Роль MAIN PLAY - Завершена! [Время выполнения: 0:00:10] Задач выполнено: 20 | | |#####################################|
🟢 Роль PANGOLIN_CHECKS - Завершена! [Время выполнения: 0:07:16] Задач выполнено: 662 | | |#####################################|
🟢 Роль PANGOLIN_LICENSE - Завершена! [Время выполнения: 0:00:04] Задач выполнено: 7 | | |#####################################|
🟢 Роль PANGOLIN_AUTH_PASSWORD - Завершена! [Время выполнения: 0:00:05] Задач выполнено: 8 | | |#####################################|
🟢 Роль ETCD - Завершена! [Время выполнения: 0:00:31] Задач выполнено: 34 | | |#####################################|
🟢 Роль PANGOLIN_CERTS_ROTATE - Завершена! [Время выполнения: 0:00:23] Задач выполнено: 26 | | |#####################################|
🟢 Роль PANGOLIN_SECURITY_UTILITIES - Завершена! [Время выполнения: 0:00:08] Задач выполнено: 18 | | |#####################################|
🟢 Роль PANGOLIN_DBMS - Завершена! [Время выполнения: 0:00:57] Задач выполнено: 96 | | |#####################################|
🟢 Роль PANGOLIN_MANAGER - Завершена! [Время выполнения: 0:01:06] Задач выполнено: 31 | | |#####################################|
🟢 Роль PANGOLIN_BACKUP_TOOLS - Завершена! [Время выполнения: 0:00:14] Задач выполнено: 37 | | |#####################################|
🟢 Роль PANGOLIN_POOLER - Завершена! [Время выполнения: 0:00:17] Задач выполнено: 16 | | |#####################################|
🟢 Роль PANGOLIN_POOLER_MT - Завершена! [Время выполнения: 0:00:00] Задач выполнено: 5 | | |#####################################|
🟢 Роль PANGOLIN_DIAGNOSTIC_TOOL - Завершена! [Время выполнения: 0:00:06] Задач выполнено: 12 | | |#####################################|
🟢 Роль PANGOLIN_AUTH_REENCRYPT - Завершена! [Время выполнения: 0:00:18] Задач выполнено: 20 | | |#####################################|
🟢 Роль PANGOLIN_UNTRUSTED_EXTENSIONS - Завершена! [Время выполнения: 0:01:02] Задач выполнено: 151 | | |#####################################|
🟢 Роль CONFIGURE - Завершена! [Время выполнения: 0:01:51] Задач выполнено: 167 | | |#####################################|
Установка Pangolin прошла успешно!
Запуск предварительных проверок.
Предварительные проверки пройдены.
|---------------------------------------------------------------------------|
| after install |
|---------------------------------------------------------------------------|
| Node | Action | Packages Installed |
|----------------|---------------|------------------------------------------|
| node: master | after install | pangolin-ansible-venv-controller (6.7.0) |
| ip/dns: (srv1) | | pangolin-installer (1.0.3) |
| | | pangolin-timescaledb-6.7-apache (2.25.0) |
| | | pangolin-ansible-venv-controlled (6.7.0) |
| | | pangolin-auth-password (6.7.0) |
| | | pangolin-certs-rotate (6.7.0) |
| | | pangolin-security-utilities (6.7.0) |
| | | pangolin-dbms-6.7 (6.7.0) |
| | | pangolin-dbms-6.7-client (6.7.0) |
| | | pangolin-manager-venv (2.1.13) |
| | | pangolin-manager (2.1.13) |
| | | pangolin-backup-tools-venv (6.7.0) |
| | | pangolin-backup-tools (6.7.0) |
| | | pangolin-pooler (1.5.6) |
| | | pangolin-diagnostic-tool (6.7.0) |
| | | pangolin-auth-reencrypt (6.7.0) |
| | | pangolin-dbms-6-pltcl (6.7.0) |
| | | pangolin-dbms-6-plperl (6.7.0) |
| | | pangolin-dbms-6-jsonb-plperl (6.7.0) |
| | | pangolin-dbms-6-hstore-plperl (6.7.0) |
| | | pangolin-dbms-6-bool-plperl (6.7.0) |
| | | pangolin-dbms-6-plpython3 (6.7.0) |
| | | pangolin-dbms-6-ltree-plpython3 (6.7.0) |
| | | pangolin-dbms-6-jsonb-plpython3 (6.7.0) |
| | | pangolin-dbms-6-hstore-plpython3 (6.7.0) |
| | | pangolin-tuner (1.1.1) |
| | | |
| node: replica | after install | pangolin-timescaledb-6.7-apache (2.25.0) |
| ip/dns: (srv2) | | pangolin-ansible-venv-controlled (6.7.0) |
| | | pangolin-auth-password (6.7.0) |
| | | pangolin-certs-rotate (6.7.0) |
| | | pangolin-security-utilities (6.7.0) |
| | | pangolin-dbms-6.7 (6.7.0) |
| | | pangolin-dbms-6.7-client (6.7.0) |
| | | pangolin-manager-venv (2.1.13) |
| | | pangolin-manager (2.1.13) |
| | | pangolin-backup-tools-venv (6.7.0) |
| | | pangolin-backup-tools (6.7.0) |
| | | pangolin-pooler (1.5.6) |
| | | pangolin-diagnostic-tool (6.7.0) |
| | | pangolin-auth-reencrypt (6.7.0) |
| | | pangolin-dbms-6-pltcl (6.7.0) |
| | | pangolin-dbms-6-plperl (6.7.0) |
| | | pangolin-dbms-6-jsonb-plperl (6.7.0) |
| | | pangolin-dbms-6-hstore-plperl (6.7.0) |
| | | pangolin-dbms-6-bool-plperl (6.7.0) |
| | | pangolin-dbms-6-plpython3 (6.7.0) |
| | | pangolin-dbms-6-ltree-plpython3 (6.7.0) |
| | | pangolin-dbms-6-jsonb-plpython3 (6.7.0) |
| | | pangolin-dbms-6-hstore-plpython3 (6.7.0) |
| | | pangolin-tuner (1.1.1) |
| | | |
| node: arbiter | after install | |
| ip/dns: (srv3) | | |
|---------------------------------------------------------------------------|
Проверка результатов установки
После успешной установки должен работать кластер физической репликации с тремя узлами:
- мастер
- реплика
- арбитр
Собственно кластер физической репликации входят лишь мастер и реплика. Но с точки зрения etcd - системы управления распределенной конфигурацией, арбитр – тоже часть кластера, на которой нет СУБД.
Проверим процессы в кластере:
-
На мастере:
[student@srv1 ~]$ ps f -C postgresPID TTY STAT TIME COMMAND40745 ? S 0:07 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=040748 ? Ss 0:00 \_ postgres: clustername: logger40749 ? Ss 0:00 \_ postgres: clustername: checkpointer40750 ? Ss 0:01 \_ postgres: clustername: background writer40752 ? Ss 0:00 \_ postgres: clustername: idle sessions terminator40753 ? Ss 0:00 \_ postgres: clustername: walwriter40754 ? Ss 0:00 \_ postgres: clustername: autovacuum launcher40755 ? Ss 0:00 \_ postgres: clustername: integrity check launcher40756 ? Ss 0:00 \_ postgres: clustername: license checker40757 ? Ss 0:17 \_ postgres: clustername: authproc40758 ? Ss 0:00 \_ postgres: clustername: password policy cache40759 ? Ss 0:01 \_ postgres: clustername: pg_cron launcher40760 ? Ss 0:00 \_ postgres: clustername: logical replication launcher40765 ? Ss 0:09 \_ postgres: clustername: patroni postgres 127.0.0.1(51048) idle40769 ? Ss 0:08 \_ postgres: clustername: walsender patroni <IP-Address2>(33130) streaming 0/6000000 -
На реплике:
[student@srv1 ~]$ ssh srv2 ps f -C postgresPID TTY STAT TIME COMMAND25402 ? S 0:00 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=clustername --wal_level=replica --hot_standby=on --max_connections=110 --max_wal_senders=10 --max_prepared_transactions=3 --max_locks_per_transaction=64 --track_commit_timestamp=False --max_replication_slots=10 --max_worker_processes=32 --wal_log_hints=True --authentication_max_workers=16 --enable_page_compression=off25405 ? Ss 0:00 \_ postgres: clustername: logger25406 ? Ss 0:00 \_ postgres: clustername: checkpointer25407 ? Ss 0:01 \_ postgres: clustername: background writer25408 ? Ss 0:00 \_ postgres: clustername: startup recovering 00000002000000000000000525409 ? Ss 0:00 \_ postgres: clustername: idle sessions terminator25410 ? Ss 0:16 \_ postgres: clustername: authproc25411 ? Ss 0:00 \_ postgres: clustername: password policy cache25412 ? Ss 0:34 \_ postgres: clustername: walreceiver streaming 0/600000025415 ? Ss 0:00 \_ postgres: clustername: integrity check launcher25416 ? Ss 0:00 \_ postgres: clustername: license checker25419 ? Ss 0:06 \_ postgres: clustername: patroni postgres 127.0.0.1(52666) idle
Есть более удобные механизмы проверки работоспособности кластера:
[student@srv1 ~]$ sudo su - postgres
===============================================================
You are connected to Pangolin Cluster (clustername)
- Hostname : srv1
- IP Address : <IP-Address1>
---------------------------------------------------------------
- node ( master ) : <IP-Address1>
- node ( replica ) : <IP-Address2>
- arbiter : <IP-Address3>
- Manager version : 2.1.13
- Pangolin version : 6.7.0
===============================================================
[postgres@srv1 ~]$ alias
Вывод команды:
alias egrep='egrep --color=auto'
alias elog='cat /pgerrorlogs/srv1/etcd/etcd.log'
alias errors='ls -t /pgerrorlogs/srv1/postgresql-2026-04-19*.log | head -1 | xargs tail -F | grep -E '\''WARNING|ERROR|FATAL|ПРЕДУПРЕЖДЕНИЕ|ОШИБКА|ВАЖНО'\'''
alias fail='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml failover $CLNAME'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias hba='vi $PGDATA/pg_hba.conf'
alias health='curl -k -m 3 http://srv1:2379/health;echo " http://srv1:2379";curl -k -m 3 http://srv2:2379/health;echo " http://srv2:2379";curl -k -m 3 http://srv3:2379/health;echo " http://srv3:2379"'
alias hist='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml history $CLNAME'
alias l.='ls -d .* --color=auto'
alias list='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list $CLNAME'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mc='. /usr/libexec/mc/mc-wrapper.sh'
alias members='etcdctl --endpoints=srv1:2379,srv2:2379,srv3:2379 member list -w table'
alias pgconfig='curl -k -s -m 3 http://srv1:8008/config | jq'
alias pglog='ls -t /pgerrorlogs/srv1/postgresql-$NOW*.log | head -1 | xargs tail -n 300'
alias pgver='psql -c '\''select version();'\'' | sed "s| on | ($(psql --single-line --no-align -c '\''select product_version();'\'' | sed '\''2q;d'\'' )) on |"'
alias ptlog='ls -t /pgerrorlogs/srv1/pangolin-manager/pangolin-manager*.log | head -1 | xargs tail -n 300'
alias ptver='pangolin-manager-ctl version'
alias reload='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload $CLNAME'
alias restart='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart $CLNAME'
alias status='sudo systemctl status pangolin-manager --no-pager --full'
alias switch='pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml switchover $CLNAME'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
Список членов кластера с точки зрения etcd:
[postgres@srv1 ~]$ members
|--------------------------------------------------------------------------------------|
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
|--------------------------------------------------------------------------------------|
| e6662c02ef00263 | started | srv3 | http://srv3:2380 | http://srv3:2379 | false |
| 8645e1dba92d1be2 | started | srv2 | http://srv2:2380 | http://srv2:2379 | false |
| e739b3d2d28502b5 | started | srv1 | http://srv1:2380 | http://srv1:2379 | false |
|--------------------------------------------------------------------------------------|
Исправность узлов с точки зрения etcd:
[postgres@srv1 ~]$ health
{"health":"true","reason":""} http://srv1:2379
{"health":"true","reason":""} http://srv2:2379
{"health":"true","reason":""} http://srv3:2379
Список узлов кластера с точки зрения Pangolin Manager:
[postgres@srv1 ~]$ list
+ Cluster: clustername (7630156715853689531) --------------------------------------|
| Member | Host | Role | State | TL | Lag in MB | Pending restart |
|----------------------------------------------------------------------------------|
| srv1 | srv1:5433 | Leader | running | 2 | | * |
| srv2 | srv2:5433 | Sync Standby | streaming | 2 | 0 | |
|----------------------------------------------------------------------------------|
Подключение к кластеру
В файле Distr/distributive/installer/group_vars/custom_config_initial.yml имеется секция с предустановленными паролями по умолчанию.
Получим пароль суперпользователя СУБД, автоматически использованный при установке по умолчанию:
[student@srv1 ~]$ awk '/postgres_db_pass:/{print $2}' Distr/distributive/installer/group_vars/custom_config_initial.yml
'<password>'
Проверим:
[student@srv1 ~]$ psql -c 'SELECT product_version()' "host=srv1 port=5433 user=postgres password='<password>'"
product_version
-------------------------------------------
Platform V Pangolin DB 6.7.0
(1 row)