簡介
本文檔介紹當MGMTPOSTGRES_SLAVE未與MGMTPOSTGRESS_MASTER形成群集時,如何恢復MGMTPOSTGRES_SLAVE。
必要條件
需求
思科建議您瞭解以下主題:
- Linux介面
- 虛擬機器環境
- postgresql
- 心臟起搏器/Corosync組態系統(PCS)
採用元件
本檔案中的資訊是根據以下軟體版本:
- CloudCenter 4.8.1.1版
- MGMTPOSTGRES_SLAVE元件
- MGMTPOSTGRES_MASTER元件
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
如果兩個MGMTPOSTGRES元件均出現故障,則MGMTPOSTGRES_SLAVE不再與MGMTPOSTGRES_MASTER形成群集。
問題
MGMTPOSTGRES_SLAVE未與MGMTPOSTGRES_MASTER形成群集。為了讓兩個MGMTPOSTGRES形成群集,需要刪除MGMTPOSTGRES_SLAVE資料庫。然後,將從MGMTPOSTGRES_MASTER恢複資料庫。
錯誤日誌
[root@mgmtpostgres_master etc]# pcs status
Cluster name: cliqrdbcluster
Stack: corosync
Current DC: dbmaster (version 1.1.15-11.e174ec8) – partition with quorum
Last updated: Mon Nov 13 19:15:30 2017 Last changed: Mon Nov 13 16:59:51 2017 by root via crm_attribute on db master
2 nodes and 3 resources configured
Online: [ dbmaster dbslave ]
Full list of resrouces:
Resrouce Group: VIPGroup
PGMasterVIP (ocf::heartbeat:IPaddr2): Started dbmaster
Master/Slave Set: mspostgresql [pgsql]
Masters: [ dbmaster ]
Stopped: [ dbslave ]
Failed Actions:
* pgsql_start_0 on dbslave ‘unknown error’ (1): call=11, status=Timed Out, exitreason=’none’,
last-rc-change=’Mon Nov 13 18:15:25 2017’, queued-0ms, exec=60003ms
Daemon Status:
corosyn: active/disabled
pacemaker: active/enabled
pcsd: inactive/disabled
解決方案
繼續恢復MGMTPOSTGRES_SLAVE資料庫,以便MGMTPOSTGRES形成群集。
步驟1.在MGMTPOSTGRES_MASTER中,確保集群已停止。
pcs cluster stop
pcs status
步驟2.在MGMTPOSTGRES_SLAVE中,刪除現有資料庫。
rm -rf /var/lib/pgsql/9.5/data/*
步驟3.在MGMTPOSTGRES_MASTER中,再次啟動群集。
pcs cluster start
pcs status
步驟4.在MGMTPOSTGRES_SLAVE中,從MGMTPOSTGRES_MASTER恢複資料庫。
/usr/pgsql-9.5/bin/pg_basebackup -h <MGMTPOSTGRES_MASTER-IP> -D /var/lib/pgsql/9.5/data/ -U replication -v -P --xlog-method=stream
步驟5.在MGMTPOSTGRES_SLAVE中,更改已恢複資料庫的所有權。
chown postgres:postgres -R /var/lib/pgsql/9.5/data/*
步驟6.在MGMTPOSTGRES_SLAVE中,啟動群集。
pcs cluster start
pcs cluster status
步驟7.在MGMTPOSTGRES_MASTER中,清理資源並檢查群集狀態。
pcs resource cleanup
pcs cluster status
步驟8.在MGMTPOSTGRES_MASTER中,驗證是否存在複製(查詢MGMTPOSTGRES_SLAVE IP中的IP)。
ps –ef | grep postgr