実験環境:centos7.4純粋なバージョン
Postgresのバージョン:9.6.15
etcdバージョン:3.3.11
patroniバージョン:
IP計画
192.168.216.130ノード1マスター
192.168.216.132のノード2スレーブ
192.168.216.134のノード3のスレーブ
etcdクラスタ展開は以前の記事を参照してくださいます。https://www.cnblogs.com/caidingyu/p/11408389.html
Postgresは参照記事を展開します。https://www.cnblogs.com/virtulreal/p/9921978.html
ノード1は、postgresql.confの以下の設定を変更します
MAX_CONNECTIONS = '100'の max_wal_sendersの= '10' ポート= '5432' のlisten_addressesの= '0.0.0.0' synchronous_commit =上 full_page_writesを=に wal_log_hints =上 synchronous_standby_names = '*' max_replication_slots = 10 wal_level =レプリカ
ノード1は、pg_hba.confの以下の設定を変更します
[ルート@ localhostのデータ]#以上のpg_hba.conf |グレップの-v ^#| grepの-v ^ $ 現地すべてすべてのピア のホストすべてすべて127.0.0.1/32 MD5の ホストすべてのpostgres 127.0.0.1/32 md5のは 、すべてのすべての192.168をホストします。 216.0 / 24 MD5 すべてすべて:: 1/128 md5のホスト ローカル複製レプリケータピア ホスト複製レプリケータ127.0.0.1/32 md5の ホスト複製レプリケータ:: 1/128 MD5 ホスト複製レプリケータ192.168.216.130/32 MD5を ホスト複製レプリケータ192.168.216.132/32 MD5 ホスト複製レプリケータ192.168.216.134/32 MD5
node1でコピースロットを作成し、重要な、patroniはこのようなものを使用します
postgresの=#ユーザーレプリケータ複製ログイン暗号化されたパスワード「1qaz2wsx」を作成します。 postgresの=#パスワードでpostgresユーザを変更する'1qaz2wsx'; postgresの= pg_create_physical_replication_slot( 'pgsql96_node1')から#を選択*; postgresの= pg_create_physical_replication_slot( 'pgsql96_node2')から#を選択*; postgresの= pg_create_physical_replication_slot( 'pgsql96_node3')から#を選択*;
ノード2ストリームのレプリケーション構成
systemctl停止にpostgresql-9.6 SU - Postgresの CD /var/lib/pgsql/9.6/data RM -rf ./* /usr/pgsql-9.6/bin/pg_basebackup -h 192.168.216.130 -D /var/lib/pgsql/9.6 /データ-Uレプリケータ-v -P -R VI recovery.confの recovery_target_timeline = '最新の' standby_mode = 'on'に primary_conninfo = 'ホスト= 192.168.216.130ポート= 5432ユーザー=レプリケータパスワード= 1qaz2wsx' primary_slot_name = 'pgsql96_node2' trigger_file = '/tmp/postgresql.trigger.5432' 执行終了返回ルート用户が 開始systemctlのpostgresql-9.6
ノード3ストリームのレプリケーション構成
systemctl停止にpostgresql-9.6 SU - Postgresの CD /var/lib/pgsql/9.6/data RM -rf ./* /usr/pgsql-9.6/bin/pg_basebackup -h 192.168.216.130 -D /var/lib/pgsql/9.6 /データ-Uレプリケータ-v -P -R VI recovery.confの recovery_target_timeline = '最新の' standby_mode = 'on'に primary_conninfo = 'ホスト= 192.168.216.130ポート= 5432ユーザー=レプリケータパスワード= 1qaz2wsx' primary_slot_name = 'pgsql96_node3' trigger_file = '/tmp/postgresql.trigger.5432' 执行終了返回ルート用户が 開始systemctlのpostgresql-9.6
レプリケーションのステータスを表示する、ノード1上のデータベースに接続します
pg_stat_replicationからreplay_delayとしてflush_delay、pg_xlog_location_diff(sent_location、replay_location)としてWRITE_DELAY、pg_xlog_location_diff(sent_location、flush_location)として選択CLIENT_ADDR、pg_xlog_location_diff(sent_location、write_location)。
、patroniをダウンロード、インストール、ネットワークの問題の場合には、数回ピップピップをインストールして実行することができ、または別のソースに切り替え
yumをインストールGCC のyumのpython-devel.x86_64インストール CDを/ tmpの カールhttps://bootstrap.pypa.io/get-pip.py -o get-pip.py のpython get-pip.py psycopg2-バイナリインストールPIP PIPがpatroniをインストール[etcd、領事]
インストールが成功したことを確認します
これpatroni patroni --help
node1でpatroni設定ファイルを手動で設定ファイルを作成する必要が次の
ます。mkdir -pは/ usr / patroni / confに CDの/ usr / patroni / confに/ 猫/usr/patroni/conf/patroni_postgresql.yml 範囲:pgsql96 名前空間:/ pgsqlの/ 名:pgsql96_node1 restapi: 聞く:192.168.216.130:8008 connect_address: 192.168.216.130:8008 etcd: ホスト:192.168.216.130:2379 ブートストラップ: #は、このセクションでは、etcdに書き込まれます:/ <名前空間> / <スコープ> / configの新しいクラスタの初期化した後 #としてそれを使用する他のすべてのクラスタメンバーを`グローバルconfiguration`の DCS: TTL:30 loop_wait:10 retry_timeout:10 maximum_lag_on_failover:1048576 master_start_timeout:300 synchronous_mode:偽 のpostgresql: use_pg_rewind:真 use_slots:真 のパラメータ: のlisten_addresses: "0.0.0.0" ポート:5432 wal_level:論理 hot_standby: "オン" wal_keep_segments:1000 max_wal_senders:10 max_replication_slots:10 wal_log_hints: "オン" #1にarchive_mode:「に「 #archive_timeoutを:1800年代 #1にarchive_command:gzipの<%P> /data/backup/pgwalarchive/%f.gz #のrecovery_conf: #行うrestore_command:gunzipは</data/backup/pgwalarchive/%f.gz>の%p のpostgresql: 聞く:0.0.0.0:5432 connect_address:192.168.216.130 :5432 DATA_DIR:/var/lib/pgsql/9.6/data /usr/pgsql-9.6/bin:このBin_dir #1 CONFIG_DIR:/etc/postgresql/9.6/main 認証: 複製: ユーザ名:レプリケータの パスワード:1qaz2wsx スーパーユーザ: ユーザ名:Postgresの パスワード: 1qaz2wsx #watchdog: #モード:自動#可能な値:オフ、自動、必要な #デバイス:は/ dev /ウォッチドッグ #のsafety_margin:5個の タグ: NOFAILOVER:偽 noloadbalance:偽 clonefrom:偽 NOSYNC:偽
ノード2のpatroniプロファイルは、以下の
[ルート@ localhostのetcd]#猫/usr/patroni/conf/patroni_postgresql.yml スコープ:pgsql96の 名前空間:/ pgsqlの/ 名:pgsql96_node2 restapiは: 聞く:192.168.216.132:8008 connect_address:192.168.216.132:8008 etcd: ホスト:192.168 .216.132:2379 ブートストラップ: このセクションはEtcdに書き込まれます。#:/ <名前空間> / <スコープ> / configの新しいクラスタの初期化した後 #と`グローバルconfiguration`のようにそれを使用する他のすべてのクラスタ・メンバー :DCS TTL:30 loop_waitを:10 retry_timeout:10 maximum_lag_on_failover:1048576 master_start_timeout:300 synchronous_mode:偽 のpostgresql: use_pg_rewind:真 use_slots:真 のパラメータ: のlisten_addresses: "0.0.0.0" ポート:5432 wal_level:論理 hot_standby: "オン" wal_keep_segments:1000 max_wal_senders:10 max_replication_slots:10 wal_log_hints: "オン" #1にarchive_mode: "オン" #1のarchive_timeout:1800年代 #1にarchive_command:gzipの<%P> /data/backup/pgwalarchive/%f.gz #のrecovery_conf: #行うrestore_command:gunzipは</data/backup/pgwalarchive/%f.gz>の%p のpostgresql: 聞く:0.0.0.0:5432 connect_address:192.168.216.132:5432 DATA_DIR:は/ var / libに/ pgsqlで/ 9。6 /データ このBin_dir:/usr/pgsql-9.6/bin #1 CONFIG_DIR:/etc/postgresql/9.6/main 認証: 複製: ユーザ名:レプリケータの パスワード:1qaz2wsx スーパーユーザ: ユーザ名:Postgresの パスワード:1qaz2wsx #watchdog:# モード:自動#可能な値: 、自動、必要なオフ の/ dev /ウォッチドッグ:#デバイス #1 safety_margin:5個の タグ: NOFAILOVER:偽 noloadbalance:偽 clonefrom:偽 NOSYNC:偽
ノード3のpatroniプロファイルは、以下の
スコープ:pgsql96 名前空間:/ pgsqlの/ 名:pgsql96_node3 restapi: 聞く:192.168.216.134:8008 connect_address:192.168.216.134:8008 etcd: ホスト:192.168.216.134:2379 ブートストラップ: #は、このセクションでは、Etcdに書き込まれます:/ <名前空間新しいクラスタの初期化した後> / <スコープ> / configに #と`グローバルconfiguration`のようにそれを使用する他のすべてのクラスタ・メンバー DCSを: TTL:30 loop_wait:10 retry_timeout:10 maximum_lag_on_failover:1048576 master_start_timeout:300 synchronous_mode:偽 のpostgresql: use_pg_rewind:真 use_slots:真 パラメータ: のlisten_addresses: "0.0.0.0" ポート:5432 wal_level:論理 hot_standby: "オン" wal_keep_segments:1000 max_wal_senders:10 max_replication_slots:10 wal_log_hints: "オン" "オン":#1にarchive_mode #1のarchive_timeout:1800年代の #1にarchive_command:gzipの<% P> /data/backup/pgwalarchive/%f.gz #のrecovery_conf: #行うrestore_command:gunzipは</data/backup/pgwalarchive/%f.gz>の%p のpostgresql: 聞く:0.0.0.0:5432 connect_address:192.168.216.134: 5432 DATA_DIR:/var/lib/pgsql/9.6/data このBin_dir:/usr/pgsql-9.6/bin #1 CONFIG_DIR:/etc/postgresql/9.6/main 認証: 複製: ユーザ名:レプリケータの パスワード:1qaz2wsx スーパーユーザ: ユーザ名:postgresの パスワード:1qaz2wsx #watchdog: #モード:自動#可能な値:オフ、自動、必要な #デバイス:/ devの/ウォッチドッグ #のsafety_margin:5個の タグ: NOFAILOVER:偽 noloadbalance:偽 clonefrom:偽 NOSYNC:偽
手動patroniを開始
ノード1、ノード2、ノード3の3つのノード起動します
雇用/usr/patroni/conf/patroni_postgresql.yml
ビューpatroniクラスタのステータス
patronictl -c /usr/patroni/conf/patroni_postgresql.ymlリストを実行し、ウィンドウのクローニング
情報を確認してくださいetcd
etcdctl LS / pgsqlの/ pgsql96
etcdctl GET / pgsqlの/ pgsql96 /メンバー/ pgsql96_node1
、最初からそのように構成さpatroni.serviceをブートを容易にするために、3番目のノードが設定する必要があります
[ルート@ localhostのデータ]#viの/etc/systemd/system/patroni.service [ルート@ localhostのデータ]#猫の/etc/systemd/system/patroni.service [単位] 説明= patroni -高可用性PostgreSQLの ドキュメント= https://patroni.readthedocs.io/en/latest/index.html 後= syslog.target network.target etcd.target ウォンツ= network-online.target [サービス] =単純型 ユーザー= postgresの グループ= postgresのを PermissionsStartOnly =真 ExecStart =は/ usr / binに/ patroni /usr/patroni/conf/patroni_postgresql.yml ExecReload = / binに/殺す-HUP $ MAINPID LimitNOFILE = 65536 KillMode =プロセス KillSignal = SIGINT を再起動=オン異常 RestartSec = 30代 TimeoutSec = 0 [インストール] WantedBy = multi-user.target
PostgreSQLは、PostgreSQLのpatroniが管理し、最初から禁止します
systemctlステータスpatroniは patroni開始systemctl systemctl patroni有効 systemctl状況PostgreSQLの systemctl無効にpostgresqlを systemctl状態etcd etcdを有効systemctl
リーダーを切り替える方法
実行patronictl -c /usr/patroni/conf/patroni_postgresql.yml切り替え
複数の実行patronictl -c /usr/patroni/conf/patroni_postgresql.ymlリストが更新され、あなたはリーダーがnode1にノード2から切り替えて見ることができます