日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

greenplum配置高可用_Greenplum 的高可用是怎么做到的?

發(fā)布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 greenplum配置高可用_Greenplum 的高可用是怎么做到的? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是高可用

?高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一,它通常是指,通過設(shè)計減少系統(tǒng)不能提供服務(wù)的時間。假設(shè)系統(tǒng)一直能夠提供服務(wù),我們說系統(tǒng)的可用性是100%,很多公司的高可用目標是4個9,也就是99.99%,這就意味著,系統(tǒng)的年停機時間為0.876個小時。

如何做到高可用

高可用系統(tǒng)最大的勁敵就是單點故障。任何一個單點故障都是不可避免的,如果系統(tǒng)是單點架構(gòu)的,當單點出現(xiàn)故障則會導(dǎo)致系統(tǒng)不可用。所以,實現(xiàn)高可用的本質(zhì)就是冗余。冗余部署服務(wù),當單點出現(xiàn)故障后,及時發(fā)現(xiàn)并用備份系統(tǒng)替換。

Greenplum高可用的實現(xiàn)

Greenplum是一個高可用數(shù)據(jù)庫系統(tǒng),同樣是通過冗余部署來實現(xiàn)高可用。

Greenplum系統(tǒng)中包含了一個主節(jié)點和若干個子節(jié)點。Greenplum正是通過對每個節(jié)點提供冗余來實現(xiàn)高可用。在數(shù)據(jù)庫系統(tǒng)里,通過復(fù)制技術(shù)來實現(xiàn)冗余。

復(fù)制

Greenplum通過復(fù)制來實現(xiàn)冗余。在執(zhí)行寫操作時,會產(chǎn)生xlog事務(wù)日志。xlog既可以作為數(shù)據(jù)庫Crash時進行數(shù)據(jù)恢復(fù)的依據(jù),同時也可以作為增量更新傳遞給從節(jié)點。xlog存儲在數(shù)據(jù)目錄的pg_xlog目錄下。

在主節(jié)點上會存在wal-sender進程,從節(jié)點上會存在wal-receiver進程,wal-sender進程會將產(chǎn)生的寫日志同步給wal-receiver進程來實現(xiàn)冗余。

Primary節(jié)點和Mirror節(jié)點上的wal sender和wal receiver進程可以通過ps命令看到

同步復(fù)制、異步復(fù)制

復(fù)制只是將xlog拷貝到從節(jié)點,復(fù)制分為同步復(fù)制和異步復(fù)制。

對于同步復(fù)制來說,commit操作在xlog同步到從節(jié)點后才返回。

對于異步復(fù)制,xlog刷新到本地磁盤即返回,并不等待從節(jié)點提交完,所以xlog同步到從節(jié)點是異步的,可能立刻完成,也可能有很大延遲。

同步復(fù)制保證了主從的一致性,但是增加了事務(wù)提交的延遲,另外如果從節(jié)點出現(xiàn)了故障,則事務(wù)將一會hang住無法提交。異步復(fù)制降低了延遲,但是可能存在主從不一致。

為了保證高可用性,目前Greenplum采用的是同步復(fù)制。通過GUC synchronous_commit和synchronous_standby_names來控制。其中synchronous_standby_names配置設(shè)置同步的子節(jié)點信息,通常設(shè)置成’*’來表示在所有從節(jié)點上使用同步復(fù)制(目前最多只支持一個從節(jié)點)。synchronous_commit則必須設(shè)置成on。

Greenplum?高可用部署圖

綜上,對于一個高可用的greenplum集群,master節(jié)點會對應(yīng)備份的standby節(jié)點,每個primary子節(jié)點會有與之對應(yīng)的mirror子節(jié)點。目前的greenplum只支持一主一從,暫時不支持一主多從。

gp_segment_configuration(節(jié)點元數(shù)據(jù)的catalog表)

Greenplum通過catalog表gp_segment_configuration來維護包括master,standby在內(nèi)的,所有節(jié)點的信息。這也是DBA了解集群狀態(tài)最直觀的方式。

下面是一個實例,該集群包含3個節(jié)點。

Primary-Mirror的故障恢復(fù)— FTS

FTS(Fault Tolerance Service)是greenplum提供的對于子節(jié)點的故障檢測與恢復(fù)的服務(wù)。FTS是一個隸屬于master的子進程,通過定期輪詢每個primary的狀態(tài)來獲取每個primary-mirror組的狀態(tài)。該進程只在master上存在,進程名為ftsprobe process。

這里需要注意的一點是,FTS并不直接連接mirror,對于mirror的狀態(tài),FTS也是通過primary來獲取。Primary則通過wal-sender進程的狀態(tài)來獲取mirror存活和同步狀態(tài)。

FTS在滿足如下三個條件的時候會觸發(fā)輪詢

1. 到時間了,gp_fts_probe_interval

2. 用戶手動執(zhí)行select gp_request_fts_probe_scan()

3. 查詢執(zhí)行過程中發(fā)現(xiàn)節(jié)點異常

輪詢過程圖如下:

對于每個primary-mirror組來說一般會有如下幾種狀態(tài)。

1. primary正常,mirror正常

2. primary正常,mirror異常

3. primary異常,mirror正常

4. primary異常,mirror異常

Greenplum目前是一主一從架構(gòu),所以對于第四種primary-mirror都出故障的情況是解決不了的,在這種情況下只能通過人工干預(yù)解決。對于第一種都正常的情況也不需要做任何處理。所以下面對二三兩種情況做詳細介紹。

故障1:primary掛掉

這是最常見,也是高可用解決的最主要的問題。一旦FTS發(fā)現(xiàn)某個primary已經(jīng)宕機,此時,如果Mirror是同步的,則將把對應(yīng)的Mirror Promote成primary,并更新catalog。

Promote后catalog可以看到如下更新。

通過role可以看出,mirror成了primary,preferred_role沒有變,同時原primary被標記成了mirror,但status是d。mode也被標記成了n。

故障2:mirror掛掉

如果mirror掛掉了,意味著primary與mirror的復(fù)制不可能同步了,所以primary會hang住,直到FTS來通知primary執(zhí)行Sync-off來關(guān)閉同步復(fù)制。關(guān)閉同步復(fù)制的方法即將synchronous_standby_names設(shè)置成空。

可以看到catalog表的變化,mode已經(jīng)變成不同步,mirror的狀態(tài)也標記成down。

注意:FTS在輪詢的時候,如果Primary節(jié)點發(fā)現(xiàn)Mirror存活并且復(fù)制方式是非同步,則會強制設(shè)置為同步復(fù)制,即更新synchronous_standby_names為’*’。

FTS相關(guān)GUC

Master的故障恢復(fù)

FTS與實現(xiàn)了segments節(jié)點的故障自動恢復(fù),那么Master如何恢復(fù)呢。在Greenplum6里并沒有實現(xiàn)Master故障的自動切換機制,Master節(jié)點如果出故障,只能通過手動方式運行g(shù)pactivatestandy來Promote standby。

同時,在Master節(jié)點上,synchronous_standby_names配置一直為空,即使Standby掛掉或網(wǎng)絡(luò)故障造成同步延遲,請求不會被阻塞。因為沒有自動通知Master做關(guān)閉同步復(fù)制的服務(wù)。

高可用相關(guān)運維工具gpactivatestandby

gpactivatestandby會激活standby成master。

例如:

gpactivatestandby -d /gpdata/standby

該命令會激活運行在/gpdata/standby目錄下的standby為master。gpinitstandby

gpinitstandby會基于當前master初始化一個新的standby。通常是在master掛掉,standby提升成master后,來生成一個新的standby作為master的備份用。

例如:

gpinitstandby -s myhost -S /gpdata/standby -P 2222

該命令會在myhost機器上的/gpdata/standby目錄,生成一個運行端口為2222的standby節(jié)點。

通過運行如下命令也可以在standby宕機后,重新啟動standby

gpinitstandby -ngprecoverseg

gprecoverseg工具可以恢復(fù)一個已經(jīng)宕機的mirror。

可以通過執(zhí)行g(shù)precoverseg -F來徹底重建已經(jīng)宕機的mirror。獲得Greenplum更多干貨內(nèi)容,歡迎前往Greenplum中文社區(qū)網(wǎng)站

總結(jié)

以上是生活随笔為你收集整理的greenplum配置高可用_Greenplum 的高可用是怎么做到的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。