之前 安装的Rancher-HA虽然已经是高可用的集群,一个绕不开的话题是:对于它的数据,我们还是要进行定时的备份,并且在灾难情况下还要对数据进行恢复。

先来看看之前在集群中创建的应用:
因为rancher集群是跑在k8s里的,而k8s的所有数据又都存储在etcd里面,所以针对etcd来做备份就可以了。

因为官网中给出的备份和恢复步骤中rke 0.2之前版本rke 0.2以及以后版本有些许的区别。所以在开始之前,有必要说明下我集群的rkerancher的版本:

软件 版本
rke v1.0.4
rancher v2.3.5

一、备份

1、前提条件

  • Rancher Kubernetes Engine v0.1.7或更高版本

    RKE v0.1.7以及更高版本才支持etcd快照功能

  • rancher-cluster.yml

    需要使用到安装Rancher的RKE配置文件rancher-cluster.yml

2、备份方案

rancher有两种备份etcd方案:

  • 方案A:定时自动创建快照(这里只做介绍)

    定时自动创建快照是RKE附带的服务,默认没有开启。可以在安装rancher-ha时,通过在rancher-cluster.yml中添加配置来启用自动创建快照的功能。

    自动备份的功能已经被rancher官方集成,其配置方式就是在一开始的启动文件rancher-cluster.yml中。

    1)编辑rancher-cluster.yml配置文件

    2)rancher-cluster.yml配置文件中添加一下代码:

    rke版本小于0.2.x或rancher版本小于v2.2.0时使用

    services:etcd:snapshot: true          # 设置true启用ETCD自动备份,设置false禁用;creation: 6h0s          # 快照创建间隔时间,不加此参数,默认5分钟;retention: 24h          # 快照有效期,此时间后快照将被删除;
    

    rke版本大于等于0.2.x或rancher版本大于等于v2.2.0时使用

    services:etcd:backup_config:enabled: true         # 设置true启用ETCD自动备份,设置false禁用;interval_hours: 12    # 快照创建间隔时间,不加此参数,默认5分钟;retention: 6          # etcd备份保留份数;
    

    3)根据实际情况修改以上参数

    4)运行up进行加载

    rke up --config rancher-cluster.yml
    
  • 方案B:手动创建快照(本次实验采取的方式)

    在升级或者恢复其他快照等事件之前创建一次快照。

本次实验采用手动备份的方式进行备份,详细接下来的步骤3。

3、手动备份

上面介绍了自动备份的实现方式,本次试验采用手动备份的方式。

备份前需要确保部署rancher集群时的配置文件的还在(这个在部署的时候有强调过,需要保管好)。

[root@node1 ~]# su - rancher
[rancher@node1 ~]$ rke etcd snapshot-save --name test.db --config rancher-cluster.yml
[rancher@node1 ~]$ ls /opt/rke/etcd-snapshots
test.db.zip

命令中的test.db是设置的快照名称,可以自定义。

看到最后出现Finished saving/uploading snapshot [test.db] on all etcd hosts,就说明备份已经成功完成了。

备份完成后,RKE会获取每个etcd节点快照,并保存在每个etcd节点的/opt/rke/etcd-snapshots目录下。

二、恢复

1、恢复准备

恢复有两种情况:在原集群中恢复和在新集群中恢复。

  • 在原集群中恢复:使用现有的节点,需要清除Kubernetes和Rancher配置,这将破坏这些节点上的数据,请做好备份。
  • 在新机器中恢复:需要先准备和原来集群匹配的环境和集群安装的基础环境。

2、新服务器初始化

在进行正式的恢复初始化之前,需要对新机器进行初始化。我之前安装的老集群是三台服务器,所以现在也准备三台新机器进行对接。

服务器情况如下表:

原服务器 新服务器
192.168.0.51 192.168.0.61
192.168.0.52 192.168.0.62
192.168.0.53 192.168.0.63

1)服务器初始化

如果是全新的服务器,那可以在每台服务器上用这个系统初始化脚本进行初始化,做一些必要的配置。然后再进行下面的操作。

以下操作仅在192.168.0.61上进行。

在进行初始化之前,先保证本机能够免密码登录其他机器。

ssh-keygen
ssh-copy-id root@192.168.0.61
ssh-copy-id root@192.168.0.62
ssh-copy-id root@192.168.0.63

然后定义如下脚本并执行

NODE_IPS=(192.168.0.61 192.168.0.62 192.168.0.63)
cat > rancher.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.max_map_count = 655360
EOFcat > daemon.json << EOF
{"oom-score-adjust": -1000,"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://kw88y6eh.mirror.aliyuncs.com"],"insecure-registries":["192.168.0.153"],"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]
}
EOFfor node_ip in ${NODE_IPS[@]}
doecho ">>> ${node_ip}"ssh root@${node_ip} "swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab"scp rancher.conf root@${node_ip}:/etc/sysctl.d/rancher.confssh root@${node_ip} "modprobe br_netfilter && modprobe ip_vs"ssh root@${node_ip} "sysctl -p /etc/sysctl.d/rancher.conf"ssh root@${node_ip} 'groupadd docker && useradd rancher -G docker && echo "123456" | passwd --stdin rancher'ssh root@${node_ip} 'yum install -y yum-utils device-mapper-persistent-data lvm2'ssh root@${node_ip} 'yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo'ssh root@${node_ip} 'yum remove -y docker docker-client docker-client-latest docker-common docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine container*'ssh root@${node_ip} 'yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7'ssh root@${node_ip} 'systemctl enable docker'ssh root@${node_ip} 'systemctl start docker'ssh root@${node_ip} 'systemctl status docker'scp daemon.json  root@${node_ip}:/etc/docker/daemon.jsonssh root@${node_ip} 'systemctl daemon-reload'ssh root@${node_ip} 'systemctl restart docker'
done

上面这个脚本完成了服务器的初始化,并安装了docker。

还需要进行rkekubectlhelm的安装:
安装的过程详见Rancher-v2.3.5的HA部署中第五部分-Rancher集群部署中的第1小步分:安装必备工具。

2)配置rancher用户

还需要配置rancher用户的免密码登录其他节点,在后面的恢复操作中会用到。

仍然是在192.168.0.61上进行操作。

su - rancher
ssh-keygen
ssh-copy-id rancher@192.168.0.61
ssh-copy-id rancher@192.168.0.62
ssh-copy-id rancher@192.168.0.63

上面的步骤完成之后,就可以进入正式的恢复操作了。

3、准备恢复文件

恢复的环境上面已经准备好了,还需要之前备份的数据和部署原集群的原配置文件。

1)在三台新服务器上创建快照目录

mkdir -p /opt/rke/etcd-snapshots/

2)在原主机192.168.0.51上将需要的数据拷贝到新服务器中

cd /opt/rke/etcd-snapshots/
scp test.db.zip root@192.168.0.61:/opt/rke/etcd-snapshots/
scp test.db.zip root@192.168.0.62:/opt/rke/etcd-snapshots/
scp test.db.zip root@192.168.0.63:/opt/rke/etcd-snapshots/

3)拷贝原主机192.168.0.51上的源集群配置文件到新服务器上。

su - rancher
scp rancher-cluster.yml rancher-cluster.rkestate rancher@192.168.0.61:/home/rancher/

拷贝完成之后,恢复所需要的文件就准备好了。

4、修改rke配置文件

现在来到新服务器192.168.0.61上。

对副本文件进行修改,只需要把原集群主机的IP地址改成现在集群的IP地址,然后注释掉services部分,因为Rancher部署和设置配置已在etcd数据库中,恢复不再需要。

修改后的rancher-cluster.yml文件如下:

nodes:- address: 192.168.0.61user: rancherrole: [controlplane,worker,etcd]- address: 192.168.0.62user: rancherrole: [controlplane,worker,etcd]- address: 192.168.0.63user: rancherrole: [controlplane,worker,etcd]

5、恢复ETCD数据

执行下面的命令进行etcd数据的恢复

rke etcd snapshot-restore --name test.db --config rancher-cluster.yml

如果成功,则在最后会输出:Finished restoring snapshot [test.db] on all etcd hosts.

6、恢复集群

使用RKE在新服务器(192.168.0.61)上启动集群。

rke up --config ./rancher-cluster.yml

如果成功,则在最后会输出:Finished building Kubernetes cluster successfully

7、查看节点状态

RKE运行完成之后会创建kubectl的配置文件kube_config_rancher-cluster.yml,可以通过这个配置文件查询K8S集群的节点状态:

kubectl  --kubeconfig=kube_config_rancher-cluster.yml get nodes
NAME           STATUS   ROLES                      AGE   VERSION
192.168.0.61   Ready    controlplane,etcd,worker   12m   v1.17.2
192.168.0.62   Ready    controlplane,etcd,worker   12m   v1.17.2
192.168.0.63   Ready    controlplane,etcd,worker   12m   v1.17.2

8、清理旧节点

通过上面的节点信息可以看到,我的节点信息里面没有旧的节点。

如果存在旧节点信息的话,可以通过kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml delete node 18.217.82.189 18.222.22.56 18.191.222.99命令清理旧节点。

9、检查Kubernetes Pods的状态

耐心等待一段时间,等待pods的启动,然后查看一下Kubernetes Pods的状态。

kubectl --kubeconfig=kube_config_rancher-cluster.yml get pods --all-namespaces
NAMESPACE       NAME                                    READY   STATUS    RESTARTS   AGE
cattle-system   cattle-cluster-agent-74484cb88c-psv8k   1/1     Running   0          24m
cattle-system   cattle-node-agent-9bf6c                 1/1     Running   0          25m
cattle-system   cattle-node-agent-jw9lr                 1/1     Running   0          25m
cattle-system   cattle-node-agent-lnldk                 1/1     Running   0          24m
cattle-system   rancher-58b6b8cfd-hsd98                 1/1     Running   1          23m
cattle-system   rancher-58b6b8cfd-j9d4n                 1/1     Running   0          23m
cattle-system   rancher-58b6b8cfd-k2mjh                 1/1     Running   0          23m
default         nginxhpa-5cdf795596-65lrf               1/1     Running   0          23m
demo            demo-555c7f9bd6-nh7xk                   1/1     Running   0          23m
demo            demo-555c7f9bd6-sndq8                   1/1     Running   0          23m
ingress-nginx   default-http-backend-67cf578fc4-4xwrf   1/1     Running   0          23m
ingress-nginx   nginx-ingress-controller-2xdr9          1/1     Running   0          24m
ingress-nginx   nginx-ingress-controller-cc9gc          1/1     Running   0          24m
ingress-nginx   nginx-ingress-controller-vz7fb          1/1     Running   0          24m
kube-system     canal-6drvz                             2/2     Running   0          24m
kube-system     canal-f6rj9                             2/2     Running   0          24m
kube-system     canal-xqdmg                             2/2     Running   0          24m
kube-system     coredns-7c5566588d-2x7jk                1/1     Running   0          24m
kube-system     coredns-7c5566588d-d2hx7                1/1     Running   0          24m
kube-system     coredns-autoscaler-65bfc8d47d-n7d9k     1/1     Running   0          24m
kube-system     metrics-server-6b55c64f86-x4nvd         1/1     Running   0          24m

10、配置域名解析

可以直接修改之前集群的nginx,将后端服务的原来三台主机的IP地址改为现集群的三台主机的IP地址,然后重启nginx。当然,重新搭建一个nginx也是可以的。

我这里是直接在原来的nginx中修改的。

然后在新集群中的/etc/hosts中添加域名解析。

echo "192.168.0.41 my.rancher.com" >> /etc/hosts

如果是新部署的nginx,还需要修改下windows的hosts解析,将域名指到新的nginx地址中。

现在可以用浏览器去访问Rancher UI了。

先看一下集群中主机:

没问题,是新的三台主机。

然后看一下工作负载:

和原先集群中的服务是一致的。这样就完成了一个集群的备份和恢复的实验。

参考文章:
https://docs.rancher.cn/rancher2x/backups-and-restoration/backups/rke.html
https://docs.rancher.cn/rancher2x/backups-and-restoration/restorations/rke-ha.html
http://www.eryajf.net/2684.html

Rancher-HA集群备份和恢复实验相关推荐

  1. Kubernetes的ETCD集群备份、恢复

    首先,我们使用Kubernetes的都知道,etcd是k8s的核心所在,会记录各个pod的状态信息.所以重要性极为重要. etcd是kubernetes集群极为重要的一块服务,存储了kubernete ...

  2. Hadoop Ha集群配置

    为什么要配置HDFS HA?   首先:HDFS集群中NameNode 如果存在单点故障.对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用. 而影响HD ...

  3. 瑞信CDP与HA集群

    CDP(Continuous Data Protection),持续数据保护,它的关键在于持续.就给定的数据集而言,CDP提供恢复点的连续体,能够存取所有时间点上的数据,而不仅仅针对那些由快照流程预先 ...

  4. (五)Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

    目录 一.目的及要求: 实验目的: 实验要求: 二.环境要求: 集群规划: 三.具体步骤: 项目一:Hadoop的基本安装配置 项目二:Hadoop高可用完全分布模式配置 项目三:同步安装和配置 项目 ...

  5. PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署

    PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...

  6. CHAPTER 3 Web HA集群部署 - Keepalived

    Web HA集群部署 - Keepalived 1. Keepalived概述 1.1 工作原理 1.2 核心功能 1.3 拓扑图 2. KeepAlived安装方式 2.1 yum源安装 2.2 源 ...

  7. 对HA的简单认识以及HA集群删除

    高可用集群HA,英文全称为High Availability,简单来说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点. 高可用集群的出现就是为了使集群 ...

  8. Linux HA集群

    我们先说一下几个概念: 服务(Service),是HA集群中提供的资源,包括Float IP,共享的存储,apache等等. 成员服务器(Member Server) 也叫节点(Node),是HA中实 ...

  9. etcd 日志压缩_etcd集群备份和数据恢复以及优化运维

    数据备份 快照定期备份 crontab定期执行备份脚本,每半小时备份一次,本地.异地都备份(暂定:本地备份保留最近10个备份,异地保留一个月的备份)#!/bin/bash # ETCDCTL_PATH ...

最新文章

  1. Spring中SmartLifecycle和Lifecycle的作用和区别
  2. [转载] 杜拉拉升职记——07 管理者关心细节吗?
  3. Shell编程之通配符和用户自定义变量
  4. 八皇后问题初始思路python_【单人解谜】经典的八皇后问题解析
  5. 我可能不适合做前端,你呢?
  6. 启用预算后的单据没有预算数据的控制说明
  7. Ubuntu:如何卸载 vmware player 或 VMWare Workstation
  8. CICD之maven介绍
  9. 浅谈-61850-1
  10. Robocode学习Java
  11. 第1关:身份证归属地查询
  12. 文件快速拷贝工具大比拼,谁是最快的复制软件
  13. <Safari浏览器插件>使json代码能格式化显示
  14. 龙芯cpu linux恢复密码,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  15. 企业微信视频教程(Java标准版)-翟东平-专题视频课程
  16. NoSql入门和概述
  17. 干货,实战滴滴开源Logi-KafkaManager
  18. 偶像Stallman
  19. 青龙面板快手极速版教程
  20. laravel 获取完整sql 带参数

热门文章

  1. C语言实现二叉树排序
  2. scp:windows与linux之间copy文件(类似于linux的scp工具)
  3. 2.技巧※(0x3f:从周赛中学算法 2022)
  4. Java操作Elasticsearch的所有方法
  5. matlab从mp4文件中提取音频,如何提取mp4中的音频文件 怎样将视音频文件分离,保存视频中的音频文件...
  6. LABS探索马尔代夫岛上最好的度假胜地之一的通证化机会
  7. 一秒语音是哪个软件_一秒语音包软件下载-一秒语音包app安卓版下载_天尚网
  8. Transformer课程 业务对话机器人Rasa 3.x NLU Training Data
  9. 离子液体[EMIm][PF6],[HMIm][PF6],[C14MIm][PF6]修饰纳米Fe3O4,TiO2和SiO2(离子液体修饰物)
  10. 嵌入式: 数字示波表