簡介:公司的SSO單點登入系統,底層使用的是Linux系統,并使用Docker容器,使用的是Postgresql資料庫。本文主要介紹怎麼對容器裡頭的Postgresql資料庫進行備份并異地存儲的過程。涉及的内容包括:磁盤挂載、資料備份腳本編寫,資料備份驗證等内容。
詳細情況請參考下文。
一、登入系統
1、登入linux系統
2、檢視image與container
說明:Docker中十分重要的兩個概念 Image和container,Image和container可以看作面向對象思想中的類和對象。container是 Image的執行個體化。
執行指令# docker images檢視鏡像
執行指令# docker ps檢視容器
二、登入K8S系統
1、擷取資料庫所在命名空間
執行指令# kubectl get namespace檢視該叢集中資料庫所在空間名
2、擷取資料庫所在節點
執行指令# kubectl get pod -n default選取default空間名進行叢集節點的擷取
3、進入對接節點資料庫容器
執行指令# kubectl exec -it idaas-postgresql-master-0 -n default -- bash進入資料庫容器
三、Postgresql資料庫備份
說明:K8S中的Postgresql資料庫備份步驟為,設定系統變量、采用pg_dumpall工具進行資料備份、授予生成的備份腳本執行權限、拷貝備份腳本到對應容器并執行該腳本、拷貝生成的備份檔案到伺服器指定位置。
1、postgresql備份腳本編寫
說明:編寫資料庫備份腳本,并存放到/usr/local/backup目錄中。
執行指令# vim /usr/local/backup/backup_postgre.sh編寫腳本
#!/bin/bash
#必須加這一句不然kubectl的相關操作不會執行
source /etc/profile
cur_time=$(date '+%Y-%m-%d')
filename="$cur_time.sql"
#備份資料腳本
cat > /usr/local/backup/exportPG.sh <<EOF
#!/bin/bash
export PGUSER=****s
export PGPASSWORD='******.com'
export PGHOST=172.**.**.**
export PGPORT=32432
#備份整個叢集庫中的資料
pg_dumpall -a > ${filename}
#備份整個叢集庫包含建庫建表操作
#pg_dumpall > ${filename}
EOF
#授予執行權限
chmod +x /usr/local/backup/exportPG.sh
#将伺服器上的備份腳本複制到對應容器中去
kubectl cp /usr/local/backup/exportPG.sh default/*****-postgresql-master-0:/exportPG.sh
#在容器外執行該腳本
kubectl exec -it *****-postgresql-master-0 -n default -- /exportPG.sh
#将備份後的資料檔案複制到容器外
kubectl cp default/*****-postgresql-master-0:${filename} /usr/local/backup/${filename}
備注:因為實際的備份操作需在容器内才可進行,所有腳本執行後會生成備份腳本exportPG.sh并将其複制到容器中,然後通過kubectl exec來執行複制進去的腳本exportPG.sh。備份完成後該備份檔案存在于容器内,使用kubectl cp将備份檔案從容器内複制到容器外伺服器的備份目錄中。
2、執行postgresql備份腳本
執行指令# sh backup_postgre.sh開始備份
3、檢視備份生成的檔案
執行指令# ls /usr/local/backup檢視生成的資料檔案
備注:其中2023-05-10.sql就是在容器中執行備份操作後生成并拷貝出來的資料庫備份檔案。
4、通過crontab制定每周六淩晨1點執行備份計劃
執行指令# crontab -e編輯計劃任務