時(shí)間:2024-03-08 08:50作者:下載吧人氣:14
前言
數(shù)據(jù)庫的備份工作在日常生產(chǎn)中極為重要,如果你咨詢一個(gè)DBA如何才能設(shè)計(jì)出高可用的數(shù)據(jù)備份與恢復(fù)方案,相信很多人都會(huì)從架構(gòu)上給出很多容災(zāi)的意見。但歸根到底,如果業(yè)務(wù)環(huán)節(jié)中數(shù)據(jù)庫還牽涉到分布式環(huán)境,我認(rèn)為一個(gè)好的方案需要達(dá)到三大要求:
日常架構(gòu)設(shè)計(jì)中,我們不僅要保證數(shù)據(jù)額的成功備份,還要保證備份的數(shù)據(jù)可以快速恢復(fù)。在眾多備份恢復(fù)可靠性方案中 主從復(fù)制 技術(shù),可以說是最常見的實(shí)現(xiàn),本文主要是介紹postgresql主備數(shù)據(jù)庫的異步流復(fù)制的環(huán)境搭建與主備切換的操作實(shí)踐,除了能把一些基礎(chǔ)的原理運(yùn)用在日常的數(shù)據(jù)庫運(yùn)維中,也可以加深對Postgresql數(shù)據(jù)庫的底層知識了解。
postgres在9.0之后引入了主從的流復(fù)制機(jī)制,所謂流復(fù)制,就是從服務(wù)器通過tcp流從主服務(wù)器中同步相應(yīng)的數(shù)據(jù)。這樣當(dāng)主服務(wù)器數(shù)據(jù)丟失時(shí)從服務(wù)器中仍有備份。
與基于文件日志傳送相比,流復(fù)制允許保持從服務(wù)器更新。 從服務(wù)器連接主服務(wù)器,其產(chǎn)生的流WAL記錄到從服務(wù)器, 而不需要等待主服務(wù)器寫完WAL文件。
PostgreSQL流復(fù)制默認(rèn)是異步的。在主服務(wù)器上提交事務(wù)和從服務(wù)器上變化可見之間有一個(gè)小的延遲,這個(gè)延遲遠(yuǎn)小于基于文件日志傳送,通常1秒能完成。如果主服務(wù)器突然崩潰,可能會(huì)有少量數(shù)據(jù)丟失。
同步復(fù)制必須等主服務(wù)器和從服務(wù)器都寫完WAL后才能提交事務(wù)。這樣在一定程度上會(huì)增加事務(wù)的響應(yīng)時(shí)間。
下面的學(xué)習(xí)與實(shí)踐主要針對PostgreSQL的異步流復(fù)制(本文沒有涉及到同步復(fù)制、邏輯復(fù)制等,如果大家想了解其它的備份方案,可以閱讀相關(guān)官方文檔或其他資料介紹)。
異步流復(fù)制的中心思想是:主庫上提交事務(wù)時(shí)不需要等待備庫接收WAL日志流并寫入到備庫WAL日志文件時(shí)便返回成功,因此異步流復(fù)制的TPS會(huì)相對同步流復(fù)制要高,延遲更低。
環(huán)境準(zhǔn)備
操作系統(tǒng) | 服務(wù)器IP | 節(jié)點(diǎn)名稱 | 角色 |
---|---|---|---|
centos 7.2 | 172.17.0.2 | pghost1 | 主庫 |
centos 7.2 | 172.17.0.5 | pghost2 | 備庫 |
主要目錄規(guī)范:
要注意的是:編譯安裝Pg我們使用的是root賬戶,但是一般情況下,我們對數(shù)據(jù)庫的部署操作等應(yīng)該使用非root的pg超級管理員賬戶,所以需要我們預(yù)先創(chuàng)建相關(guān)用戶和目錄,并設(shè)置相關(guān)權(quán)限:
$ groupadd postgres $ useradd postgres -g postgres $ passwd postgres $ mkdir -p /data/pg10/pg_root $ mkdir -p /data/pg10/tbs $ chown -R postgres:postgres /data/pg10
網(wǎng)友評論