二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

    • rancher-2-1-6的ha版本部署记录
    • rancher-2-1-6的ha版本部署记录
    • 关于rancher集群的高可用的实验
    • 关于rancher中部署应用的高可用的实验
    • 关于rancher-ha集群备份恢复试验
      • 1,备份。
        • 1,环境说明。
        • 2,备份方案。
        • 3,手动备份。
      • 2,恢复。
        • 1,恢复准备
        • 2,新机器初始化。
        • 1,初始化及安装 docker。
        • 2,配置 rancher 用户。
        • 3,准备恢复文件。
        • 4,更改 RKE 配置文件。
        • 5,恢复 ETCD 数据。
        • 6,恢复集群。
        • 7,测试集群。
        • 8,清理旧节点。
        • 9,耐心等待新集群各功能启动。
        • 10,域名解析问题。
      • 3,说说自动备份。
      • 4,备份的核心。
    • rancher-v2-2-2的HA部署文档
    • Rancher-2-2-2学习笔记-rancher-cli的使用
    • 基于Rancher-2-2-2的hpa实验
    • Rancher-2-2-2之Jenkins+rancher+harbor+Gitlab部署应用到生产
    • 使用docker快速部署rancher-2.8.5并投入生产实践
    • rancher如何重新注册托管集群
  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • Rancher
二丫讲梵
2019-03-11
目录

关于rancher-ha集群备份恢复试验

文章发布较早,内容可能过时,阅读注意甄别。

虽然有集群高可用所在,但是仍旧可能会有整个集群覆灭的情况,所以这里试验一下集群的备份问题。

现在,在已有集群当中,跑了两个应用如下:

接下来,开始进入备份的配置。因为 rancher 整个集群跑在 k8s 里边,而 k8s 的所有数据又都存储在 etcd 里边,所以针对 etcd 来做备份就可以了。

# 1,备份。

# 1,环境说明。

  • Rancher Kubernetes Engine v0.1.7 或更高版本 RKE v0.1.7 以及更高版本才支持 etcd 快照功能
  • rancher-cluster.yml 需要使用到安装 Rancher 的 RKE 配置文件 rancher-cluster.yml。

# 2,备份方案。

rancher 有两种备份方式:

  • 方案 A: 定时自动创建快照

    在 Rancher HA 安装时,通过更改配置信息以实现自动创建快照的功能。

  • 方案 B: 手动创建快照

    手动创建适用于集群升级或者变更之前的操作。

这里为了验证备份以及恢复的功能可用性,暂时采取手动备份的方式,自动的方式等到最后再介绍。

# 3,手动备份。

当我们需要升级 Rancher 或将其恢复到以前的快照时,应该对数据手动创建快照,以便数据异常时可供恢复。

备份前要确保部署的时候使用的集群部署配置文件还在。

$ su - rancher
$ rke etcd snapshot-save --name test.db --config rancher-cluster.yml
$ ls /opt/rke/etcd-snapshots
pki.bundle.tar.gz  test.db
1
2
3
4

其中的test.db是备份后的文件名,可以自定义。 如果看到屏幕输出Finished saving snapshot [test.db] on all etcd hosts,则说明备份已经正常完成了,如果有报错,则根据报错进行解决。

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

# 2,恢复。

# 1,恢复准备

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

  • 原集群中恢复:需要清除 Kubernetes 和 Rancher 配置,详情了解点击,恢复出厂设置。 (opens new window)
  • 新机器中恢复:需要先准备与原来集群相匹配的环境,以及集群安装的一些基础环境。

这里为了验证数据的迁移可用,因此使用在新机器中恢复的方式来进行恢复的操作。

# 2,新机器初始化。

在进行正式的恢复初始化之前,需要先对新机器进行初始化。因为老集群是三台服务器,所以这里也准备三台新机器进行对接。

服务器准备情况,大致如下:

老机器 新机器
192.168.106.3 192.168.111.4
192.168.106.4 192.168.111.5
192.168.106.5 192.168.111.6

# 1,初始化及安装 docker。

以下操作在192.168.111.4上边进行。

在进行初始化之前,先保证本机能够免密码登陆被操作机器。

ssh-keygen
ssh-copy-id root@192.168.111.4
ssh-copy-id root@192.168.111.5
ssh-copy-id root@192.168.111.6
1
2
3
4

然后定义如下脚本并执行。

NODE_IPS=(192.168.111.4 192.168.111.5 192.168.111.6)
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cat > daemon.json << EOF
{
  "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://kw88y6eh.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.112.69"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
}
EOF
for node_ip in ${NODE_IPS[@]}
do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "yum install -y wget ntpdate lrzsz curl yum-utils device-mapper-persistent-data lvm2 bash-completion"
    ssh root@${node_ip} "iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat && iptables -P FORWARD ACCEPT"
    ssh root@${node_ip} "swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab"
    scp kubernetes.conf root@${node_ip}:/etc/sysctl.d/kubernetes.conf
    ssh root@${node_ip} "modprobe br_netfilter && modprobe ip_vs"
    ssh root@${node_ip} "sysctl -p /etc/sysctl.d/kubernetes.conf"
    ssh root@${node_ip} 'yum -y update openssh'
    ssh root@${node_ip} 'echo -e  "root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n"     >> /etc/security/limits.conf'
    ssh root@${node_ip} 'sed -i "s#4096#65535#g" /etc/security/limits.d/20-nproc.conf'
    ssh root@${node_ip} 'groupadd docker && useradd rancher -G docker && echo "123456" | passwd --stdin rancher'
    ssh root@${node_ip} 'yum -y install ntpdate && ntpdate -u cn.pool.ntp.org && echo "* * * * * /usr/sbin/ntpdate -u cn.pool.ntp.org &> /dev/null" > /var/spool/cron/root'
    ssh root@${node_ip} 'yum-config-manager --add-repo http://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 --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos'
    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.json
    ssh root@${node_ip} 'systemctl daemon-reload'
    ssh root@${node_ip} 'systemctl restart docker'
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

脚本内容完成了服务器的初始化,并安装了 docker 配置了加速器。

然后安装一些集群依赖组件:rke,kubectl,helm等。

wget http://192.168.106.10/pack/rancher.tar
1

通过如上命令下载并部署,过程略。

# 2,配置 rancher 用户。

这个时候还需要一步,那就是配置 rancher 用户的免密码登陆其他节点,否则后边的恢复等操作将进行不下去。

仍旧是在192.168.111.4这台主机上进行。

su - rancher
ssh-keygen
ssh-copy-id rancher@192.168.111.4
ssh-copy-id rancher@192.168.111.5
ssh-copy-id rancher@192.168.111.6
1
2
3
4
5

完成如上步骤,基本上就可以进入正式的恢复操作了。

# 3,准备恢复文件。

恢复所要的除了上边准备的基础环境之外,还需要之前备份的数据以及部署集群的原配置文件。

  • 1,先在三台新机器上都创建备份默认目录。

    mkdir -p /opt/rke/etcd-snapshots
    
    1
  • 2,去原来的部署主机192.168.106.3将数据拷贝过来。

    $ cd /opt/rke/etcd-snapshots
    $ scp pki.bundle.tar.gz test.db root@192.168.111.4:/opt/rke/etcd-snapshots/
    $ scp pki.bundle.tar.gz test.db root@192.168.111.5:/opt/rke/etcd-snapshots/
    $ scp pki.bundle.tar.gz test.db root@192.168.111.6:/opt/rke/etcd-snapshots/
    
    1
    2
    3
    4

    因为 etcd 多副本,几个节点备份的都一样,所以可以把原来的 1 个拷贝给新的集群。

  • 3,拷贝部署集群的原配置文件

    $ su - rancher
    $ scp rancher-cluster.yml rancher@192.168.111.4:/home/rancher/
    
    1
    2

    拷贝完成之后,就能进入真正的恢复操作了。

# 4,更改 RKE 配置文件。

现在目光再次聚焦到192.168.111.4这台主机,制作原始rancher-cluster.yml文件的副本。

$ cp rancher-cluster.yml rancher-cluster-restore.yml
1

对副本配置文件进行修改,基本上其他地方不用更改,只需把原来文件当中的几个主机IP地址更改为现在集群的即可。

文件更改前后对比如下:

$ diff rancher-cluster.yml rancher-cluster-restore.yml
2c2
<   - address: 192.168.106.3
---
>   - address: 192.168.111.4
5c5
<   - address: 192.168.106.4
---
>   - address: 192.168.111.5
8c8
<   - address: 192.168.106.5
---
>   - address: 192.168.111.6
11d10
<
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 5,恢复 ETCD 数据。

执行如下命令,从而恢复 etcd 的数据。

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

如果正常完成,则将会在最后输出Finished restoring snapshot [test.db] on all etcd hosts。

# 6,恢复集群。

使用 RKE 在新ETCD节点上启动集群。

$ rke up --config ./rancher-cluster-restore.yml
1

如果正常完成,则将会在最后输出Finished building Kubernetes cluster successfully。

# 7,测试集群。

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

$ kubectl  --kubeconfig=kube_config_rancher-cluster-restore.yml  get nodes
NAME            STATUS     ROLES                      AGE   VERSION
192.168.106.3   Ready      controlplane,etcd,worker   48m   v1.11.6
192.168.106.4   Ready      controlplane,etcd,worker   48m   v1.11.6
192.168.106.5   Ready      controlplane,etcd,worker   48m   v1.11.6
192.168.111.4   Ready      controlplane,etcd,worker   47m   v1.11.6
192.168.111.5   Ready      controlplane,etcd,worker   47m   v1.11.6
192.168.111.6   Ready      controlplane,etcd,worker   47m   v1.11.6
1
2
3
4
5
6
7
8

# 8,清理旧节点。

通过 kubectl 从集群中删除旧节点。

$ kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml  delete node 192.168.106.3 192.168.106.4 192.168.106.5
node "192.168.106.3" deleted
node "192.168.106.4" deleted
node "192.168.106.5" deleted
1
2
3
4

# 9,耐心等待新集群各功能启动。

$ kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml  get pods --all-namespaces
NAMESPACE       NAME                                        READY   STATUS    RESTARTS   AGE
cattle-system   cattle-cluster-agent-d8b957b79-8hglr        1/1     Running   0          42m
cattle-system   cattle-node-agent-cjm72                     1/1     Running   0          48m
cattle-system   cattle-node-agent-fsfzc                     1/1     Running   0          48m
cattle-system   cattle-node-agent-mdwf6                     1/1     Running   0          48m
cattle-system   rancher-7c5cf9945b-8xgjb                    1/1     Running   0          41m
cattle-system   rancher-7c5cf9945b-bzt8k                    1/1     Running   0          42m
cattle-system   rancher-7c5cf9945b-tpr9m                    1/1     Running   0          42m
default         admin-79dccb46f-945nr                       1/1     Running   0          42m
default         api-68d656fbf9-jzx6r                        1/1     Running   0          41m
ingress-nginx   default-http-backend-797c5bc547-xw85p       1/1     Running   0          42m
ingress-nginx   nginx-ingress-controller-8t2p2              1/1     Running   0          48m
ingress-nginx   nginx-ingress-controller-dhj7h              1/1     Running   0          48m
ingress-nginx   nginx-ingress-controller-wfffk              1/1     Running   0          48m
kube-system     canal-8vt7t                                 3/3     Running   0          48m
kube-system     canal-kqbrw                                 3/3     Running   0          48m
kube-system     canal-ssnsj                                 3/3     Running   0          48m
kube-system     cert-manager-cert-manager-8f55cc84b-5pt58   2/2     Running   0          41m
kube-system     kube-dns-7588d5b5f5-dnthk                   3/3     Running   0          42m
kube-system     kube-dns-autoscaler-5db9bbb766-mh9rs        1/1     Running   0          42m
kube-system     metrics-server-97bc649d5-fpwx2              1/1     Running   0          42m
kube-system     tiller-deploy-8cb5b5f5c-dzj2c               1/1     Running   0          42m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 10,域名解析问题。

如果原来集群的 nginx 还没有问题,那么接下来的操作可以直接在原来的 nginx 当中进行。

我这里重新部署了一个 nginx 进行配置,配置过程略。

代理完成之后,分别在新集群当中将域名指向 nginx 的地址。

echo "192.168.111.3 hi.rancher.cn" >> /etc/hosts
1

然后更改一些本地 Windows 的 hosts 解析,接着去浏览器中访问,发现集群起来了,而且,之前跑在集群当中的服务,也还在。

image

看一眼服务:

image

如此以来,整个集群的备份以及恢复试验,也就完成了。

# 3,说说自动备份。

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

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

  • 2,在 rancher-cluster.yml 配置文件中添加以下代码:

    services:
      etcd:
        snapshot: true  # 是否启用快照功能,默认false;
        creation: 6h0s  # 快照创建间隔时间,不加此参数,默认5分钟;
        retention: 24h  # 快照有效期,此时间后快照将被删除;
    
    1
    2
    3
    4
    5

    根据实际需求更改相应参数。

  • 3,运行 up 进行加载。

    rke up --config rancher-cluster.yml
    
    1

# 4,备份的核心。

核心当然是异地备份啦,刚刚执行的备份,都是将快照文件放在了集群本地的/opt/rke/etcd-snapshots目录,所以应该把这个目录进行异地备份即可。

微信 支付宝
#k8s#rancher
上次更新: 2024/07/04, 22:40:37
关于rancher中部署应用的高可用的实验
rancher-v2-2-2的HA部署文档

← 关于rancher中部署应用的高可用的实验 rancher-v2-2-2的HA部署文档→

最近更新
01
学习周刊-总第213期-2025年第22周
05-29
02
学习周刊-总第212期-2025年第21周
05-22
03
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式