天天看點

CLup:PostgreSQL高可用叢集平台

作者:中啟乘數科技

CLup簡介

1. 為什麼要使用CLup

CLup軟體是一套管理PostgreSQL、PolarDB等資料庫的管理軟體。

企業在開始使用PostgreSQL、PolarDB等資料庫時,總是遇到這些問題:

  • 怎麼實作資料庫的高可用方案:當資料庫出現問題時,能自動切換,不需要DBA半夜爬起來處理。
  • 如何對資料庫進行監控告警。
  • 如何對進行備份,保證資料的安全性。
  • 如何快速搭建一套資料庫系統起來。
  • 如何快速搭建現有資料庫的備庫。
  • 如何快速修改主備庫之間的級連關系。
  • 如何實作容災,當整個機房的網絡斷了,如何快速恢複業務。

CLup就是為解決這些問題而産生的産品。

CLup最大的特色功能是高可用。目前已存在幾個開源的高可用軟體:

  • keepalived: 是一個較簡單的高可用軟體,其最早是于用LVS負載均衡軟體,現在也常常用于ngnix的高可用,也可以用于資料庫領域,但需要自己定制切換腳本才能完成資料庫的高可用功能,另keepalived基于VRRP協定實作的,其存在着腦裂的問題。
  • haproxy: 通常是用于http等web應用,較少使用于資料庫領域
  • Heartbeat或pacemaker+corosync: 這兩個軟體是通用型高可用軟體,并不是專為PostgreSQL設計,安裝時需要安裝很多依賴包,有很多的配置,比較複雜,如果不是非常精通的人員搭建出來的高可用叢集,經常容易出現誤切換等問題
  • repmgr:是一個套針對于PostgreSQL資料庫的高可用方案,相對其他的高可用方案來說,相對比較簡單。不足之處在于沒有對VIP的管理,如果要實作VIP的管理,需要自己寫腳本來實作。
  • patroni:是另一個套針對于PostgreSQL資料庫的高可用方案,相對repmgr來說,複雜一些。不足之處與repmgr類似,沒有實作對VIP的管理,如果要實作VIP的管理,需要自己寫腳本來實作
  • pgpool-II: 是PostgreSQL資料庫領域比較常見的高可用軟體,其最早是做為連接配接池來使用的,pgpool-II除了高可用功能外,設計了一些更複雜的使用模式,對于初學者來說,如果沒有深入的學習pgpool-II,根本搞不清楚複制模式、主備模式、并行查詢模式的差別。實際上pgpool-II這麼多的模式真正在企業中可以使用的模式基本隻有“流複制+Standby的主/備模式”,其它模式都有各種各樣的缺點,實用性不強。但由于這些絕大多數使用不上的功能,導緻pgpool-II的配置很複雜,稍有不慎就容易發生因為配置不合理而導緻的重大事故。

但上面這些開源軟體無一例外有以下這些問題:

  • 需要自己實作一些腳本才能完整實作高可用的功能
  • HA的切換的配置有一定的複雜度,文檔中對一些高可用切換原理性和參數介紹得較少或介紹得晦澀難懂,難以掌握,如果沒有深入的學習,容易出現錯誤的配置,進而導緻一些嚴重得故障
  • 無集中管理的功能,無法一套軟體同時管理多套高可用叢集,增加了運維工作的難度

是以中啟乘數科技為PostgreSQL資料庫量身定制一套最符合PostgreSQL使用者的高可用及監控管理的軟體,讓企業可以快速搭建一套高可靠、高可用、高性能的資料庫,同時滿足易管理維護、集中管理的一套資料庫解決方案。

使用CLup可以輕松建立和管理幾十套至上百套PostgreSQL高可用的資料庫叢集。當發生故障切換後,有詳細得故障切換日志,友善故障原因定位。另還可以手工一鍵切換,滿足運維中日常停機的需要。CLup還提供了PostgreSQL的一些基本監控和TOP SQL的監控以及容災管理及一鍵加備庫,最大限度的簡化DBA的工作。

2. CLup發展曆程

CLup軟體從2017年就開始研發,第一個正式版本釋出于2017年11月20日。版本發展的曆程如下:

  • CLup1.0:實作了高可用、讀寫分離的功能,指令行管理模式。
  • CLup2.0:增加了WEB統一管理界面,大大提升了易用性。
  • CLup3.0:增加了共享存儲類型的高可用模式;增加了一鍵搭建備庫的功能,增加了資料庫容災管理的功能;
  • CLup4.0:增加了資料庫備份的功能,全面支援了國産鲲鵬平台和各種國産OS,如UOS、銀河麒麟。支援了多種的基于PostgreSQL的國産資料庫。

3. CLup的亮點功能

亮點功能如下:

  • 基于流複制的高可用叢集中,當主庫出現故障時,備庫被激活後,原先的主庫需要轉換成目前新主庫的備庫,這個過程很複雜,我們的程式可以把各種情況下做成自動化,整個恢複過程都可以是一鍵完成。
  • 可以支援容災的高可用方案,如一主兩個本地備庫+一個遠端容災庫,本地主庫出現問題時優先切換本地備庫,本地出現嚴重問題後,可以一鍵切換容災庫。
  • 對于主庫可以update做心跳檢測,對備庫可以配置一個隻讀查詢做心跳檢測,保證檢測的準确性。
  • 為防止主庫負載過大造成update傳回逾時,設計上采用多次探測每次。逾時時間遞增
  • 探測方有自身檢測:探測前應通過第三方網關确認自身網絡狀态正常。
  • 對于共享存儲的叢集,通過特别的處理機制解決了腦裂問題。
  • 一鍵搭建備庫的功能
  • 可以管理各種複雜的級聯關系的流複制叢集,如主庫A後面有一個備庫B,而B後面又有兩個備庫等任意複雜的流複制叢集。這個功能對于容災特别管用。同時通過滑鼠點一點就可以改變級連關系,如主庫是A,A後面挂了一個B備庫,B備庫再挂一個C備庫,即為A->B->C的級連關系,可以一鍵改成A->C->B。
  • 可以對現有管理的PostgreSQL資料庫做統一備份和管理,可以一鍵恢複資料庫,并可以通過WAL日志恢複到任意時間點。
  • 可以手工一鍵切換,如有時想對某台機器做停機維護,為了不影響業務,可以進行手工高可用切換。手工切換類似Oracle資料庫中的switchover,可以任意可逆切換。
  • 在同一套CLup中,可以同時對很多套PostgreSQL高可用叢集進行統一內建中管理

在監控的功能中,監控了一些最有價值的名額,而不是像有些監控工具中,監控了很多名額,但大多數都是沒有啥用處的功能。 特色功能是我們有TopSQL的監控。

另外CLup是一套非常容易部署,對環境要求很低的高可用叢集管理軟體,如可以在2GB記憶體的機器上部署和使用,對機器的CPU沒有要求。之是以可以做到這種程度,原因是此軟體完全是由我們自己研發的,并不是基于一些開源軟體上做的二次封裝。有一些友商的管理平台是在第三方開源高可用軟體上封裝的,如ZooKeeper、etcd、repmgr或patroni上做的封裝,導緻對環境要求高,系統資源占用大等問題。

常見功能

1. 一鍵建立單機資料庫

在DBA的日常工作中,建立新資料庫是比較頻繁的工作,我們可以通過CLup一鍵建立各種版本的PostgreSQL資料庫,如下圖所示,我們可以友善的在CLup的WEB管理界面中一鍵建立資料庫:

CLup:PostgreSQL高可用叢集平台

CLup的WEB界面中一鍵建立單機資料庫

如果是開發環境或測試環境等非生産系統中,通常需要單機資料庫,而不是高可用的資料庫叢集。

2. 一鍵建立流複制高可用資料庫

在一個生産系統中,我們通常是需要一個有高可用功能的資料庫叢集。在PostgreSQL資料庫的場景下,通常利用PostgreSQL資料庫自身的流複制技術搭建一主多備的資料庫機器:

CLup:PostgreSQL高可用叢集平台

利用PostgreSQL自身的流複制技術搭建一主多備資料庫

如果要保證故障切換時零資料丢失,通常我們需要搭建一主N備(N>=2) 的同步複制的高可用叢集。

我們可以友善的通過CLup搭建一主多備的高可用叢集。

如果資料庫需要容災,通過CLup也可以快速的搭建下面帶容災的高可用叢集:

CLup:PostgreSQL高可用叢集平台

通過CLup快速搭建帶容災的高可用叢集

3. 一鍵建立基于共享存儲的高可用資料庫叢集

如果我們有類似SAN存儲的共享存儲,我們可以用CLup搭建基于共享存儲的高可用叢集:

CLup:PostgreSQL高可用叢集平台

CLup搭建基于共享存儲的高可用叢集

有兩台機器,共享存儲把共享盤同時輸出到兩台機器上,資料庫正常情況下運作在第一台機器上,當出現故障後,把資料庫的資料檔案所在的檔案系統挂載到第二台機器上,然後把資料庫在第二台機器上啟動,即可以完成故障切換的工作。

使用基于共享存儲的高可用方案的原因有以下幾種:

  1. 基于共享存儲的切換是不會丢失資料的,而且切換過程簡單。
  2. 如果想使用邏輯複制功能的使用者。我們知道,邏輯複制是需要啟用露邏輯複制槽的,而當使用流複制的高可用叢集時,當主備庫切換後,邏輯複制槽就失效了,導緻故障切換後,資料同步就中斷了。而使用基于共享存儲的切換不會有這個問題,因為當把資料庫從第一台切換到第二台機器上時,第二台機器上的資料庫還是原先的主庫,沒有變化,邏輯複制槽可以繼續使用,不會出現失效的情況。

4. 一鍵搭建備庫功能

在DBA的日常工作中,搭建備庫是比較常用的功能,通過CLup的WEB界面中,可以快速的建立備庫。特别有一些使用者使用了表空間,通過CLup的WEB界面,都可以輕松的搭建備庫,而不必手工輸入複雜搭建備庫的指令。

快速安裝

1. 部署的架構

CLup程式分兩個子產品:

  • clup-server: 通常需要一台單獨的機器安裝此子產品,此管理子產品提供WEB界面以及其他的管理功能,高可用功能也是由此子產品完成。clup-server從這台機器上去探測各個資料庫是否正常,如果不正常,會執行相應的高可用切換動作。要求這台機器可以通路所有的資料庫主機。
  • clup-agent: 每台資料庫主機上都需要安裝此子產品,clup-server子產品是通過向每台資料庫主機上的clup-agent程式發送指令來完成對每台機器上的資料庫的控制。

CLup部署的架構圖:

CLup:PostgreSQL高可用叢集平台

CLup部署架構圖

2. 機器的規劃

部署CLup我們使用4台虛拟機,作業系統使用CentOS7.6,其中一台機器部署clup-server,其它3台機器上跑資料庫并安裝部署clup-agent程式。

主機名 IP 作用 資料目錄
clup0 10.199.160.10 部署clup-server N/A
clup1 10.199.160.11 資料庫機器,部署clup-agent /data/pgdata
clup2 10.199.160.12 資料庫機器,部署clup-agent /data/pgdata
clup3 10.199.160.13 資料庫機器,部署clup-agent /data/pgdata
注意:對于社群版本有CPU的核數限制,如果隻是想看看CLup的功能,建議資料庫機器使用1核的虛拟機,這樣不會超過社群版本的CPU核的限制。或者也可以電話0571-87603386,申請一個試用的license。

3. 安裝clup-server

在10.199.160.10機器上:

安裝clupmdb子產品,下載下傳clupmdb安裝包:

wget https://gitee.com/csudata/clup-community/releases/download/4.2.5/clupmdb4.0.0.el7.x86_64.bin           

運作:bash clupmdb4.0.0.el7.x86_64.bin

[root@clup0 ~]# bash clupmdb4.0.0.el7.x86_64.bin
==== Installation is starting ...
==== Installation is complete.           

安裝clup-server子產品,下載下傳clup-server安裝包:

wget https://gitee.com/csudata/clup-community/releases/download/4.2.5/clup4.2.5.el7.x86_64.bin           

運作:bash clup4.2.5.el7.x86_64.bin:

[root@clup0 ~]# bash clup4.2.5.el7.x86_64.bin
==== Installation is starting ...
==== Your ip is 10.197.163.30/20
==== register systemd service ...
already register systemd service!
==== register systemd service ok.
==== Installation is complete.           

然後我們在浏覽器輸入 http://10.199.160.10:8090 ,打開WEB界面:

CLup:PostgreSQL高可用叢集平台

CLup登入界面

預設的使用者名為:admin

預設密碼為:cstech

輸入後就可以登陸CLup的管理界面了。WEB界面中可以管理的資料庫目前都是空的,還需要在資料庫主機中安裝clup-agent後,才能進一步的操作。

4. 安裝clup-agent

在需要部署資料庫的主機上安裝clup-agent。在本示例是在10.199.160.11、10.199.160.12、10.199.160.13機器上安裝clup-agent。

下載下傳clup-agent安裝程式:

wget https://gitee.com/csudata/clup-community/releases/download/4.2.5/clup-agent4.2.5.el7.x86_64.bin           

運作:bash clup-agent4.2.5.el7.x86_64.bin:

[root@clup1 ~]# bash clup-agent4.2.5.el7.x86_64.bin
==== Installation is starting ...
==== Your ip is 10.199.160.11/20
Enter Clup Server IP Addr:           

輸入clup服務端的IP位址:10.199.160.10 然後回車繼續:

Enter Clup Server IP Addr: 10.199.160.10
Clup Server ip is 10.199.160.10!
==== register systemd service ...
2022-10-08 11:11:47,287 INFO clup-agent v4.2.5 Copyright (c) 2018-2022 CSUDATA.COM All rights reserved.
already register systemd service!
==== register systemd service ok.
==== Installation is complete.           

5. 安裝PostgreSQL資料庫

可以使用PostgreSQL官方提供的方法安裝PostgreSQL。但這裡為了友善大家快速的入門,這裡提供了一個快速安裝的PostgreSQL資料庫的方法,下載下傳安裝包:

wget https://gitee.com/csudata/csupg/releases/download/1.0/csupg.1.0.el7.x86_64.bin           

安裝:

bash csupg.1.0.el7.x86_64.bin           

完整産品手冊:CLup4.x産品手冊:CLup簡介

詳細安裝内容:CLup4.x産品手冊:安裝基礎

在阿裡雲中使用CLup建立和管理Polardb:CLup4.x産品手冊:在阿裡雲中使用CLup建立和管理Polardb

繼續閱讀