[發(fā)明專(zhuān)利]PostgreSQL高彈性的高可用及負(fù)載均衡實(shí)現(xiàn)方法在審
| 申請(qǐng)?zhí)枺?/td> | 201410548447.2 | 申請(qǐng)日: | 2014-10-16 |
| 公開(kāi)(公告)號(hào): | CN104503965A | 公開(kāi)(公告)日: | 2015-04-08 |
| 發(fā)明(設(shè)計(jì))人: | 周正中 | 申請(qǐng)(專(zhuān)利權(quán))人: | 杭州斯凱網(wǎng)絡(luò)科技有限公司 |
| 主分類(lèi)號(hào): | G06F17/30 | 分類(lèi)號(hào): | G06F17/30;H04L29/08 |
| 代理公司: | 杭州杭誠(chéng)專(zhuān)利事務(wù)所有限公司33109 | 代理人: | 尉偉敏 |
| 地址: | 310013浙江省杭*** | 國(guó)省代碼: | 浙江;33 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | postgresql 彈性 可用 負(fù)載 均衡 實(shí)現(xiàn) 方法 | ||
1.PostgreSQL高彈性的高可用及負(fù)載均衡實(shí)現(xiàn)方法,其特征在于,包括:讀寫(xiě)混合場(chǎng)景實(shí)現(xiàn)方法和寫(xiě)場(chǎng)景實(shí)現(xiàn)方法;
(1)讀寫(xiě)混合場(chǎng)景實(shí)現(xiàn)方法步驟如下:
(1.1)準(zhǔn)備3臺(tái)服務(wù)器,其中2臺(tái)服務(wù)器分別用于數(shù)據(jù)庫(kù)主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn),另1臺(tái)服務(wù)器用于仲裁節(jié)點(diǎn);
(1.2)分別將數(shù)據(jù)庫(kù)主節(jié)點(diǎn)服務(wù)器的主機(jī)、數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)服務(wù)器的主機(jī)和仲裁節(jié)點(diǎn)服務(wù)器的主機(jī)配置在同一個(gè)網(wǎng)段,并設(shè)數(shù)據(jù)庫(kù)主節(jié)點(diǎn)為node1,設(shè)數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)為node2,設(shè)數(shù)據(jù)庫(kù)的一個(gè)虛擬IP為虛擬IP1,設(shè)數(shù)據(jù)庫(kù)的另一個(gè)虛擬IP為虛擬IP2,設(shè)仲裁節(jié)點(diǎn)為VOTE_HOST;
(1.3)配置數(shù)據(jù)庫(kù)主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)的FENCE設(shè)備,為了防止發(fā)生腦裂現(xiàn)象,讓FENCE設(shè)備在自動(dòng)failover前關(guān)閉服務(wù)器;
(1.4)配置數(shù)據(jù)庫(kù)主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)的網(wǎng)絡(luò),編寫(xiě)虛擬IP配置文件;
(1.5)在數(shù)據(jù)庫(kù)主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)安裝PostgreSQL數(shù)據(jù)庫(kù)軟件;
(1.6)在數(shù)據(jù)庫(kù)主節(jié)點(diǎn)初始化數(shù)據(jù)庫(kù);
(1.7)在數(shù)據(jù)庫(kù)主節(jié)點(diǎn)配置數(shù)據(jù)庫(kù)訪問(wèn)控制配置文件pg_hba.conf、postgresql.conf和recovery.conf,用于數(shù)據(jù)庫(kù)復(fù)制、啟動(dòng)數(shù)據(jù)庫(kù)、創(chuàng)建流復(fù)制用戶(hù)和啟動(dòng)虛擬IP;
(1.8)創(chuàng)建鏡像數(shù)據(jù)庫(kù),配置數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)流復(fù)制環(huán)境,并啟動(dòng)鏡像虛擬IP;
(1.9)配置仲裁節(jié)點(diǎn),設(shè)置用于仲裁網(wǎng)絡(luò)異常的數(shù)據(jù)庫(kù)監(jiān)聽(tīng)端口,即配置仲裁機(jī),在仲裁機(jī)上起一個(gè)監(jiān)聽(tīng)端口,用于跳轉(zhuǎn)到vip的PostgreSQL主庫(kù)監(jiān)聽(tīng)端口;
(1.10)在數(shù)據(jù)庫(kù)主節(jié)點(diǎn)創(chuàng)建心跳檢查函數(shù),數(shù)據(jù)庫(kù)主節(jié)點(diǎn)的變更將自動(dòng)復(fù)制到數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn);
(1.11)編寫(xiě)心跳檢查軟件和仲裁節(jié)點(diǎn)檢查軟件,并把心跳檢查軟件部署在數(shù)據(jù)庫(kù)主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn),把仲裁節(jié)點(diǎn)檢查軟件部署在仲裁節(jié)點(diǎn),用于自動(dòng)FAILOVER;
(1.12)開(kāi)啟用于自動(dòng)failover的心跳檢查軟件;
(1.13)配置組件監(jiān)控檢查,所述組件包括用于負(fù)責(zé)心跳檢測(cè)和故障時(shí)激活鏡像以及切換虛擬IP的HA切換軟件,所述組件還包括用于讀寫(xiě)負(fù)載均衡和客戶(hù)端會(huì)話保持連接池的中間件,所述組件還包括用于數(shù)據(jù)庫(kù)主節(jié)點(diǎn)IP讀寫(xiě)連接和數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)IP讀連接的虛擬IP,所述組件還包括用于投票解決單邊網(wǎng)絡(luò)故障的仲裁節(jié)點(diǎn),所述組件還包括用于解決腦裂問(wèn)題的FENCE設(shè)備,所述組件還包括用于負(fù)責(zé)讀寫(xiě)的數(shù)據(jù)庫(kù)主節(jié)點(diǎn)和從數(shù)據(jù)庫(kù)主節(jié)點(diǎn)獲取實(shí)時(shí)增量同步且只負(fù)責(zé)讀的數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn);
所述HA切換軟件的實(shí)現(xiàn)過(guò)程是:
(1.13.1)啟動(dòng),判斷主節(jié)點(diǎn)是否正常;
(1.13.2)如果主節(jié)點(diǎn)不正常則結(jié)束,如果主節(jié)點(diǎn)正常則判斷本地節(jié)點(diǎn)角色是否為鏡像節(jié)點(diǎn);
(1.13.3)如果本地節(jié)點(diǎn)不是鏡像節(jié)點(diǎn)則結(jié)束,如果本地節(jié)點(diǎn)為鏡像節(jié)點(diǎn)則計(jì)數(shù)清零,并檢查主節(jié)點(diǎn)狀態(tài);
(1.13.4)如果主節(jié)點(diǎn)狀態(tài)健康則結(jié)束,如果主節(jié)點(diǎn)狀態(tài)不健康則檢查仲裁節(jié)點(diǎn)狀態(tài);
(1.13.5)如果仲裁節(jié)點(diǎn)狀態(tài)不健康則再次進(jìn)行計(jì)數(shù)清零,如果仲裁節(jié)點(diǎn)狀態(tài)健康則從仲裁節(jié)點(diǎn)檢查主節(jié)點(diǎn)狀態(tài);
(1.13.6)如果從仲裁節(jié)點(diǎn)檢查主節(jié)點(diǎn)狀態(tài)為健康狀態(tài)則再次進(jìn)行計(jì)數(shù)清零,如果從仲裁節(jié)點(diǎn)檢查主節(jié)點(diǎn)狀態(tài)為不健康狀態(tài)則進(jìn)行主節(jié)點(diǎn)累計(jì)異常次數(shù)自增計(jì)數(shù),然后進(jìn)行主節(jié)點(diǎn)連接異常次數(shù)判斷1;
(1.13.7)如果主節(jié)點(diǎn)連接異常次數(shù)判斷1是第一次時(shí)則檢查鏡像節(jié)點(diǎn)延遲是否正常,如果主節(jié)點(diǎn)連接異常次數(shù)判斷1不是第一次時(shí)則進(jìn)行主節(jié)點(diǎn)連接異常次數(shù)判斷2;
(1.13.8)如果檢查鏡像節(jié)點(diǎn)延遲為不正常則再次進(jìn)行計(jì)數(shù)清零,如果檢查鏡像節(jié)點(diǎn)延遲為正常則生成鏡像節(jié)點(diǎn)健康狀態(tài)標(biāo)記,然后則進(jìn)行主節(jié)點(diǎn)連接異常次數(shù)判斷2;
(1.13.9)如果主節(jié)點(diǎn)連接異常次數(shù)判斷2的異常次數(shù)未達(dá)到閥值則再次進(jìn)行計(jì)數(shù)清零,如果主節(jié)點(diǎn)連接異常次數(shù)判斷2的異常次數(shù)達(dá)到閥值則檢查鏡像節(jié)點(diǎn)狀態(tài)標(biāo)記;
(1.13.10)如果檢查鏡像節(jié)點(diǎn)狀態(tài)標(biāo)記為正常則激活鏡像、切換虛擬IP和生成切換標(biāo)記,并在激活鏡像、切換虛擬IP和生成切換標(biāo)記后結(jié)束;如果檢查鏡像節(jié)點(diǎn)狀態(tài)標(biāo)記為不正常則生成主節(jié)點(diǎn)不健康標(biāo)簽和不發(fā)生切換,在生成主節(jié)點(diǎn)不健康標(biāo)簽和不發(fā)生切換后結(jié)束;
(1.14)配置用于讀寫(xiě)分離的連接池;所述讀寫(xiě)分離的實(shí)現(xiàn)過(guò)程是:APP提交SQL來(lái)判斷SQL是讀還是寫(xiě),如果判斷SQL是寫(xiě)則分發(fā)給主節(jié)點(diǎn),如果判斷SQL是讀則分發(fā)給鏡像節(jié)點(diǎn);
(1.15)人為的switchover測(cè)試,關(guān)閉數(shù)據(jù)庫(kù)主節(jié)點(diǎn),關(guān)閉虛擬IP1,激活數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)數(shù)據(jù)庫(kù)recovery.conf自動(dòng)修改為recovery.done,切換為主角色,在數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)啟動(dòng)虛擬IP1,數(shù)據(jù)庫(kù)主節(jié)點(diǎn)recovery.done改為recover.conf,啟動(dòng)數(shù)據(jù)庫(kù)主節(jié)點(diǎn),角色切換為鏡像角色;
(1.16)通過(guò)拔數(shù)據(jù)庫(kù)主節(jié)點(diǎn)網(wǎng)線,或者關(guān)閉數(shù)據(jù)庫(kù)主節(jié)點(diǎn),或者關(guān)閉數(shù)據(jù)庫(kù)主節(jié)點(diǎn)服務(wù)器,或者關(guān)閉數(shù)據(jù)庫(kù)主節(jié)點(diǎn)網(wǎng)卡來(lái)自動(dòng)進(jìn)行failover測(cè)試;
(1.17)當(dāng)failover發(fā)生時(shí),數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)自動(dòng)切換為數(shù)據(jù)庫(kù)主節(jié)點(diǎn),同時(shí)虛擬IP1自動(dòng)在數(shù)據(jù)庫(kù)鏡像節(jié)點(diǎn)開(kāi)啟;
(2)寫(xiě)場(chǎng)景實(shí)現(xiàn)方法步驟如下:
(2.1)準(zhǔn)備至少2臺(tái)用于安裝數(shù)據(jù)庫(kù)的主機(jī);
(2.2)在每臺(tái)主機(jī)上安裝數(shù)據(jù)庫(kù)軟件;
(2.3)在每臺(tái)主機(jī)執(zhí)行初始化數(shù)據(jù)庫(kù)操作,并配置數(shù)據(jù)庫(kù)監(jiān)聽(tīng)端口;
(2.4)在每臺(tái)主機(jī)創(chuàng)建同樣的SCHEMA、用戶(hù)、密碼;
(2.5)在每臺(tái)主機(jī)創(chuàng)建同樣的業(yè)務(wù)表和約束;
(2.6)配置DNS,使主機(jī)名對(duì)應(yīng)多個(gè)數(shù)據(jù)庫(kù)主機(jī)的IP,同時(shí)配置監(jiān)控,當(dāng)數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)生變更時(shí)實(shí)時(shí)更新DNS條目;
(2.7)配置連接池或驅(qū)動(dòng)來(lái)實(shí)現(xiàn)寫(xiě)負(fù)載均衡以及HA;所述寫(xiě)負(fù)載均衡以及HA的實(shí)現(xiàn)過(guò)程是:APP提交SQL,由SQL分發(fā)策略采用寫(xiě)的方式分發(fā)給節(jié)點(diǎn)1,分發(fā)給節(jié)點(diǎn)1后判斷分發(fā)是否成功,如果分發(fā)成功則分發(fā)完成,如果分發(fā)不成功則SQL分發(fā)策略嘗試分發(fā)給下一個(gè)節(jié)點(diǎn),例如分發(fā)給節(jié)點(diǎn)n,直到分發(fā)成功為止則實(shí)現(xiàn)分發(fā)完成作業(yè);
(2.8)應(yīng)用軟件通過(guò)pgbouncer連接數(shù)據(jù)庫(kù),DNS策略配置為round-robin模式,當(dāng)新建連接時(shí),輪詢(xún)的選擇DNS解析出來(lái)的IP,從而POOLSERVER分布在不同的后端數(shù)據(jù)庫(kù),實(shí)現(xiàn)負(fù)載均衡。
該專(zhuān)利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專(zhuān)利權(quán)人授權(quán)。該專(zhuān)利全部權(quán)利屬于杭州斯凱網(wǎng)絡(luò)科技有限公司;,未經(jīng)杭州斯凱網(wǎng)絡(luò)科技有限公司;許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專(zhuān)利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410548447.2/1.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專(zhuān)利網(wǎng)。
- 同類(lèi)專(zhuān)利
- 專(zhuān)利分類(lèi)
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F17-00 特別適用于特定功能的數(shù)字計(jì)算設(shè)備或數(shù)據(jù)處理設(shè)備或數(shù)據(jù)處理方法
G06F17-10 .復(fù)雜數(shù)學(xué)運(yùn)算的
G06F17-20 .處理自然語(yǔ)言數(shù)據(jù)的
G06F17-30 .信息檢索;及其數(shù)據(jù)庫(kù)結(jié)構(gòu)
G06F17-40 .數(shù)據(jù)的獲取和記錄
G06F17-50 .計(jì)算機(jī)輔助設(shè)計(jì)
- 一種PostgreSQL塊
- 一種PostgreSQL塊存儲(chǔ)設(shè)備讀寫(xiě)模塊
- 一種基于PostgreSQL塊存儲(chǔ)設(shè)備的遷移方法
- 一種基于拓展PostgreSQL的語(yǔ)義軌跡數(shù)據(jù)庫(kù)構(gòu)建方法
- 一種數(shù)據(jù)存儲(chǔ)方法及裝置
- 清理日志的方法及裝置、存儲(chǔ)介質(zhì)、電子裝置
- PostgreSQL數(shù)據(jù)庫(kù)的DDL同步方法、裝置、設(shè)備和介質(zhì)
- 一種解決postgresql高可用節(jié)點(diǎn)宕機(jī)恢復(fù)的方法
- 基于SSL連接PostGreSQL數(shù)據(jù)庫(kù)審計(jì)的實(shí)現(xiàn)方法及系統(tǒng)
- 基于postgreSQL客戶(hù)端PSQL的數(shù)據(jù)交互方法及交互裝置
- 負(fù)載和負(fù)載方向檢測(cè)裝置
- 一種智能節(jié)能插座
- 負(fù)載電路及具有該負(fù)載電路的負(fù)載測(cè)試裝置
- 負(fù)載保護(hù)電路及負(fù)載保護(hù)方法
- 負(fù)載容器和負(fù)載支架系統(tǒng)
- 負(fù)載檢測(cè)電路及其負(fù)載檢測(cè)裝置
- 負(fù)載檢測(cè)器、負(fù)載檢測(cè)用套件、以及負(fù)載檢測(cè)系統(tǒng)
- 負(fù)載
- 負(fù)載測(cè)量方法、負(fù)載測(cè)量裝置和負(fù)載測(cè)量配置
- 負(fù)載驅(qū)動(dòng)電路、負(fù)載驅(qū)動(dòng)系統(tǒng)





