PostgreSQL Replication之第四章 設定非同步複製(4)

來源:互聯網
上載者:User

標籤:

4.4 基於流和基於檔案的恢複

生活並不總只是黑色或白色;有時也會有一些灰色色調。對於某些情況下,流複製可能恰到好處。在另一些情況下,基於檔案複製和PITR是您所需要的。但是也有許多情況下,您既需要流複製,也需要基於檔案的複製。一個例子是:當您較長一段時間中斷複製,您可能想再次使用歸檔來重新同步(resync)slave,而不是再次執行完全的基礎備份。這也可能是有用的---保留一個歸檔一段時間以後調查或重放操作。好訊息是PostgreSQL允許您混合基於檔案和基於流的複製。您沒有必要決定基於流的好還是基於檔案的好,您可以同時使用兩種方式的優勢。您該怎麼做呢?事實上,您已經看到了所有的步驟;我們只需按照正確的方式把它們放在一起。

為了讓這對您來說更容易,我們已經為您編寫了一個完整的例子。

4.4.1 master配置

master上,我們在postgresql.conf中使用如下配置:

wal_level = hot_standby

# minimal, archive, or hot_standby

# (change requires restart)

archive_mode = on

# allows archiving to be done

# (change requires restart)

archive_command = ‘cp %p /archive/%f‘

# command to use to archive a logfile segment

# placeholders: %p = path of file to archive

# %f = file name only

max_wal_senders = 5

# we used five here to have some spare capacity

除此之外,我們必須添加一些配置到pg_hba.conf來允許流機制。下面是一個例子:

# Allow replication connections from localhost, by a user with the

# replication privilege.

local replication hs trust

host replication hs 127.0.0.1/32 trust

host replication hs ::1/128 trust

host replication all 192.168.0.0/16 md5

在我們的例子中,我們只是簡單地開了一個完整的網路以允許複製(保持例子簡單).

一旦我們做了這些改變,我們就可以重新啟動master,並做一個如本章前面所做的基礎備份。

4.4.2 slave配置

一旦我們配置了master並做了基礎備份,我們就可以開始配置我們的slave系統。為了簡單起見,我們假設我們只是用一個slave;我們不會級聯複製到其他系統。

我們只需要改變slave的postgresql.conf中的一行:

hot_standby = on # to make the slave readable

下一步,我們可以寫一個簡單的recovery.conf檔案,並把它放到主要資料目錄:

restore_command = ‘cp /archive/%f %p‘

standby_mode = on

primary_conninfo = ‘ host=sample.postgresql-support.de port=5432 ‘

trigger_file = ‘/tmp/start_me_up.txt‘

我們啟動slave,會發生如下事情:

1. PostgreSQL 會調用 restore_command 命令來從歸檔取交易記錄。

2.直到歸檔中沒有更多的記錄檔才會停止調用restore_command。

3. PostgreSQL 會嘗試建立流串連。

4.如果資料存在它將執行流操作。

°如果沒有資料存放區在, 它將調用 restore_command 命令從歸檔取交易記錄。

° 它將一直執行該操作,直到歸檔裡沒有更多的資料。

° 它將再次嘗試建立流串連。

只要您需要就可以保持流操作。如果您想把slave轉換為master,您可以再次使用pg_ctl promote 或 recovery.conf中定義的 trigger_file。

 

4.4.3 錯誤情境

雙重策略的最重要的優勢是您可以建立一個叢集,它提供一個更高的安全層級,而不僅僅是基於流或簡單的基於檔案的重放。

在本節,我們可以討論一些在雙重策略叢集中典型的錯誤情境。

master和slave之間的網路連接中斷

如果網路出現故障,master可能將不能再成功地執行archive_command操作。XLOG檔案的曆史必須保持繼續,因此,為了以後的歸檔,master必須對那些XLOG檔案進行排隊。這可能是一個危險的情境,因為如果檔案流被永久地中斷,您可能用完master上XLOG的空間。

如果流串連失敗,PostgreSQL將會嘗試通過基於檔案的通道來保持同步自身。如果基於檔案的通道也失敗了,slave將呆在那裡等待網路連接回來。一旦網路回來,它將嘗試擷取XLOG並簡單地繼續。

[請記住,slave需要不間斷的XLOG流;如果沒有XLOG檔案丟失或如果流串連仍然可以為slave提供slave需要操作的XLOG,,它只能繼續重放XLOG。]

重新啟動slave

只要歸檔有XLOG來做slave的備份,重新啟動slave將不會有任何傷害,slave將只會再次啟動並嘗試從任何可用的來源獲得XLOG。不會出現崩潰或任何其他這類問題。

重新啟動master

如果master重新啟動,這種情況同樣沒有什麼可以批判的。slave將會通過流串連通知master找不到了。它會嘗試通過兩個渠道擷取XLOG,但它不會成功,直到master回來。同樣沒有像崩潰之類的不好的事情 發生。重新啟動兩個伺服器,操作就可以簡單地恢複了。

在歸檔中損壞的XLOG                       

如果XLOG在歸檔匯總損壞,我們要區分兩種情況:

1. slave正在流傳輸: 如果流沒問題並且是完整的, slave 將不會注意到在歸檔中有一些XLOG檔案在某種程度上被損壞。只要流串連是可用的,slave永遠不需要從XLOG檔案讀取。

2. 如果我們沒有使用流,而是從一個檔案重放, PostgreSQL 將會檢查每條 XLOG 記錄並看它的校正和是否正確。如果發生任何錯誤, slave 將不會繼續重放損壞的XLOG。 這將確保不會衍生出來其他問題,沒有損壞的XLOG被重放。您的資料庫可能是不完整的,但這將是明智的,到出錯點都是一致的。

當然,有太多的事情會出錯,但是鑒於這些相似的情況,您可以清楚地看到,該設計已經是儘可能的可靠了。

原文地址:http://www.cnblogs.com/songyuejie/p/4743516.html

PostgreSQL Replication之第四章 設定非同步複製(4)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.