給小白的 PG 容器化部署教程(下)

来源:https://www.cnblogs.com/radondb/archive/2022/06/02/16337460.html
-Advertisement-
Play Games

作者:王志斌 編輯:鐘華龍 本文來自社區小伙伴 王志斌 的投稿。從小白的角度,帶你一步步實現將 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分為上下兩部分,《第一部 Kubernetes 環境準備》已經發佈。第二部分將帶大家部署一個 RadonDB Postgre ...


作者:王志斌

編輯:鐘華龍

本文來自社區小伙伴 王志斌 的投稿。從小白的角度,帶你一步步實現將 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分為上下兩部分,《第一部 Kubernetes 環境準備》已經發佈。第二部分將帶大家部署一個 RadonDB PostgreSQL Operator 和集群。

什麼是 RadonDB PostgreSQL Operator?

RadonDB PostgreSQL 是一款基於 PostgreSQL 使用 Operator 實現的資料庫容器化項目。

  • 被廣泛應用於地理空間和移動領域
  • 具備高可用、穩定性、數據完整性等性能
  • 支持線上水平擴展
  • 支持故障自動轉移 ,提供 HA 功能
  • 提供 PostgreSQL 常用參數介面,方便調整參數
  • 提供 PostGIS 插件,具備存儲、查詢和修改空間關係的能力
  • 提供實時監控、健康檢查、日誌自動清理等功能

RadonDB PostgreSQL Operator 可基於 KubeSphere、OpenShift、Rancher 等 Kubernetes 容器平臺交付。可自動執行與運行 RadonDB PostgreSQL 集群有關的任務。

RadonDB PostgreSQL Operator基於 https://github.com/CrunchyData/postgres-operator 項目實現,進行了改進優化,後續會持續回饋給社區。

倉庫地址:https://github.com/radondb/radondb-postgresql-operator

一、部署 RadonDB PostgreSQL 集群

安裝 Helm

curl  https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

準備本地存儲

本次實驗 RadonDB PostgreSQL 集群數據持久化採用 Local Persistent Volumes,以下的步驟為配置集群所使用的本地持久化存儲捲,配置一個一主一從的高可用集群,最低需要三個持久化存儲捲:

  1. PostgreSQL Primary 數據捲
  2. PostgreSQL Replica 數據捲
  3. PostgreSQL 備份捲

實際使用可以根據具體的情況,靈活配置存儲捲。

大體步驟:

  1. 虛擬機添加新硬碟(每台虛擬機分別添加一塊)
  2. 重啟虛擬機
  3. 查看現磁碟是否正常掛載
fdisk -l

可看到新加的虛擬硬碟,一般名為: Disk /dev/sdb
給新加的硬碟分區。

fdisk /dev/sdb

#按照提示增加新分區 
/dev/sdb1 /dev/sdb2 /dev/sdb13

格式化磁碟分區。用 ext4 格式對 /dev/sdb1 進入格式化。

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3

掛載分區,創建新的掛載點。

mkdir -p /data/pgdata/pv{1..3}

將新磁碟分區掛載到 /work 目錄下。

mount -t ext4 /dev/sdb1 /data/pgdata/pv1
mount -t ext4 /dev/sdb3 /data/pgdata/pv2
mount -t ext4 /dev/sdb4 /data/pgdata/pv3

查看掛載

df -h

可以看到新加的硬碟: /dev/sdb1 /dev/sdb2 /dev/sdb3
實現開機自動掛載。

vim /etc/fstab

在最後一行加入:

/dev/sdb1 /data/pgdata/pv1 ext4 defaults 0 2
/dev/sdb2 /data/pgdata/pv2 ext4 defaults 0 2
/dev/sdb3 /data/pgdata/pv3 ext4 defaults 0 2

創建命名空間

kubectl create namespace pgo

部署 PostgreSQL Operator

kubectl apply -f https://github.com/radondb/radondb-postgresql-operator/blob/main/installers/kubectl/postgres-operator.yml -n pgo

# 查看狀態
kubectl get all -n pgo --selector=name=postgres-operator

file

安裝靜態本地盤控制器

Kubernetes 當前支持靜態分配的本地存儲。可使用 local-static-provisioner[1] 項目中的 local-volume-provisioner 程式創建本地存儲對象。

git clone https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner.git 
cd sig-storage-local-static-provisioner 

# 主要修改行號
vi helm/provisioner/values.yaml 

66  classes: 
67  - name: fast-disks 
70  hostDir: /data/pgdata 
76  volumeMode: Filesystem 
81  fsType: ext4
116 image: quay.io/external_storage/local-volume-provisioner:v2.4.0 

# 
helm install localprovi . -n kube-system 

# podpv 
kubectl get po -n kube-system -l app.kubernetes.io/name=provisioner

file

部署資料庫集群

啟用 PGO 客戶端,創建資料庫集群。

kubectl exec -it -n pgo  $(kubectl get po -n pgo -l name=pgo-client  -o jsonpath='{range .items[*]}{.metadata.name}{end}')  -- bash
pgo create cluster radondb --storage-config=fast-disks

部分參數可參見下表,並可執行 pgo 命令行幫助 pgo --help 獲取更詳細的部署參數幫助。

命令行 命令說明
--pgbackrest-storage-type="s3" 備份存儲的類型。支持 posix 、s3、gcs、posix,s3 和 posix,gcs五種類型。
--replica-count=3 PostgeSQL副本數量。
--ccp-image=radondb-postgres-ha 使用的鏡像名稱。 帶 gis 插件的鏡像,例如 radondb-postgres-gis-ha。 不帶 gis 插件的鏡像,例如 radondb-postgres-ha。
--ccp-image-prefix=docker.io/radondb 鏡像倉庫。
--ccp-image-tag=debian-14.2-2.1.1 dockerhub 上鏡像的標簽。
--pgbackrest-s3-endpoint=s3.pek3b.qingstor.com \ --pgbackrest-s3-key=xxxxx \ --pgbackrest-s3-key-secret=xxxx \ --pgbackrest-s3-bucket=xxxx \ --pgbackrest-s3-region=xxx \ --pgbackrest-s3-verify-tls=false 支持 s3 協議的對象存儲設置,主要用於備份。若備份存儲選擇了 s3 則需要設置這部分參數。
--metrics 啟用適用於 Prometheus 的指標收集器。
--pgbadger 啟用 pgbadger。
--debug 調試模式。

執行以下命令觀察集群創建過程。待所有 Pod 狀態切換為 Running,則集群創建完成。

kubectl get po -n pgo --watch

檢查 local pv 是否正常綁定

kubectl get pv -n pgo |grep ^local

file

二、連接 RadonDB PostgreSQL 集群

通過執行 pgo 命令連接,獲取集群中用戶賬號信息。

pgo show user -n pgo radondb

以下以 RadonDB PostgreSQL 集群為示例,獲取資料庫賬號並連接資料庫。

 pgo show user -n pgo radondb --show-system-accounts
 CLUSTER  USERNAME    PASSWORD         EXPIRES STATUS ERROR 
--------- -------------- ------------------------ ------- ------ -----
radondb ccp_monitoring Dwpa|MCg,b4M+rY.>ZC0ONz4 never  ok        
radondb postgres    1a4R-d7Po=,PS@R:-=?[gP(9 never  ok      
radondb primaryuser   =B8x*Haf*dCq+V4hkGSfh/.} never  ok      
radondb testuser    yTFeeH1|^DX<Bx4[?:B_/Q;M never  ok 

此外,還可以通過 psql 工具連接。

查看服務:

kubectl -n pgo get svc
NAME               TYPE     CLUSTER-IP    EXTERNAL-IP  PORT(S)                 AGE
postgres-operator         ClusterIP  10.96.64.37   <none>     8443/TCP,4171/TCP,4150/TCP       58m
radondb             ClusterIP  10.96.171.227  <none>     10000/TCP,9187/TCP,2022/TCP,5432/TCP  5m42s
radondb-backrest-shared-repo  ClusterIP  10.96.235.247  <none>     2022/TCP                5m42s
radondb-pgbouncer        ClusterIP  10.96.234.49   <none>     5432/TCP                4m16s
radondb-replica         ClusterIP  10.96.67.45   <none>     10000/TCP,9187/TCP,2022/TCP,5432/TCP  3m50s

以 testuser 賬號為示例,連接到資料庫。

kubectl -n pgo port-forward svc/radondb 5432:5432 
PGPASSWORD='xxxxxxxxxxxxxxxxxxxxxxxx' psql -h localhost -p 5432 -U testuser radondb

查看集群

kubectl exec -it rp1-65798ccf5c-ftbp9 -n pgo -c database bash

file

可以看到圖中為 3 節點集群。至此,RadonDB PostgreSQL 容器化資料庫搭建完成。

引用鏈接

1.local-static-provisioner:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner

致謝

RadonDB 開源社區向本文的投稿作者表示感謝!也期待更多的社區小伙伴的投稿~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • OAuth2.0協議 在開始之前呢,需要我們對一些認證授權協議有一定的瞭解。 OAuth 2.0 的一個簡單解釋 http://www.ruanyifeng.com/blog/2019/04/oauth_design.html 理解 OAuth 2.0 https://www.ruanyifeng. ...
  • 文件系統 操作系統就是處理各種數據的,這些數據在硬碟上就是二進位,人類肯定不能直接看懂這些二進位數據,要有一個翻譯器,將這些二進位的數據還原為人類能看懂的文件形式,這個工作就是由文件系統來完成的,文件系統的目的就是實現數據的查詢和存儲,由於使用場合、使用環境的不同,Linux 有多種文件系統,不同的 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 1 簡介 FCN-4是一個應用於音頻自動標註的全捲積神經網路。使用該網路完成音頻標註任務時,首先需要使用python的音頻處理工具包Librosa提取音頻的時頻特征,針對mp3格式的音頻文件,Librosa讀取音頻文件的工作依賴音頻處理後端ffm ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 理解H橋電路的工作原理,結合前面幾個項目學習過的定時器中斷、EXTI、串口通訊等,要求通過7個按鈕控制步進電動機 ...
  • mysql -uroot -proot -h192.168.56.10 表示使用mysql的客戶端進行連接資料庫管理系統 -u後面是連接資料庫的用戶名,一般預設的情況下用戶名都是root -p後面是連接資料庫的密碼,在安裝mysql的時候自己設置的 -h表示資料庫管理系統所在的伺服器的ip地址,如果 ...
  • 一、 概述 compose 是用來定義和運行一個或多個容器(通常都是多個)運行和應用的工具。使用 compose 可以簡化容器鏡像的構建以及容器的運行。 compose 使用 YAML 文件來定義多容器之間的關係。一個 docker-compose up 就可以把完整的應用跑起來。 本質上,comp ...
  • job提交階段 1、準備好待處理文本。 2、客戶端submit()前,獲取待處理數據的信息,然後根據參數配置,形成一個任務分配的規劃。 3、客戶端向Yarn請求創建MrAppMaster並提交切片等相關信息:job.split、wc.jar、job.xml。Yarn調用ResourceManager ...
  • 資料庫安全,是指以保護資料庫系統、資料庫伺服器和資料庫中的數據、應用、存儲,以及相關網路連接為目的,防止資料庫系統及其數據遭到泄露、篡改或破壞的安全技術。 資料庫是企業最為核心的數據保護對象。與傳統的網路安全防護體系不同,資料庫安全技術更加註重從客戶內部的角度出發做安全,其安全要求包括了保密性、完整 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...