知识储备
简单了解K8S,最好知道各个资源的区别,比较熟悉一些基本的命令
注意事项
以下只是mongo的备份。
1/无法还原已经删除的app,如果删除app后执行还原。恢复数据后请进入mongo手动删除app之类的字段
2/无法还原已经删除的云存储
前提概要
私有部署教程可以参考:30分钟在家里拥有一个属于自己的Laf
下方是全新的私有部署替换。如果是原本的mongodb需要更换的话部署教程可以参考以下之后将数据库数据备份后还原到新版数据库即可~
环境说明
Sealos 4.1.7
Ubuntu 22.04
Minio:部署在局域网内的。用于数据库备份还原。
1.初始化K8S环境和安装需要的依赖
和之前的部署教程是一致的。
2.安装operator-server
#安装 此处需要科学上网环境要不然会很慢如没有环境得建议参考文档使用其他方式部署
helm repo add percona https://percona.github.io/percona-helm-charts/
helm repo update
#如果是全新安装可能会报错laf-system没有找到,可以先kubectl create namespace laf-system 创建
helm install my-operator percona/psmdb-operator --version 1.14.0 --namespace laf-system
#如需要卸载可以
helm unstall my-operator --namespace laf-system
#验证安装是否成功
kubectl get pods -l app.kubernetes.io/name=psmdb-operator --namespace laf-system
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682133113-519983-1.jpg]
3.建立Minio备份的Secrets
这边部署在局域网后可以通过minio控制台进入并且建立bucket
注意点:AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY需要使用base64编码后填入
apiVersion: v1
kind: Secret
metadata:
name: minio-backup-config
namespace: laf-system
type: Opaque
data:
AWS_ACCESS_KEY_ID: bGFmeXlkc3l5ZHM=
AWS_SECRET_ACCESS_KEY: bGFmeXlkc3l5ZHNsYWZsYWZsYWZsYWY=
将上述文件保存为minio-backup-config.yaml
#部署
kubectl apply -f minio-backup-config.yaml
4.安装mongodb
使用自定义配置安装。此处得配置是最小得配置默认是一个节点,不开启分片
注意点:
storageClassName:建议手动指定,如果按照文档初始化的话可以使用local-hostpath配置在本地
name:mongodb集群名称
crVersion:operator-server得版本
image:此处可以选择得镜像列表参考Percona certified images,如果是机器较老的需要更改为4.0的mongo
endpointUrl:可以是局域网内得,也可以是集群内得,也可以是其他第三方提供的。
prefix:备份到minio中的文件夹路径
apiVersion: psmdb.percona.com/v1
kind: PerconaServerMongoDB
metadata:
name: laf
namespace: laf-system
spec:
crVersion: 1.14.0
image: percona/percona-server-mongodb:5.0.15-13
allowUnsafeConfigurations: true
upgradeOptions:
apply: disabled
schedule: "0 2 * * *"
secrets:
users: laf
replsets:
- name: rs0
size: 1
volumeSpec:
persistentVolumeClaim:
storageClassName: local-hostpath
resources:
requests:
storage: 20Gi
sharding:
enabled: false
configsvrReplSet:
size: 1
volumeSpec:
persistentVolumeClaim:
storageClassName: local-hostpath
resources:
requests:
storage: 20Gi
mongos:
size: 1
backup:
enabled: true
image: perconalab/percona-server-mongodb-operator:main-backup
serviceAccountName: my-operator-psmdb-operator
storages:
minio:
type: s3
s3:
bucket: mongo-backup
region: default
credentialsSecret: minio-backup-config
endpointUrl: http://192.168.66.158:9000
insecureSkipTLSVerify: false
prefix: "prod"
pitr:
enabled: false
compressionType: gzip
compressionLevel: 6
tasks:
- name: weekly-s3-us-west-physical
enabled: true
schedule: "0 5 * * 0"
keep: 5
storageName: minio
将上述yaml保存为mongo-mini-cr.yaml后使用以下命令执行
# 部署
kubectl apply -f mongo-mini-cr.yaml
#如出现问题可以执行以下命令卸载
kubectl delete -f mongo-mini-cr.yaml
#验证是否部署成功
kubectl get psmdb -n laf-system
#或者查看详细信息
kubectl describe psmdb -n laf-system
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682134215-5014-2.jpg]
5.使用已经部署的mongo替换start.sh 脚本的内容
percona-server-mongodb部署的时候会创建以下用户
MONGODB_BACKUP_USER 和 MONGODB_BACKUP_PASSWORD:用于通过 MongoDB Ops Manager 或类似工具进行备份和恢复操作的用户凭证。
MONGODB_CLUSTER_ADMIN_USER 和 MONGODB_CLUSTER_ADMIN_PASSWORD:用于管理整个 MongoDB 集群(如添加新的节点、重启节点等)的用户凭证。
MONGODB_CLUSTER_MONITOR_USER 和 MONGODB_CLUSTER_MONITOR_PASSWORD:用于监控 MongoDB 集群的用户凭证。
MONGODB_DATABASE_ADMIN_USER 和 MONGODB_DATABASE_ADMIN_PASSWORD:用于管理 MongoDB 数据库实例的用户凭证。
MONGODB_USER_ADMIN_USER 和 MONGODB_USER_ADMIN_PASSWORD:用于管理 MongoDB 用户的用户凭证。
我们使用ADMIN_USER来做为laf的管理员账户连接并且创建数据库
#获取用户名
kubectl -n laf-system get secrets laf -o jsonpath="{.data.MONGODB_DATABASE_ADMIN_USER}" | base64 --decode
#获取密码
kubectl -n laf-system get secrets laf -o jsonpath="{.data.MONGODB_DATABASE_ADMIN_PASSWORD}" | base64 --decode
#获取集群内mongodb连接
kubectl get psmdb -n laf-system
将集群内连接,用户名,密码在start.sh中进行替换
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682134945-144405-4.jpg]
6.填入域名,后执行start.sh脚本即可~
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682135165-695192-5.jpg]
7.手动备份数据
进入laf后创建应用。并且创建一个集合test并且建立数据
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682136441-82460-9.jpg]
以下内容来自ChatGPT
Percona Server for MongoDB Backup 的备份类型有两种:物理备份和逻辑备份。在上述 YAML 文件中,type 字段设置为 physical,表示使用物理备份类型,即对 MongoDB 数据目录进行备份。type 字段还可以设置为 logical,表示使用逻辑备份类型,即使用 mongodump 工具对 MongoDB 数据库进行备份。下面是两种备份类型的要求和特点:
物理备份:要求备份服务器和被备份服务器的硬件和操作系统版本相同,以保证备份数据的兼容性;备份服务器需要与被备份服务器相连通,具有足够的存储空间;备份服务器需要安装 Percona Server for MongoDB Backup 工具,同时还需要 MongoDB 的系统用户权限。物理备份可以备份 MongoDB 数据目录中的所有数据和元数据,包括数据文件、日志文件、配置文件和索引文件等,备份后数据格式为 BSON 文件。物理备份速度快,备份数据一致性好,但备份数据难以读取和还原。
逻辑备份:要求备份服务器和被备份服务器的 MongoDB 版本相同,以保证备份数据的兼容性;备份服务器需要与被备份服务器相连通,具有足够的存储空间;备份服务器需要安装 MongoDB 客户端工具,如 mongodump 和 mongorestore;备份用户需要具有 MongoDB 的系统用户权限。逻辑备份可以备份 MongoDB 数据库中的指定集合或查询结果,备份后数据格式为 BSON 文件。逻辑备份速度比物理备份慢,备份数据一致性好,备份数据易于读取和还原。
注意,compressionType 字段设置为压缩类型,可以设置为 gzip 或者 none,表示是否对备份数据进行压缩。compressionLevel 字段设置为压缩级别,可以设置为 1-9 的数字,表示压缩级别,其中级别 1 最快但压缩率最低,级别 9 最慢但压缩率最高.
apiVersion: psmdb.percona.com/v1
kind: PerconaServerMongoDBBackup
metadata:
finalizers:
- delete-backup
name: backup1
namespace: laf-system
spec:
clusterName: laf
storageName: minio
# type: physical
# compressionType: gzip
# compressionLevel: 6
将上述文件保存为backup1.yaml后执行
#执行备份
kubectl apply -f backup1.yaml
#通过以下命令查看是否成功并且监听变化,当STATUS为ready代表成功
kubectl get psmdb-backup -n laf-system --watch
#如出现问题可以通过以下命令查看问题原因
kubectl describe psmdb-backup backup1 -n laf-system
#如出现问题可以通过以下命令删除备份,这边删除备份,对应minio那边也会删除。
kubectl delete psmdb-backup backup1 -n laf-system
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682135871-262042-3.jpg]
成功~
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682136102-8963-8.jpg]
8.手动还原
在上述中我们新增一个测试集合test,且新增了备份。在这边我们删除2条数据
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682136552-656343-10.jpg]
apiVersion: psmdb.percona.com/v1
kind: PerconaServerMongoDBRestore
metadata:
name: restore1
namespace: laf-system
spec:
clusterName: laf
backupName: backup1
# pitr:
# type: date
# date: YYYY-MM-DD HH:MM:SS
# backupSource:
# type: physical
# destination: s3://S3-BACKUP-BUCKET-NAME-HERE/BACKUP-DESTINATION
# s3:
# credentialsSecret: my-cluster-name-backup-s3
# region: us-west-2
# bucket: S3-BACKUP-BUCKET-NAME-HERE
# endpointUrl: https://s3.us-west-2.amazonaws.com/
# prefix: ""
# azure:
# credentialsSecret: SECRET-NAME
# prefix: PREFIX-NAME
# container: CONTAINER-NAME
将上述文件保存为restore.yaml后
#执行还原
kubectl apply -f restore.yaml
#通过以下命令查看是否成功并且监听变化,当STATUS为ready代表成功
kubectl get psmdb-restore -n laf-system --watch
#如出现问题可以通过以下命令查看问题原因
kubectl describe psmdb-restore restore1 -n laf-system
#如出现问题可以通过以下命令删除还原。
kubectl delete psmdb-restore restore1 -n laf-system
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682137420-258563-11.jpg]
还原成功~
[upl-image-preview url=https://cdn.forum.laf.run/2023-04-22/1682137447-656721-12.jpg]
参考内容:
percona-server-mongodb-operator
Install Percona Server for MongoDB using Helm