1. 程式人生 > 實用技巧 >PostgreSQL 來自歐羅巴Patroni Patroni 安裝 3

PostgreSQL 來自歐羅巴Patroni Patroni 安裝 3

作為一個系列,下面在介紹完什麼要使用 patroni 以及為什麼選擇 etcd後, 今天就開始需要安裝patroni , 由於patroni 是一個基於python 的程式,這就與patroni的版本和python有關.

目前使用patroni 就需要考慮使用python 3了,centos 上需要去單獨安裝python3

yum -y install libffi-devel

wgethttps://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz

xz -d Python-3.9.2.tgz

tar xvf Python-3.8.2.tar

pip3 install patroni[etcd] -i https://mirrors.aliyun.com/pypi/simple/

pip3 install psycopg2-binary -i https://mirrors.aliyun.com/pypi/simple/

pip3 install patroni -i https://mirrors.aliyun.com/pypi/simple/

安裝是完畢了,但比較困難和難以理解的問題

既然是使用了ETCD的分散式資料庫,那就會牽扯到一個問題,資料庫的配置,這在之前的 repmgr 以及其他的高可用沒有遇到這樣的問題, 因為repmgr 在操作的過程中,整體的配置(如果你的配置檔案在製作repmgr standby 節點的時候就複製過了了,前提是你的配置檔案一同通過備份過來)

有一個點是我們的postgresql的配置,是存在在Distributed Configuration Store,資料,主要分三類

1 動態配置檔案

2本地配置檔案

3環境配置

首先Dynamic configuration主要是在DCS 分散式系統的設定,這些選項在系統的啟動的時候被應用,同時如果在系統啟動時並未被使用,在下一個執行的週期會將這些配置進行應用. 如果有不能被立即應用的配置,則會在相關位置新增pendingrestart 的標識.

其次, local configuration 的優先順序要大於 dynamic configuration,在啟動時將這些配置通過sighup 訊號的方式傳送給patroni.

另外還有Environment configuration,有些配置是需要本地的一些引數的配置.

etcd --config-file /etc/etcd.conf &

首先需要確認ETCD 是否正常工作,ETCD 不正常工作則後續的工作很難完成.

安裝方面ETCD 在上期已經完成這裡就不在說明了.

在本篇中的安裝完成後,需要配置patroni 的配置檔案, 在patroni 啟動之前,需要將 POSTGRESQL 的三臺機器進行相關的複製,

當然之前需要對postgresql 的pg_hba 和 postgresql.conf的初始化進行配置,

pg_basebackup -h 192.168.198.66 -U repuser -p 5432 -D /pgdata/data/ -P -Xs -R

這裡就不多說如何進行相關的複製的連線的建立,這屬於前期需要知曉的問題.

scope: pg_patroni

namespace: /service/

name: pg_patroni1

restapi:

listen: 192.168.198.66:8008

connect_address: 192.168.198.66:8008

etcd:

#Provide host to do the initial discovery of the cluster topology:

host: 192.168.198.66:2379

bootstrap:

# this p will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster

# and all other cluster members will use it as a `global configuration`

dcs:

ttl: 30

loop_wait: 10

retry_timeout: 10

restapi:

listen: 192.168.198.66:8008

connect_address: 192.168.198.66:8008

etcd:

#Provide host to do the initial discovery of the cluster topology:

host: 192.168.198.66:2379

bootstrap:

# this p will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster

# and all other cluster members will use it as a `global configuration`

dcs:

ttl: 30

loop_wait: 10

retry_timeout: 10

maximum_lag_on_failover: 1038571

master_start_timeout: 300

synchronous_mode: false

postgresql:

use_pg_rewind: true

use_slots: true

parameters:

wal_level: locical

hot_standby: "on"

wal_keep_segments: 12

max_wal_senders: 10

max_replication_slots: 10

wal_log_hints: "on"

archive_mode: "on"

hot_standby: on

postgresql:

listen: 0.0.0.0:5432

connect_address: 192.168.198.66:5432

data_dir: /pgdata/data

bin_dir: /usr/local/postgres/bin

config_dir: /pgdata/data/

pgpass: /home/postgres/patroni/.pgpass

authentication:

replication:

username: repuser

password: repuser

superuser:

username: postgres

password: postgres

rewind: # Has no effect on postgres 10 and lower

username: pgrewind

password: pgrewind

tags:

nofailover: false

noloadbalance: false

clonefrom: false

nosync: false

啟動patroni 一個

patroni /etc/patroni.yml > /pgdata/patroni.log 2>&1 &

patronictl -c /etc/patroni.yml list

基本上patroni 的安裝就完畢了, 但實際上一個軟體的安裝緊緊是開始使用這個軟體的開始,並不是終結.

到底一個軟體的設計思路和構造是需要弄明白的,首先patroni 的使用的原理以及前置條件是什麼.

Patroni 主要是基於postgresql 的streaming Replication,基本上軟體的分發是通過pip的方式來進行安裝的,對於Centos , RHEL 的 RPM 包一般有 CYBERTEC 來進行提供.

Patroni 建立叢集, 初始化流複製,包括同步需求,監控複製的狀態,另外patroni也負責改變叢集成員的配置,或者重新reload設定,同時會負責計劃中的primary standby 的手動交換,以及意外情況的failover ,通過rewind 將一個失敗的 primary 節點重新拉上線,重新初始化複製的連線.

Patroni 在被設計的之初就考慮了穩定和容錯性,避免了Brain-Split的問題


Patroni收集的所有資料都映象在一個分散式鍵-值儲存中,並且基於儲存中提供的資訊,所有的Patroni例項在決策上達成一致,例如,如果主伺服器失敗,應該提升哪個副本,通過分散式鍵值儲存,達到叢集中的每臺機器的狀態的共享,通過這些元件來進行高可用方面的切換工作等.。同時postgresql 也提供相關的介面, 如果通過其他軟體獲知當前的系統的狀態也是可行的,例如進行讀寫分離.

那麼上一篇提到的patroni 在配置檔案上有三種, 那麼就涉及一個點,就是配置檔案中配置的是否需要一致.舉例下面的配置在patroni 管理的伺服器叢集中配置一定是要一致的, 因為在切換的過程中必須要求,這些都是動態值,不允許在單一伺服器上生效.

max_connections:

max_locks_per_transaction:

max_worker_processes:

max_prepared_transactions

wal_level:hot_standby

wal_log_hints: on

track_commit_timestamp: off

另外還有一些其他的設定如

max_wal_sender

max_replicaiton_slots:

wal_keep_segments:

listen_address

port

cluster_name

host_standby

以上的引數也需要在所有的叢集的機器中,要一致

目前待發布系列4 5 6 7