Rancher-HA集群备份和恢复实验
之前 安装的Rancher-HA
虽然已经是高可用的集群,一个绕不开的话题是:对于它的数据,我们还是要进行定时的备份,并且在灾难情况下还要对数据进行恢复。
先来看看之前在集群中创建的应用:
因为rancher集群是跑在k8s里的,而k8s的所有数据又都存储在etcd里面,所以针对etcd来做备份就可以了。
因为官网中给出的备份和恢复步骤中rke 0.2之前版本
和rke 0.2以及以后版本
有些许的区别。所以在开始之前,有必要说明下我集群的rke
和rancher
的版本:
软件 | 版本 |
---|---|
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。
还需要进行rke
,kubectl
,helm
的安装:
安装的过程详见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集群备份和恢复实验相关推荐
- Kubernetes的ETCD集群备份、恢复
首先,我们使用Kubernetes的都知道,etcd是k8s的核心所在,会记录各个pod的状态信息.所以重要性极为重要. etcd是kubernetes集群极为重要的一块服务,存储了kubernete ...
- Hadoop Ha集群配置
为什么要配置HDFS HA? 首先:HDFS集群中NameNode 如果存在单点故障.对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用. 而影响HD ...
- 瑞信CDP与HA集群
CDP(Continuous Data Protection),持续数据保护,它的关键在于持续.就给定的数据集而言,CDP提供恢复点的连续体,能够存取所有时间点上的数据,而不仅仅针对那些由快照流程预先 ...
- (五)Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装
目录 一.目的及要求: 实验目的: 实验要求: 二.环境要求: 集群规划: 三.具体步骤: 项目一:Hadoop的基本安装配置 项目二:Hadoop高可用完全分布模式配置 项目三:同步安装和配置 项目 ...
- PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署
PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...
- CHAPTER 3 Web HA集群部署 - Keepalived
Web HA集群部署 - Keepalived 1. Keepalived概述 1.1 工作原理 1.2 核心功能 1.3 拓扑图 2. KeepAlived安装方式 2.1 yum源安装 2.2 源 ...
- 对HA的简单认识以及HA集群删除
高可用集群HA,英文全称为High Availability,简单来说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点. 高可用集群的出现就是为了使集群 ...
- Linux HA集群
我们先说一下几个概念: 服务(Service),是HA集群中提供的资源,包括Float IP,共享的存储,apache等等. 成员服务器(Member Server) 也叫节点(Node),是HA中实 ...
- etcd 日志压缩_etcd集群备份和数据恢复以及优化运维
数据备份 快照定期备份 crontab定期执行备份脚本,每半小时备份一次,本地.异地都备份(暂定:本地备份保留最近10个备份,异地保留一个月的备份)#!/bin/bash # ETCDCTL_PATH ...
最新文章
- Spring中SmartLifecycle和Lifecycle的作用和区别
- [转载] 杜拉拉升职记——07 管理者关心细节吗?
- Shell编程之通配符和用户自定义变量
- 八皇后问题初始思路python_【单人解谜】经典的八皇后问题解析
- 我可能不适合做前端,你呢?
- 启用预算后的单据没有预算数据的控制说明
- Ubuntu:如何卸载 vmware player 或 VMWare Workstation
- CICD之maven介绍
- 浅谈-61850-1
- Robocode学习Java
- 第1关:身份证归属地查询
- 文件快速拷贝工具大比拼,谁是最快的复制软件
- <Safari浏览器插件>使json代码能格式化显示
- 龙芯cpu linux恢复密码,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
- 企业微信视频教程(Java标准版)-翟东平-专题视频课程
- NoSql入门和概述
- 干货,实战滴滴开源Logi-KafkaManager
- 偶像Stallman
- 青龙面板快手极速版教程
- laravel 获取完整sql 带参数
热门文章
- C语言实现二叉树排序
- scp:windows与linux之间copy文件(类似于linux的scp工具)
- 2.技巧※(0x3f:从周赛中学算法 2022)
- Java操作Elasticsearch的所有方法
- matlab从mp4文件中提取音频,如何提取mp4中的音频文件 怎样将视音频文件分离,保存视频中的音频文件...
- LABS探索马尔代夫岛上最好的度假胜地之一的通证化机会
- 一秒语音是哪个软件_一秒语音包软件下载-一秒语音包app安卓版下载_天尚网
- Transformer课程 业务对话机器人Rasa 3.x NLU Training Data
- 离子液体[EMIm][PF6],[HMIm][PF6],[C14MIm][PF6]修饰纳米Fe3O4,TiO2和SiO2(离子液体修饰物)
- 嵌入式: 数字示波表