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

來源:互聯網
上載者:User

標籤:

執行完您的第一個即時恢複(PITR,Point-In-Time-Recovery),我們準備在一個真正的複製設定上工作。在本章,您將學會如何設定非同步複製和流。我們的目標是確保您可以實現更高的高可用和更高的資料安全性。

在本章,我們將討論以下主題:

• 配置非同步複製

• 理解流

• 合并流和歸檔

• 行政時間線

在本章的最後,您將很容易地在幾分鐘內設定流複製。

4.1 設定流複製

在前面章節中,我們已經從簡單的16MB XLOG檔案做了恢複。從邏輯上講,重放進程一次只能重放16MB。這在您的複製設定中會導致延遲,因為您必須等到master資料庫執行個體建立完16MB。在許多情況下,這種延遲是不能被接受的。

[丟掉了最後的XLOG檔案,該檔案尚未最後確定(並因此不發送歸檔,由於崩潰丟失),往往是為什麼人們報告在即時恢複(PITR,Point-In-Time-Recovery) 情況下資料丟失的核心原因。]

在這種情況下,流複製將解決您的問題。使用流複製,複製的延遲將是最小的,您可以享受保護您的資料的一些額外的水平。

讓我們來談談PostgreSQL流基礎設施的總體架構。顯示了基本的系統設計:

您已經看到了這種類型的架構。我們在這裡添加了流串連。它基本上是一個正常的資料庫連接,和您使用任何其它應用的串連一樣。唯一的區別是,在流串連的情況下,該串連處於一種能夠攜帶XLOG的特殊模式。

4.1.1 調整master伺服器上的設定檔

現在的問題是:如何才能使一個流串連存在?在前面的例子中已經做了大部分基礎設施。在master上,以下設定必須設定:

• wal_level 必須設定為 hot_standby

• max_wal_senders 必須設定為一個合理的較高的值來支援足夠多的slaves

[archive_mode和archive_command怎麼設定?很多人使用流複製儘可能地使他們的系統複製更多的資料到slave。除此之外,基於檔案的複製經常被使用來確保有一個額外的安全層。基本上,兩種機制使用相同的技術;在基於流和基于歸檔的恢複中只是XLOG源不同。]

既然master知道它應該產生足夠的XLOG,處理XLOG發送等,我們可以繼續下一個步驟。

出於安全的原因,您必須配置master能夠流複製串連。這需要改變pg_hba.conf正如前面章節所示。其次,這需要運行pg_basebackup和隨後的流串連。如果您正在使用傳統的方式做基礎備份,您還需要允許複製串連到串流XLOG,因此,這一步是必須的。

一旦您的master已經成功地配置了,您可以重新啟動資料庫(以使wal_level和max_wal_senders工作)並繼續在slave上工作。

4.1.2 處理pg_basebackup和recovery.conf

到現在,您已經看到那個進程絕對一致地執行正常的即時恢複(PITR,Point-In-Time-Recovery)。目前唯一不同的是wal_level,為了正常的即時恢複(PITR,Point-In-Time-Recovery)它必須配置不同的參數。這是相同的技術,沒有差別。

為了取得基礎備份庫我們使用pg_basebackup正如前面章節所示。下面是一個例子:

iMac:dbhs$ pg_basebackup -D /target_directory \

-h sample.postgresql-support.de\

--xlog-method=stream

既然我們已經做了一個基礎備份,我們現在可以去配置流了。要做到這一點,我們必須寫一個叫recovery.conf(就像之前)的檔案。下面是一個簡單的例子:

standby_mode = on

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

我們有兩個新的設定:

• standby_mode: 此設定將確保PostgreSQL一旦耗盡XLOG不會停止。相反,它會等待新的XLOG到達。要確保第二個伺服器作為standby此設定是必須的,standby持續重放XLOG。

• primary_conninfo: 此設定會告訴我們的slave哪裡可以找到master。您必須放置一個標準的 PostgreSQL串連串, (就像在 libpq中)  primary_conninfo 作為核心告訴 PostgreSQL 來流傳送XLOG。

對於基本的設定,這兩個設定完全足夠了。現在我們所要做的啟動slave,就像您開始啟動一個正常的資料庫執行個體。

iMac:slavehs$ pg_ctl -D . start

server starting

LOG: database system was interrupted; last known up

at 2013-03-17 21:08:39 CET

LOG: creating missing WAL directory

"pg_XLOG/archive_status"

LOG: entering standby mode

LOG: streaming replication successfully connected

to primary

LOG: redo starts at 0/2000020

LOG: consistent recovery state reached at 0/3000000

資料庫執行個體已經成功啟動了。它檢測到正常的操作已經中斷。然後它進入standby模式,並開始從primary流傳輸XLOG。PostgreSQL然後到達一致狀態,並且該系統 準備行動。

 

4.1.3 使slave可讀

到目前為止,我們只設定了流傳輸。slave已經開始消耗來自master的交易記錄,但是它還不是可讀的。如果您嘗試串連到該執行個體,您將面臨如下情境:

iMac:slavehs$ psql -l

FATAL: the database system is starting up

psql: FATAL: the database system is starting up

這是預設配置。slave執行個體一直是備份模式並保持重放XLOG。

如果您想讓slave可讀,您必須在slave系統上適配postgresql.conf;hot_standby必須設定為on。您可以直接設定這個,但是您也可以在以後更改,當您需要這個特徵的時候,簡單地重啟slave執行個體。

iMac:slavehs$ pg_ctl -D . restart

waiting for server to shut down....

LOG: received smart shutdown request

FATAL: terminating walreceiver process due to administrator command

LOG: shutting down

LOG: database system is shut down

done

server stopped

server starting

LOG: database system was shut down in recovery at 2013-03-17 21:56:12

CET

LOG: entering standby mode

LOG: consistent recovery state reached at 0/3000578

LOG: redo starts at 0/30004E0

LOG: record with zero length at 0/3000578

LOG: database system is ready to accept read only connections

LOG: streaming replication successfully connected to primary

重啟將關閉伺服器,並啟動它再次備份。這不是太多的驚喜;然而,這值得看看日誌。您可以看到,一個叫walreceiver的進程被終止。

一旦我們做了備份並且運行,我們就可以串連到伺服器。從邏輯上講,我們只允許執行唯讀操作:

test=# CREATE TABLE x (id int4);

ERROR: cannot execute CREATE TABLE in a read-only transaction

 

正如預期的結果,伺服器將不接受寫入。記住,slave是唯讀。

4.1.4 底層協議

當使用流複製時,您應該注意兩個進程:

• wal_sender

• wal_receiver

wal_sender執行個體是提供XLOG給他們的slave上稱為wal_receiver進程的master執行個體上的進程。每個slave都有一個wal_receiver進程,並且這個進程恰好串連到資料來源的一個wal_sender進程。

整件事情內部是如何工作的呢?正如我們以前所說的,從slave到master的串連基本上是一個 正常的資料庫連接。交易記錄採用和COPY命令一樣的方法。COPY模式內部,PostgreSQL使用微語言來回地傳送資訊。主要的優勢是這種微語言有它自己的解析器,因此快速並且以相當容易,非侵入性的方式增加功能是可能的。到了PostgreSQL9.2,一下命令是支援的:

• IDENTIFY_SYSTEM

• START_REPLICATION <position>

• BASE_BACKUP

°° [LABEL ‘label‘]

°° [PROGRESS]

°° [FAST]

°° [WAL]

°° [NOWAIT]

您所看到的是和pg_basebackup提供的作為命令列標誌的協議等級。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.