系列文章目录
第一章-SUSE- Rancher-容器高可用与容灾测试-RKE2-外置Mysql(主备集群搭建)-CSDN博客
第二章-SUSE- Rancher-容器高可用与容灾测试-RKE2-集群搭建(外置Mysql)
第三章-SUSE- Rancher-容器高可用与容灾测试-Rancher-外置数据库(复用Mysql)
第四章-SUSE- Rancher-容器高可用与容灾测试-RKE2(容灾测试)
第五章-SUSE- Rancher-容器高可用与容灾测试-Rancher-back up(容灾测试)
第六章-SUSE- Rancher-容器高可用与容灾测试-Rancher拉起的集群(快照容灾测试)
第七章-SUSE- Rancher-容器高可用与容灾测试-Longhorn(容灾卷跨集群测试)
文章目录
目录
[1.1 RKE2集群:](#1.1 RKE2集群:)
[1.2 Rancher以及Rancher-backup:](#1.2 Rancher以及Rancher-backup:)
[1.3 主数据库:](#1.3 主数据库:)
[1.4 备数据库同步状态:](#1.4 备数据库同步状态:)
[1.5 备份](#1.5 备份)
[1.5.1 备份数据库](#1.5.1 备份数据库)
[1.5.2 备份RKE2集群](#1.5.2 备份RKE2集群)
[1.6 数据库灾备切换](#1.6 数据库灾备切换)
[1.6.1 关闭主数据库(docker stop)观察Server节点的报错与rke2-server的状态做记录。](#1.6.1 关闭主数据库(docker stop)观察Server节点的报错与rke2-server的状态做记录。)
1.6.2、观察worker节点的报错与rke2-agent的状态做记录。
[1.6.3 检查备数据库状态做记录。](#1.6.3 检查备数据库状态做记录。)
[1.6.4 在备库上执行以下命令,停止复制进程:](#1.6.4 在备库上执行以下命令,停止复制进程:)
[1.6.5 提升备库为主库](#1.6.5 提升备库为主库)
[1.6.6 修改Server节点的config文件指向备数据库。](#1.6.6 修改Server节点的config文件指向备数据库。)
[1.6.7 重启rke2-server](#1.6.7 重启rke2-server)
[1.6.8 检查业务是否恢复。](#1.6.8 检查业务是否恢复。)
[2.1 调度备份](#2.1 调度备份)
[2.1.1 Rancher-backup进行一次最新备份](#2.1.1 Rancher-backup进行一次最新备份)
[2.2 部署rke2节点。](#2.2 部署rke2节点。)
[2.2.1 异地重新部署2个4C 8G rke2节点,这次使用原生etcd数据库。](#2.2.1 异地重新部署2个4C 8G rke2节点,这次使用原生etcd数据库。)
[2.3 helm部署Rancher-bakeup](#2.3 helm部署Rancher-bakeup)
[2.3.1 前提条件](#2.3.1 前提条件)
[2.3.2 添加 Rancher Helm 仓库](#2.3.2 添加 Rancher Helm 仓库)
[2.3.3 创建命名空间(可选)](#2.3.3 创建命名空间(可选))
[2.3.4 安装 Rancher Backup以及Rancher Backup-crd](#2.3.4 安装 Rancher Backup以及Rancher Backup-crd)
[2.3.5 验证安装](#2.3.5 验证安装)
[2.3.6 恢复备份](#2.3.6 恢复备份)
[2.4 安装cert-Manager](#2.4 安装cert-Manager)
[2.5 部署Rancher](#2.5 部署Rancher)
[2.5.1 这里有个细节。](#2.5.1 这里有个细节。)
[2.5.2 通过values部署Rancher](#2.5.2 通过values部署Rancher)
[2.5.3 检查Rancher状态](#2.5.3 检查Rancher状态)
[2.5.4 测试访问](#2.5.4 测试访问)
[2.5.5 验证恢复](#2.5.5 验证恢复)
前言
第一章我们搭建好了Mysql(主备复制)实例。
第二章我们搭建好Rancher管理集群的基础设施- RKE2集群-Tarball方法-离线。
第三章我们使用helm离线方式部署好了Rancher到RKE2集群中,同时使用Rancher-backup-调度了一次备份任务到阿里云的对象存储。
本章我们做几个实验:
1、RKE2集群-etcd-Mysql主备倒换-容灾测试。
2、Rancher-backup-容灾测试。
1、会对现有的Rancher做一些简单的变更,数据添加模拟运行了一段时间的Rancher。(比如修改密码等简单的,体现一下区别就行。)
2、异地部署2台同规格的rke2主机.
3、通过OSS将rke2集群需要的文件上传、在异地使用相同的离线镜像方式部署通过OSS拉取文件重新部署RKE2集群,模拟主数据中心故障,异地需要重新拉起RKE2集群的场景。
4、拉起RKE2之后、一样的方式部署Rancher并且Rancher通过Rancher-backup还原。
一、RKE2集群-etcd-Mysql主备倒换。
先回顾一下我们到集群,2台节点部署RKE2-上面部署了Rancher以及Rancher-backup.使用的是外置的Mysql(主备)数据库。
本次先模拟主数据库故障,备数据库倒换。
主备倒换步骤
1、先检查集群状态,所有业务都正常。
2、主备数据库同步正常。
3、备份一次主数据库。
4、关闭主数据库(docker stop)
1、观察Server节点的报错与rke2-server的状态做记录。
2、观察worker节点的报错与rke2-agent的状态做记录。
5、检查备数据库状态做记录。
6、关闭备数据库只读状态,备升主。
7、修改Server节点的config文件指向备数据库。
8、检查业务是否恢复。
1.1、检查集群状态
1.1 RKE2集群:
1.2 Rancher以及Rancher-backup:
**这里说一下我今天升级了一下集群的配置,升级为了4C 8G。之前的2C 4G 太吃力了。
1.3 主数据库:
主数据库:
sqlSHOW MASTER STATUS;
*注意bin的文件名称以及Position的位置编号。
1.4 备数据库同步状态:
sql
SHOW SLAVE STATUS \G
**注意bin的文件名称以及Position的位置编号与主数据库为一致的。
1.5 备份
1.5.1 备份数据库
sql
docker ps -a
你可以使用 docker exec
命令在运行的 MySQL 容器中执行 mysqldump
命令来备份数据库。
我的 MySQL 容器名称为 mysql-master,数据库名称为 kubernetes,你可以使用以下命令备份数据库:
sql
docker exec mysql-master mysqldump -u root -pxxxxxx kubernetes > /kubernetes_backup.sql
备份文件 kubernetes_backup.sql
会被保存到主机的 /
根目录下,而不是容器内部。这是因为你在命令中使用了 >
重定向符号,将 mysqldump
的输出重定向到了主机的文件系统中。
通过OSS客户端上传到我们备份的桶里。
1.5.2 备份RKE2集群
上传Server与worker的配置文件在阿里云OSS上。
配置文件:
/etc/rancher/rke2/config.yaml
/etc/rancher/rke2/registries.yaml
对应RKE2版本的镜像文件:
1.6 数据库灾备切换
1.6.1 关闭主数据库(docker stop)观察Server节点的报错与rke2-server的状态做记录。
*控制面pod全部卡死。
执行kubectl 访问api-server报错:
1.6.2、观察worker节点的报错与rke2-agent的状态做记录。
因为Server节点控制面全部卡死,导致worker节点的保活机制全部挂掉。
1.6.3 检查备数据库状态做记录。
sqlSHOW SLAVE STATUS \G
*主数据库无法连接。
1.6.4 在备库上执行以下命令,停止复制进程:
sql
STOP SLAVE;
RESET SLAVE ALL;
1.6.5 提升备库为主库
在备库上执行以下命令,将其配置为可写,并更新相关配置:
sqlSET GLOBAL read_only = OFF; UNLOCK TABLES;
1.6.6 修改Server节点的config文件指向备数据库。
1.41为备数据库
1.6.7 重启rke2-server
sql
systemctl restart rke2-server.service
1.6.8 检查业务是否恢复。
server节点
sqljournalctl -u rke2-server.service -f
Server节点启动就连接上了数据库。 说明OK的。
Worker节点keeplive恢复。
节点上的POD正常运行。
总结:这种方式的RTO和RPO比纯备份还原要好很多。
二、Rancher-backup-容灾测试。
2.1 调度备份
2.1.1 Rancher-backup进行一次最新备份
2.2 部署rke2节点。
2.2.1 异地重新部署2个4C 8G rke2节点,这次使用原生etcd数据库。
**Server节点与Worker节点从阿里云OSS上获取镜像和安装脚本文件。
*模拟真实还原场景。
*也可以下载到一个节点后从节点分发。
**目的就是为了快速让节点获取到镜像和配置文件。
**两个节点分别创建配置文件目录以及镜像目录
sqlmkdir -p /etc/rancher/rke2/ && mkdir -p /var/lib/rancher/rke2/agent/images/
**两个节点分别复制对应的文件到想要的目录下:
sql
cp config.yaml registries.yaml /etc/rancher/rke2/
cp rke2-images-cilium.linux-amd64.tar.zst rke2-images-core.tar /var/lib/rancher/rke2/agent/images/
*验证一手
Server节点修改配置文件-config.yaml:
sql
write-kubeconfig-mode: "0644"
tls-san:
- "foo.local"
node-label:
- "job=rke2"
#datastore-endpoint: "mysql://root:e2231255@tcp(172.30.0.213:3306)/kubernetes"
cni: cilium
write-kubeconfig-mode: "0644"
debug: true
token: SECRET
修改配置文件-registries.yaml:
sql
mirrors:
"*":
endpoint:
- "https://mnt026bf.mirror.aliyuncs.com"
- "https://registry.cn-hangzhou.aliyuncs.com"
开始安装Server节点:
sql
INSTALL_RKE2_ARTIFACT_PATH=/root/rke2 sh install.sh
systemctl start rke2-server.service
监控一下安装:
sql
journalctl -u rke2-server.service -f
出现:
**出现keep-alive的ping就差不多了。
配置环境变量:
sql
vim /etc/profile.local
kubectl get nodes
继续安装Worker节点:
**修改配置文件-config.yaml:
**server节点获取加入的token:
sql
cat /var/lib/rancher/rke2/server/node-token
**worker节点展示:
**worker节点镜像配置展示:
**启动worker节点:
sqlINSTALL_RKE2_ARTIFACT_PATH=/root/rke2 sh install.sh systemctl start rke2-agent.service
**观察日志
**Server节点验证:
**这里的ingress-nginx报错:
*因为阿里云的镜像没有安装iptables,安装即可。 而kube-proxy默认使用ipbtales来4层LB负载。
**安装好ipbtales就好了。
2.3 helm部署Rancher-bakeup
2.3.1 前提条件
-
已安装 Helm:确保已安装 Helm v3 或更高版本。
-
Kubernetes 集群 :目标集群已就绪,且
kubeconfig
配置正确。 -
Rancher 兼容性 :确认 Rancher Backup 版本与您的 Rancher 版本兼容。
2.3.2 添加 Rancher Helm 仓库
sql
helm repo add rancher-charts https://charts.rancher.io
helm repo update
2.3.3 创建命名空间(可选)
sql
kubectl create namespace cattle-resources-system
2.3.4 安装 Rancher Backup以及Rancher Backup-crd
sql
helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace
helm install rancher-backup rancher-charts/rancher-backup \
--namespace cattle-resources-system
2.3.5 验证安装
检查 Pod 状态:
sql
kubectl get pods -n cattle-resources-system -l app.kubernetes.io/name=rancher-backup
输出应显示 Running
状态。
2.3.6 恢复备份
这里简单说一下Rancher-backup的原理,创建了3个自定义资源:
Backup 备份
*创建备份任务
Restore 还原
*创建还原任务
ResourceSet 资源集
**定义备份的资源是哪些
工作流:
1、创建一个ResourceSet,以您要备份的所有资源为目标。
2、执行备份:要进行备份,用户必须创建备份CRD的实例(创建备份CR)。
3、从备份恢复:要从备份恢复,用户必须创建还原CRD的实例(创建还原CR)
从上一章的OSS 创建的中备份恢复
创建S3存储的访问凭证:
sql
kubectl create secret generic s3-creds \
--from-literal=accessKey=<access key> \
--from-literal=secretKey=<secret key>
本次案例的restore.yaml
:
sql
# restore.yaml
apiVersion: resources.cattle.io/v1
kind: Restore
metadata:
name: restore
spec:
backupFilename: thesectimebackup-1c9dbfa6-0c64-41c5-ac10-dc9e7b59cc81-2025-01-28T07-30-43Z.tar.gz
prune: false
storageLocation:
s3:
bucketName: for-rancher-backup
credentialSecretName: s3-creds
credentialSecretNamespace: default
endpoint: oss-cn-shanghai-internal.aliyuncs.com
region: cn-shanghai
s3:
bucketName: for-rancher-backup
credentialSecretName: s3-creds
credentialSecretNamespace: default
endpoint: oss-cn-shanghai-internal.aliyuncs.com
region: cn-shanghai
sql
kubectl create -f restore.yaml -n cattle-resources-system
**监控还原任务。
sql
kubectl logs -n cattle-resources-system --tail 100 -f -l app.kubernetes.io/instance=rancher-backup
**出现Completd.
一旦还原资源的状态为
Completed
,您就可以继续cert-Manager和Rancher安装。
2.4 安装cert-Manager
**之前阿里云的OSS应该上传cert-Manager的镜像的tar包以及对应的Chart包。我忘记了。
sql
# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true
**因为我的节点使用的是代理镜像仓库,从外网节点传递Chart包就可以了,不用担心镜像的问题。
**私有仓库也不用担心,只要异地有镜像同步的仓库就行。
**检查cert-manager状态
2.5 部署Rancher
**逻辑也是一样,传递镜像包或者镜像仓库能访问。
**配置文件Chart上传OSS。
2.5.1 这里有个细节。
就是之前部署Rancher的values.yaml文件,一定要注意备份。下面展示提取的命令,因为我的测试环境配置修改的就只是set -- hostname 没有其它的则没有做这一步。
helm get values rancher -n cattle-system -o yaml > rancher-values.yaml
2.5.2 通过values部署Rancher
helm install rancher rancher-latest/rancher -n cattle-system -f rancher-values.yaml --version x.y.z
**我的测试环境两边的Rancher都只传递了一个set hostname的values.则可以通过简单的cli去执行。
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.demo --version 2.9.3
2.5.3 检查Rancher状态
kubectl get po -n cattle-system
2.5.4 测试访问
**先修改hosts文件
**访问rancher.demo
**可以看到如果不是因为备份还原成功了,那么这里会出现第一次登陆让你输入密码。
**证明容灾测试成功了。
2.5.5 验证恢复
**输入备份之前的密码,成功登陆。
总结
1、这篇文章整理的容灾备份是非常湿滑和顺利的,但是这里要达成如此湿滑的容灾也需要一点前提:
1、优秀的镜像仓库的容灾机制。
2、跨地域的对象存储。
3、熟练的容灾恢复步骤。
4、熟悉的人工操作手。
2、能达到上面这4点,基本上容灾的RTO和RPO可以做到很低。