欢迎光临
我们一直在努力

postgresql之patroni高可用

实验环境:

3台VM:Rocky Linux 9–关闭防火墙,SELinux

postgresql 18

etcd Version: 3.6.6

patroni 4.1.0

##安装etcd,patroni,postgresql 18

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

yum install -y postgresql18-server

/usr/pgsql-18/bin/postgresql-18-setup initdb

##安装etcd需要先启用pgdg-rhel9-extras

yum config-manager –enable pgdg-rhel9-extras

yum install etcd

 

yum install patroni patroni-etcd

##节点1的etcd配置文件

[root@linux050 etcd]# cat etcd.conf  # [member] ETCD_NAME=etcd050 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_COUNT="10000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" ETCD_LISTEN_PEER_URLS="http://192.168.56.50:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.56.50:2379,http://127.0.0.1:2379" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" #ETCD_CORS="" # #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.50:2380" # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://…" ETCD_INITIAL_CLUSTER="etcd050=http://192.168.56.50:2380,etcd060=http://192.168.56.60:2380,etcd070=http://192.168.56.70:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.50:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_SRV="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_ENABLE_V2="true" #ETCD_STRICT_RECONFIG_CHECK="false" #ETCD_AUTO_COMPACTION_RETENTION="0" # #[proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_AUTO_TLS="false" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" #ETCD_PEER_AUTO_TLS="false" # #[logging] #ETCD_DEBUG="false" # examples for -log-package-levels etcdserver=WARNING,security=DEBUG #ETCD_LOG_PACKAGE_LEVELS="" [root@linux050 etcd]# 

##节点2的etcd配置文件

[root@linux060 ~]# cat /etc/etcd/etcd.conf  # [member] ETCD_NAME=etcd060 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_COUNT="10000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" ETCD_LISTEN_PEER_URLS="http://192.168.56.60:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.56.60:2379,http://127.0.0.1:2379" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" #ETCD_CORS="" # #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.60:2380" # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://…" ETCD_INITIAL_CLUSTER="etcd050=http://192.168.56.50:2380,etcd060=http://192.168.56.60:2380,etcd070=http://192.168.56.70:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.60:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_SRV="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_ENABLE_V2="true" #ETCD_STRICT_RECONFIG_CHECK="false" #ETCD_AUTO_COMPACTION_RETENTION="0" # #[proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_AUTO_TLS="false" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" #ETCD_PEER_AUTO_TLS="false" # #[logging] #ETCD_DEBUG="false" # examples for -log-package-levels etcdserver=WARNING,security=DEBUG #ETCD_LOG_PACKAGE_LEVELS="" [root@linux060 ~]# 

##节点3的etcd配置文件

[root@linux070 ~]# cat /etc/etcd/etcd.conf  # [member] ETCD_NAME=etcd070 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_COUNT="10000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" ETCD_LISTEN_PEER_URLS="http://192.168.56.70:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.56.70:2379,http://127.0.0.1:2379" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" #ETCD_CORS="" # #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.70:2380" # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://…" ETCD_INITIAL_CLUSTER="etcd050=http://192.168.56.50:2380,etcd060=http://192.168.56.60:2380,etcd070=http://192.168.56.70:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.70:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_SRV="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_ENABLE_V2="true" #ETCD_STRICT_RECONFIG_CHECK="false" #ETCD_AUTO_COMPACTION_RETENTION="0" # #[proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_AUTO_TLS="false" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" #ETCD_PEER_AUTO_TLS="false" # #[logging] #ETCD_DEBUG="false" # examples for -log-package-levels etcdserver=WARNING,security=DEBUG #ETCD_LOG_PACKAGE_LEVELS="" [root@linux070 ~]# 

[root@linux050 ~]# etcdctl endpoint health –cluster

http://192.168.56.70:2379 is healthy: successfully committed proposal: took = 11.169064ms

http://192.168.56.50:2379 is healthy: successfully committed proposal: took = 9.853069ms

http://192.168.56.60:2379 is healthy: successfully committed proposal: took = 23.430727ms

[root@linux050 ~]#

在节点1初始化DB,插入几条数据,模拟standalone转成cluster

[root@linux050 ~]# /usr/pgsql-18/bin/postgresql-18-setup initdb Initializing database … OK

[root@linux050 ~]#

create user ccc password 'ccc' createdb;

CREATE USER patroni WITH SUPERUSER ENCRYPTED PASSWORD 'patroni';

CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'replicator';

mkdir -p /data/pg/ccc_tbs01

chown -R postgres:postgres /data/pg

postgres=# create tablespace ccc_tbs01 owner ccc location '/data/pg/ccc_tbs01';

CREATE TABLESPACE

postgres=#

postgres=# create database ccc owner=ccc tablespace=ccc_tbs01;

CREATE DATABASE

postgres=#

postgres=# \\c ccc

You are now connected to database "ccc" as user "postgres".

ccc=# set role ccc;

SET

ccc=> select current_role;

current_role

————–

ccc

(1 row)

ccc=> create schema ccc;

CREATE SCHEMA

ccc=> create table t1(id int,name varchar(20));

CREATE TABLE

ccc=> \\dt

List of tables

Schema | Name | Type | Owner

——–+——+——-+——-

ccc | t1 | table | ccc

(1 row)

ccc=> insert into t1 values(1,'aaa');

INSERT 0 1

ccc=> insert into t1 values(2,'bbb');

INSERT 0 1

ccc=> insert into t1 values(3,'ccc');

INSERT 0 1

ccc=> select * from t1;

id | name

—-+——

1 | aaa

2 | bbb

3 | ccc

(3 rows)

ccc=>

开始配置patroni

##节点1的配置文件

[root@linux050 patroni]# cat patroni.yml  scope: 'pgcluster' name: pg050

log:   format: '%(asctime)s %(levelname)s: %(message)s'   level: INFO   max_queue_size: 1000   traceback_level: ERROR   type: plain

restapi:   connect_address: 192.168.56.50:8008   listen: 192.168.56.50:8008

etcd3:   hosts:     – 192.168.56.50:2379     – 192.168.56.60:2379     – 192.168.56.70:2379

# The bootstrap configuration. Works only when the cluster is not yet initialized. # If the cluster is already initialized, all changes in the `bootstrap` section are ignored! bootstrap:   # This section will be written into <dcs>:/<namespace>/<scope>/config after initializing   # new cluster and all other cluster members will use it as a `global configuration`.   # WARNING! If you want to change any of the parameters that were set up   # via `bootstrap.dcs` section, please use `patronictl edit-config`!   dcs:     loop_wait: 10     retry_timeout: 10     ttl: 30     postgresql:       parameters:         DateStyle: ISO, MDY         TimeZone: Asia/Shanghai         archive_mode: 'on'         autovacuum_worker_slots: '16'         cluster_name: ''         default_text_search_config: pg_catalog.english         dynamic_shared_memory_type: posix         hot_standby: 'on'         lc_messages: en_US.UTF-8         lc_monetary: en_US.UTF-8         lc_numeric: en_US.UTF-8         lc_time: en_US.UTF-8         log_destination: stderr         log_directory: log         log_filename: postgresql-%a.log         log_line_prefix: '%m [%p] '         log_rotation_age: 1d         log_rotation_size: '0'         log_timezone: Asia/Shanghai         log_truncate_on_rotation: 'on'         logging_collector: 'on'         max_connections: '100'         max_locks_per_transaction: '64'         max_prepared_transactions: '0'         max_replication_slots: '10'         max_wal_senders: '10'         max_wal_size: 1GB         max_worker_processes: '8'         min_wal_size: 80MB         shared_buffers: 128MB         summarize_wal: 'on'         track_commit_timestamp: 'off'         wal_keep_size: '0'         wal_level: replica         wal_log_hints: 'off'       use_slots: true

postgresql:   authentication:     replication:       password: 'replicator'       username: 'replicator'     superuser:       password: 'patroni'       username: 'patroni'   bin_dir: /usr/pgsql-18/bin   connect_address: 192.168.56.50:5432   data_dir: /var/lib/pgsql/18/data   listen: 192.168.56.50:5432   parameters:     archive_command: gzip < %p > /data/pg/archivedir/%f.gz     config_file: /var/lib/pgsql/18/data/postgresql.conf     hba_file: /var/lib/pgsql/18/data/pg_hba.conf     ident_file: /var/lib/pgsql/18/data/pg_ident.conf     restore_command: gunzip < /data/pg/archivedir/%f.gz > %p   pg_hba:   – local   all             all                                     peer   – host    all             all             127.0.0.1/32            scram-sha-256   – host    all             all             192.168.56.0/24         scram-sha-256   – host    all             all             ::1/128                 scram-sha-256   – local   replication     all                                     peer   – host    replication     all             127.0.0.1/32            scram-sha-256   – host    replication     all             ::1/128                 scram-sha-256

tags:   clonefrom: true   failover_priority: 1   noloadbalance: false   nostream: false   nosync: false   sync_priority: 1 [root@linux050 patroni]# 

##节点2的配置文件

[root@linux060 ~]# cat /etc/patroni/patroni.yml  scope: 'pgcluster' name: pg060

log:   format: '%(asctime)s %(levelname)s: %(message)s'   level: INFO   max_queue_size: 1000   traceback_level: ERROR   type: plain

restapi:   connect_address: 192.168.56.60:8008   listen: 192.168.56.60:8008

etcd3:   hosts:     – 192.168.56.50:2379     – 192.168.56.60:2379     – 192.168.56.70:2379

# The bootstrap configuration. Works only when the cluster is not yet initialized. # If the cluster is already initialized, all changes in the `bootstrap` section are ignored! bootstrap:   # This section will be written into <dcs>:/<namespace>/<scope>/config after initializing   # new cluster and all other cluster members will use it as a `global configuration`.   # WARNING! If you want to change any of the parameters that were set up   # via `bootstrap.dcs` section, please use `patronictl edit-config`!   dcs:     loop_wait: 10     retry_timeout: 10     ttl: 30     postgresql:       parameters:         DateStyle: ISO, MDY         TimeZone: Asia/Shanghai         archive_mode: 'on'         autovacuum_worker_slots: '16'         cluster_name: ''         default_text_search_config: pg_catalog.english         dynamic_shared_memory_type: posix         hot_standby: 'on'         lc_messages: en_US.UTF-8         lc_monetary: en_US.UTF-8         lc_numeric: en_US.UTF-8         lc_time: en_US.UTF-8         log_destination: stderr         log_directory: log         log_filename: postgresql-%a.log         log_line_prefix: '%m [%p] '         log_rotation_age: 1d         log_rotation_size: '0'         log_timezone: Asia/Shanghai         log_truncate_on_rotation: 'on'         logging_collector: 'on'         max_connections: '100'         max_locks_per_transaction: '64'         max_prepared_transactions: '0'         max_replication_slots: '10'         max_wal_senders: '10'         max_wal_size: 1GB         max_worker_processes: '8'         min_wal_size: 80MB         shared_buffers: 128MB         summarize_wal: 'on'         track_commit_timestamp: 'off'         wal_keep_size: '0'         wal_level: replica         wal_log_hints: 'off'       use_slots: true

postgresql:   authentication:     replication:       password: 'replicator'       username: 'replicator'     superuser:       password: 'patroni'       username: 'patroni'   bin_dir: /usr/pgsql-18/bin   connect_address: 192.168.56.60:5432   data_dir: /var/lib/pgsql/18/data   listen: 192.168.56.60:5432   parameters:     archive_command: gzip < %p > /data/pg/archivedir/%f.gz     config_file: /var/lib/pgsql/18/data/postgresql.conf     hba_file: /var/lib/pgsql/18/data/pg_hba.conf     ident_file: /var/lib/pgsql/18/data/pg_ident.conf     restore_command: gunzip < /data/pg/archivedir/%f.gz > %p   pg_hba:   – local   all             all                                     peer   – host    all             all             127.0.0.1/32            scram-sha-256   – host    all             all             192.168.56.0/24         scram-sha-256   – host    all             all             ::1/128                 scram-sha-256   – local   replication     all                                     peer   – host    replication     all             127.0.0.1/32            scram-sha-256   – host    replication     all             ::1/128                 scram-sha-256

tags:   clonefrom: true   failover_priority: 1   noloadbalance: false   nostream: false   nosync: false   sync_priority: 1 [root@linux060 ~]# 

##节点3的配置文件

[root@linux070 ~]# cat /etc/patroni/patroni.yml  scope: 'pgcluster' name: pg070

log:   format: '%(asctime)s %(levelname)s: %(message)s'   level: INFO   max_queue_size: 1000   traceback_level: ERROR   type: plain

restapi:   connect_address: 192.168.56.70:8008   listen: 192.168.56.70:8008

etcd3:   hosts:     – 192.168.56.50:2379     – 192.168.56.60:2379     – 192.168.56.70:2379

# The bootstrap configuration. Works only when the cluster is not yet initialized. # If the cluster is already initialized, all changes in the `bootstrap` section are ignored! bootstrap:   # This section will be written into <dcs>:/<namespace>/<scope>/config after initializing   # new cluster and all other cluster members will use it as a `global configuration`.   # WARNING! If you want to change any of the parameters that were set up   # via `bootstrap.dcs` section, please use `patronictl edit-config`!   dcs:     loop_wait: 10     retry_timeout: 10     ttl: 30     postgresql:       parameters:         DateStyle: ISO, MDY         TimeZone: Asia/Shanghai         archive_mode: 'on'         autovacuum_worker_slots: '16'         cluster_name: ''         default_text_search_config: pg_catalog.english         dynamic_shared_memory_type: posix         hot_standby: 'on'         lc_messages: en_US.UTF-8         lc_monetary: en_US.UTF-8         lc_numeric: en_US.UTF-8         lc_time: en_US.UTF-8         log_destination: stderr         log_directory: log         log_filename: postgresql-%a.log         log_line_prefix: '%m [%p] '         log_rotation_age: 1d         log_rotation_size: '0'         log_timezone: Asia/Shanghai         log_truncate_on_rotation: 'on'         logging_collector: 'on'         max_connections: '100'         max_locks_per_transaction: '64'         max_prepared_transactions: '0'         max_replication_slots: '10'         max_wal_senders: '10'         max_wal_size: 1GB         max_worker_processes: '8'         min_wal_size: 80MB         shared_buffers: 128MB         summarize_wal: 'on'         track_commit_timestamp: 'off'         wal_keep_size: '0'         wal_level: replica         wal_log_hints: 'off'       use_slots: true

postgresql:   authentication:     replication:       password: 'replicator'       username: 'replicator'     superuser:       password: 'patroni'       username: 'patroni'   bin_dir: /usr/pgsql-18/bin   connect_address: 192.168.56.70:5432   data_dir: /var/lib/pgsql/18/data   listen: 192.168.56.70:5432   parameters:     archive_command: gzip < %p > /data/pg/archivedir/%f.gz     config_file: /var/lib/pgsql/18/data/postgresql.conf     hba_file: /var/lib/pgsql/18/data/pg_hba.conf     ident_file: /var/lib/pgsql/18/data/pg_ident.conf     restore_command: gunzip < /data/pg/archivedir/%f.gz > %p   pg_hba:   – local   all             all                                     peer   – host    all             all             127.0.0.1/32            scram-sha-256   – host    all             all             192.168.56.0/24         scram-sha-256   – host    all             all             ::1/128                 scram-sha-256   – local   replication     all                                     peer   – host    replication     all             127.0.0.1/32            scram-sha-256   – host    replication     all             ::1/128                 scram-sha-256

tags:   clonefrom: true   failover_priority: 1   noloadbalance: false   nostream: false   nosync: false   sync_priority: 1 [root@linux070 ~]# 

chown -R postgres:postgres /etc/patroni

依次启动,一个一个来:

[root@linux050 ~]# systemctl status patroni

● patroni.service – Runners to orchestrate a high-availability PostgreSQL

Loaded: loaded (/usr/lib/systemd/system/patroni.service; disabled; preset: disabled)

Active: active (running) since Wed 2026-01-28 18:32:21 CST; 15s ago

Main PID: 2258 (patroni)

Tasks: 6 (limit: 11055)

Memory: 26.5M

CPU: 692ms

CGroup: /system.slice/patroni.service

└─2258 /usr/bin/python3.12 /usr/bin/patroni /etc/patroni/patroni.yml

Jan 28 18:32:21 linux050 patroni[2258]: 2026-01-28 18:32:21,853 INFO: establishing a new patroni heartbeat connection to postgres

Jan 28 18:32:21 linux050 patroni[2258]: 2026-01-28 18:32:21,952 INFO: Changed cluster_name from '' to 'pgcluster' (restart might be required)

Jan 28 18:32:21 linux050 patroni[2258]: 2026-01-28 18:32:21,953 INFO: Changed listen_addresses from '*' to '192.168.56.50' (restart might be required)

Jan 28 18:32:21 linux050 patroni[2258]: 2026-01-28 18:32:21,953 INFO: Changed wal_keep_size from '0' to '128MB'

Jan 28 18:32:21 linux050 patroni[2258]: 2026-01-28 18:32:21,974 INFO: Reloading PostgreSQL configuration.

Jan 28 18:32:22 linux050 patroni[2267]: server signaled

Jan 28 18:32:23 linux050 patroni[2258]: 2026-01-28 18:32:23,060 INFO: Systemd integration is not supported

Jan 28 18:32:23 linux050 patroni[2258]: 2026-01-28 18:32:23,229 INFO: acquired session lock as a leader

Jan 28 18:32:23 linux050 patroni[2258]: 2026-01-28 18:32:23,490 INFO: no action. I am (pg050), the leader with the lock

Jan 28 18:32:33 linux050 patroni[2258]: 2026-01-28 18:32:33,377 INFO: no action. I am (pg050), the leader with the lock

[root@linux050 ~]#

[root@linux060 ~]# systemctl status patroni

● patroni.service – Runners to orchestrate a high-availability PostgreSQL

Loaded: loaded (/usr/lib/systemd/system/patroni.service; disabled; preset: disabled)

Active: active (running) since Wed 2026-01-28 18:33:56 CST; 30s ago

Main PID: 1409 (patroni)

Tasks: 18 (limit: 11055)

Memory: 145.7M

CPU: 1.969s

CGroup: /system.slice/patroni.service

├─1409 /usr/bin/python3.12 /usr/bin/patroni /etc/patroni/patroni.yml

├─1424 /usr/pgsql-18/bin/postgres -D /var/lib/pgsql/18/data –config-file=/var/lib/pgsql/18/data/postgresql.conf –listen_addresses=192.168.56.60 –port=5>

├─1426 "postgres: pgcluster: logger "

├─1427 "postgres: pgcluster: io worker 2"

├─1428 "postgres: pgcluster: io worker 1"

├─1429 "postgres: pgcluster: io worker 0"

├─1430 "postgres: pgcluster: checkpointer "

├─1431 "postgres: pgcluster: background writer "

├─1432 "postgres: pgcluster: startup recovering 000000010000000000000007"

├─1447 "postgres: pgcluster: walsummarizer "

├─1448 "postgres: pgcluster: walreceiver streaming 0/7000060"

└─1452 "postgres: pgcluster: patroni postgres 192.168.56.60(51380) idle"

Jan 28 18:34:03 linux060 patroni[1435]: 192.168.56.60:5432 – rejecting connections

Jan 28 18:34:03 linux060 patroni[1437]: 192.168.56.60:5432 – rejecting connections

Jan 28 18:34:03 linux060 patroni[1409]: 2026-01-28 18:34:03,557 INFO: Lock owner: pg050; I am pg060

Jan 28 18:34:03 linux060 patroni[1409]: 2026-01-28 18:34:03,645 INFO: bootstrap from leader 'pg050' in progress

Jan 28 18:34:04 linux060 patroni[1449]: 192.168.56.60:5432 – accepting connections

Jan 28 18:34:04 linux060 patroni[1409]: 2026-01-28 18:34:04,115 INFO: Lock owner: pg050; I am pg060

Jan 28 18:34:04 linux060 patroni[1409]: 2026-01-28 18:34:04,115 INFO: establishing a new patroni heartbeat connection to postgres

Jan 28 18:34:04 linux060 patroni[1409]: 2026-01-28 18:34:04,291 INFO: no action. I am (pg060), a secondary, and following a leader (pg050)

Jan 28 18:34:13 linux060 patroni[1409]: 2026-01-28 18:34:13,672 INFO: no action. I am (pg060), a secondary, and following a leader (pg050)

Jan 28 18:34:23 linux060 patroni[1409]: 2026-01-28 18:34:23,608 INFO: no action. I am (pg060), a secondary, and following a leader (pg050)

[root@linux060 ~]#

[root@linux070 ~]# systemctl status patroni

● patroni.service – Runners to orchestrate a high-availability PostgreSQL

Loaded: loaded (/usr/lib/systemd/system/patroni.service; disabled; preset: disabled)

Active: active (running) since Wed 2026-01-28 18:35:24 CST; 23s ago

Main PID: 1403 (patroni)

Tasks: 18 (limit: 11055)

Memory: 145.8M

CPU: 3.171s

CGroup: /system.slice/patroni.service

├─1403 /usr/bin/python3.12 /usr/bin/patroni /etc/patroni/patroni.yml

├─1421 /usr/pgsql-18/bin/postgres -D /var/lib/pgsql/18/data –config-file=/var/lib/pgsql/18/data/postgresql.conf –listen_addresses=192.168.56.70 –port=5>

├─1422 "postgres: pgcluster: logger "

├─1424 "postgres: pgcluster: io worker 2"

├─1425 "postgres: pgcluster: io worker 0"

├─1426 "postgres: pgcluster: io worker 1"

├─1427 "postgres: pgcluster: checkpointer "

├─1428 "postgres: pgcluster: background writer "

├─1429 "postgres: pgcluster: startup recovering 000000010000000000000007"

├─1442 "postgres: pgcluster: walsummarizer "

├─1453 "postgres: pgcluster: patroni postgres 192.168.56.70(55746) idle"

└─1460 "postgres: pgcluster: walreceiver "

Jan 28 18:35:31 linux070 patroni[1421]: 2026-01-28 18:35:31.147 CST [1421] HINT: Future log output will appear in directory "log".

Jan 28 18:35:31 linux070 patroni[1423]: 192.168.56.70:5432 – rejecting connections

Jan 28 18:35:31 linux070 patroni[1431]: 192.168.56.70:5432 – rejecting connections

Jan 28 18:35:32 linux070 patroni[1433]: 192.168.56.70:5432 – rejecting connections

Jan 28 18:35:33 linux070 patroni[1450]: 192.168.56.70:5432 – accepting connections

Jan 28 18:35:33 linux070 patroni[1403]: 2026-01-28 18:35:33,300 INFO: Lock owner: pg050; I am pg070

Jan 28 18:35:33 linux070 patroni[1403]: 2026-01-28 18:35:33,300 INFO: establishing a new patroni heartbeat connection to postgres

Jan 28 18:35:33 linux070 patroni[1403]: 2026-01-28 18:35:33,551 INFO: no action. I am (pg070), a secondary, and following a leader (pg050)

Jan 28 18:35:43 linux070 patroni[1403]: 2026-01-28 18:35:43,910 INFO: no action. I am (pg070), a secondary, and following a leader (pg050)

Jan 28 18:35:44 linux070 patroni[1403]: 2026-01-28 18:35:44,240 INFO: no action. I am (pg070), a secondary, and following a leader (pg050)

[root@linux070 ~]#

检查一下状态

[root@linux050 ~]# patronictl -c /etc/patroni/patroni.yml list
+ Cluster: pgcluster (7600309643659044233) —-+—-+————-+—–+————+—–+—————–+————————————+———————-+
| Member | Host | Role | State | TL | Receive LSN | Lag | Replay LSN | Lag | Pending restart | Pending restart reason | Tags |
+——–+—————+———+———–+—-+————-+—–+————+—–+—————–+————————————+———————-+
| pg050 | 192.168.56.50 | Leader | running | 1 | | | | | * | cluster_name: ->pgcluster | clonefrom: true |
| | | | | | | | | | | listen_addresses: *->192.168.56.50 | failover_priority: 1 |
| | | | | | | | | | | | nosync: false |
| | | | | | | | | | | | sync_priority: 1 |
+——–+—————+———+———–+—-+————-+—–+————+—–+—————–+————————————+———————-+
| pg060 | 192.168.56.60 | Replica | streaming | 1 | 0/7000060 | 0 | 0/7000060 | 0 | | | clonefrom: true |
| | | | | | | | | | | | failover_priority: 1 |
| | | | | | | | | | | | nosync: false |
| | | | | | | | | | | | sync_priority: 1 |
+——–+—————+———+———–+—-+————-+—–+————+—–+—————–+————————————+———————-+
| pg070 | 192.168.56.70 | Replica | streaming | 1 | 0/7000060 | 0 | 0/7000060 | 0 | | | clonefrom: true |
| | | | | | | | | | | | failover_priority: 1 |
| | | | | | | | | | | | nosync: false |
| | | | | | | | | | | | sync_priority: 1 |
+——–+—————+———+———–+—-+————-+—–+————+—–+—————–+————————————+———————-+
[root@linux050 ~]#

完成。。

赞(0)
未经允许不得转载:171主机测评 » postgresql之patroni高可用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址