NFS存储迁移至GlusterFS
NFS存储迁移至GlusterFS
前提条件
- 为防止脑裂,建议使用最低3台节点制作3复制集的存储卷;
- 在进行存储迁移前,GluseterFS存储节点需先成为k8s集群中的node节点;
- 存储切换时请勿在平台继续操作,以免数据切换后不一致;
- GluseterFS所使用磁盘挂载在/data目录,推荐使用逻辑卷;
- 如果之前通过修改控制器方式修改过Rainbond组件相关数据,请提前做好备份,存储切换后会重置相关修改。
部署GlusterFS
将存储节点添加至当前k8s集群,参考Rainbond官方文档安装的k8s集群扩容节点命令如下
docker exec -it kubeasz easzctl add-node NODE_IP
在k8s集群所有节点安装所需要的组件
- Ubuntu16.04/18.04
add-apt-repository ppa:gluster/glusterfs-7
apt-get update
apt-get install glusterfs-client -d
modprobe dm_thin_pool
- CentOS 7
yum -y install centos-release-gluster
yum -y install glusterfs-client
modprobe dm_thin_pool
所有节点GlusterFS版本必须为7.*+,否则会出现无法挂载存储的情况;可通过执行
glusterfs --version
验证。在GluseterFS节点划分分区并挂载磁盘
# 查看可用磁盘
fdisk -l
# 分区并格式化
mkfs.xfs /dev/vdb1
mkdir -p /data
echo "/dev/vdb1 /data xfs defaults 1 2" >>/etc/fstab
# 挂载
mount -a
# 确定/data挂载
df -h | grep data
以下操作在k8s集群的任一master节点执行
获取对应项目
git clone https://gitee.com/liu_shuai2573/gfs-k8s.git && cd gfs-k8s
- 设置标签使该节点只运行GFS
#设置标签,调度glusterfs的pod至指定节点
kubectl label node 10.10.10.71 10.10.10.72 10.10.10.73 storagenode=glusterfs
#设置taint策略,使该节点只运行glusterfs,如需复用glusterfs节点请忽略该操作
kubectl taint node 10.10.10.71 10.10.10.72 10.10.10.73 glusterfs=true:NoSchedule
- 运行GFS的相关控制器(视网络及性能情况而定,大约需要两分钟)
kubectl create -f gluster-daemonset.yaml
- 检查是否在指定节点正常运行
$ kubectl get pods -o wide --selector=glusterfs-node=daemonset
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
glusterfs-2k5rm 1/1 Running 0 52m 192.168.2.200 192.168.2.200 <none> <none>
glusterfs-mc6pg 1/1 Running 0 134m 192.168.2.22 192.168.2.22 <none> <none>
glusterfs-tgsn7 1/1 Running 0 134m 192.168.2.224 192.168.2.224 <none> <none>
为GFS集群添加节点
kubectl exec -ti glusterfs-2k5rm gluster peer probe 192.168.2.22
kubectl exec -ti glusterfs-2k5rm gluster peer probe 192.168.2.224 #检测是否添加成功,成功则显示Connected状态
kubectl exec -ti glusterfs-2k5rm gluster peer status创建服务账户并进行RBAC授权
kubectl create -f rbac.yaml
配置k8s集群使用GFS
- 创建provisioner资源
kubectl create -f deployment.yaml
创建storageclass资源
修改
storageclass.yaml
文件中的parameters.brickrootPaths
字段对应的值,将GlusterFS节点的IP替换掉。
kubectl create -f storageclass.yaml
- 创建pvc验证
kubectl create -f pvc.yaml
#创建成功时STATUS为Bound
kubectl get pvc | grep gluster-simple-claim
- 创建pod验证
运行正常时STATUS为Running
kubectl create -f pod.yaml
kubectl get po | grep gluster-simple-pod
#验证正常后将pod删除
kubectl delete -f pod.yaml
数据备份
数据备份是考虑到实际存储切换时使用原NFS存储向GFS同步数据可能会由于受到网络因素等影响导致较慢,所以事先将NFS中的数据拷贝至手动创建的GFS存储卷中,在最终切换时再从当前的GFS卷中向切换后自动创建的卷中同步数据,需要确保GFS存储磁盘容量能够容纳以下组件的数据*2份;若实际情况NFS向GFS同步数据较快,此步骤可以忽略。
需要备份的数据如下
- rbd-repo
- rbd-hub
- rbd-chaos
- rbd-cpt-grdata
使用NFS存储的数据默认存储在NFS所运行宿主机的 /opt/rainbond/data/nfs
目录下,根据PVC名字进行划分,将上述需要备份的文件进行备份。
- 手动创建一个存储卷,用作备份使用
$ kubectl exec -ti glusterfs-2k5rm gluster volume create backup replica 3 192.168.2.200:/data/backup 192.168.2.22:/data/backup 192.168.2.224:/data/backup
$ gluster volume start backup
#在原NFS节点挂载该卷,方便进行备份
mkdir /backup
mount.glusterfs 192.168.2.200:/backup /backup
#获取上述需备份数据与NFS存储中所对应的文件夹名称(对比VOLUME名字与NFS存储中文件夹名字)
kubectl get pvc -n rbd-system
#在原NFS节点使用rsync同步数据,可进行增量备份,使用此方式备份上述四份数据
rsync -azvP /opt/rainbond/data/nfs/组件PV名字 /backup/
切换存储
- 删除PVC
kubectl get pvc -A| grep rbd-system|grep rainbondvolumerwx|awk '{print$2}'|xargs kubectl delete pvc -n rbd-system
- 删除PV
kubectl get pv |grep rainbondvolumerwx|awk '{print$1}'|xargs kubectl delete pv -n rbd-system
如遇到无法删除参考文档
- 修改rainbondvolume使用
glusterfs
存储
修改storageClassName
及provisioner
的值。
kubectl edit rainbondvolume -n rbd-system
spec:
csiPlugin:
nfs: {}
imageRepository: registry.cn-hangzhou.aliyuncs.com/goodrain
storageClassName: glusterfs-simple
storageClassParameters:
provisioner: gluster.org/glusterfs-simple
storageRequest: 1
- 删除控制器
如果之前通过修改控制器方式修改过Rainbond组件相关数据,pod正常创建后需再次修改,删除后会重置相关控制器参数。
删除后将会自动创建pod及对应存储pv,pvc
kubectl delete sts nfs-provisioner rbd-eventlog rbd-db rbd-etcd rbd-monitor rbd-repo -n rbd-system
kubectl delete ds rbd-chaos rbd-gateway rbd-node -n rbd-system
kubectl delete deploy rbd-api rbd-app-ui rbd-hub rbd-mq rbd-webcli rbd-worker -n rbd-system
- 拷贝数据
查询 rbd-db,rbd-repo,rbd-hub,rbd-cpt-grdata
新创建的pv名字
kubectl get pv -n rbd-system
通过临时挂载的方式将GFS存储卷挂载出来,将之前备份的数据分别拷贝到对应目录
以 rbd-hub 为例
mkdir /rbd-hub
mount -t glusterfs 192.168.2.187:/{rbd-hub pv名字} /rbd-hub
拷贝完毕后重启pod识别数据
kubectl get po -n rbd-system|awk '{print$1}'|xargs kubectl delete po -n rbd-system
将平台运行组件的pv及pvc删除,并登录平台将所有应用重启
kubectl get pvc -A|grep rainbondsssc|awk '{print$1,$2}'|xargs kubectl delete pvc $2 -n $1
kubectl get pv |grep rainbondsssc|awk '{print$1}'|xargs kubectl delete pv
验证
1.查看平台组件是否都处于running状态
$ kubectl get po -n rbd-system
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-754cdcbbb6-lkxkb 1/1 Running 0 17m
kubernetes-dashboard-57b897f8df-wjj7s 1/1 Running 0 17m
rainbond-operator-0 2/2 Running 0 13m
rbd-api-564f456468-7gj2j 1/1 Running 1 17m
rbd-app-ui-64c7c55995-skjsg 1/1 Running 3 17m
rbd-chaos-gq4xg 1/1 Running 1 17m
rbd-db-0 2/2 Running 2 17m
rbd-etcd-0 1/1 Running 1 17m
rbd-eventlog-0 1/1 Running 1 17m
rbd-gateway-msrsd 1/1 Running 1 17m
rbd-hub-85b7b94846-b5kp6 1/1 Running 1 17m
rbd-monitor-0 1/1 Running 1 17m
rbd-mq-989c5549c-qtdqj 1/1 Running 1 17m
rbd-node-7fbqt 1/1 Running 0 17m
rbd-node-gqc5s 1/1 Running 1 17m
rbd-node-mg62k 1/1 Running 0 17m
rbd-repo-0 1/1 Running 1 17m
rbd-webcli-84969b7fc5-bhmgs 1/1 Running 1 17m
rbd-worker-78b6dc8fc4-cjtn6 1/1 Running 1 17m
2.检查使用存储的组件数据是否和迁移前一致
3.找到有使用共享存储的组件,通过grctl service get
命令查看是否使用的是GlusterFS存储;通过endpoints及对应路径查看数据。
$ grctl service get gr1e52a5 -t v6j1tpha
PodVolume:
+----------------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Volume | Type | Volume Mount |
+----------------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| /var/lib/mysql | nfs | endpoints: glusterfs-simple-rbd-cpt-grdata |
| | | path: pvc-c9e702f4-2a52-4f07-98b0-25488f9b585b/tenant/6dc4f0529b8c43d7a96db742029f43d1/service/37bf4d2a3608455d867c8289231e52a5/var/lib/mysql/gr1e52a5-0 |
| | | endpointsNamespace: rbd-system |
+----------------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
确认完毕后删除原NFS相关资源及数据
kubectl delete pvc data-nfs-provisioner-0 -n rbd-system
kubectl delete pv nfs-provisioner -n rbd-system
NFS存储迁移至GlusterFS的更多相关文章
- NFS存储服务及部署
1 NFS简介 1.1 什么是NFS NFS=Network File System=网络文件系统.主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服 ...
- nfs 存储服务
今日内容: NFS 1.什么是nfs? network file system 网络文件系统 nfs共享存储 2.nfs能干什么? nfs 能为 不同主机系统之间 实现 文件的共享 3.为什么要使用n ...
- 烂泥:NFS存储与VSphere配合使用
本文首发于烂泥行天下. 公司服务器的虚拟化使用的是VM ESXi 5.0,为了更有效的利用服务器的硬盘空间.就把所有的镜像文件存放到另外一台linux服务器上,这样在使用vsphere安装虚拟机时可以 ...
- docker volume创建、备份、nfs存储
docker存储volume #环境 centos7.4 , Docker version 17.12.0-ce docker volume创建.备份.nfs存储 #docker volume 数据存 ...
- NFS存储服务
NFS存储服务笔记======================================================================NFS共享存储是什么: 英文名-Netwo ...
- rancher2.1.7安装nfs 存储类
NFS存储类不建议作大规模存储,块存储建议采用CEPH(独立安装) NFS只作为外接存储与普通NGINX类的配置文件,业务配置文件建议走配置中心. 增加自定义商店 地址为:https://github ...
- Oracle 11gR1 RAC存储迁移方案
一.需求Oracle 11gR1 RAC存储计划更换,数据库版本为11.1.0.7,无停机维护窗口. 二.环境准备1.主机环境.OS环境2.安装11.1.0.6.0版Clusterware(linux ...
- Rancher2.0中使用外置NFS存储部署Nginx实验
目录: 1.环境准备工作 1.1 准备好Rancher2.0集群环境 1.2 准备好外部NFS服务器 2.Rancher2.0中使用NFS存储的方法 2.1 在集群中创建持久卷(PV) 2.2 在项目 ...
- Oracle 11g R2 RAC with ASM存储迁移--Rman copy&ASM Rebalance(一)
ASM GROUP-Rman copy迁移 0x00--环境介绍 VMware版本:VMware12pro 主机操作系统:RHEL6.5_64 共享存储使用VMWARE创建共享磁盘文件 数据库版本:O ...
随机推荐
- RocketMQ源码分析 broker启动,commitlog、consumequeue、indexfile、MappedFileQueue、MappedFile之间的关系以及位置说明
目录 1.MappedFile类属性说明 1.1.MappedFile类属性如下 1.2.MappedFile构造器说明 2.MappedFileQueue类说明 2.1.属性说明 2.2.Mappe ...
- javaweb练手项目jsp+servlet简易购物车系统
简易购物车项目 这是一个用intellij IDEA做的简易的javaweb项目,开发环境使用的jdk1.8和tomcat8以及mysql数据库. 1.项目开发准备: 创建github仓库 项目框架搭 ...
- python的常量与变量
1.Python属于强类型编程语言,Python解释器会根据赋值或运算来自动判断变量的类型.Python还是一种动态类型语言,变量的类型也是可以随时变化的. >>> x=3 > ...
- Sentinel并发限流不精确-之责任链
在之前调研Sentinel的过程中,为了准备分享内容,自己就简单的写了一些测试代码,不过在测试中遇到了一些问题,其中有一个问题就是Sentinel流控在并发情况下限流并不精确,当时我还在想,这个我 ...
- 自定义 demo 集合
各种写着玩的自定义控件demo 有时网上看到一些比较有意思的开源项目,有时间的话就会自己也撸一个出来,但是一般只关注实现样式.动画等,不会太去细致完整地完成,俗称占个坑~ 持续更新中... githu ...
- java中token的生成和验证
package com.zjn.token; /** * token编码工具类 * @author ouyangjun */ public class TokenEncryptUtils { // 编 ...
- DVWA Brute Force:暴力破解篇
DVWA Brute Force:暴力破解篇 前言 暴力破解是破解用户名密码的常用手段,主要是利用信息搜集得到有用信息来构造有针对性的弱口令字典,对网站进行爆破,以获取到用户的账号信息,有可能利用其权 ...
- Mac电脑 Android Studio连接小米手机
1.设置>关于本机>点击5下MIUI版本>激活开发者模式 2.设置>更多设置>开发者选项>开启开发者选项>开启USB调试>开启USB安装>开启显示 ...
- C语言全排列
#include <stdio.h> int m=5; char s[]="12345"; void Swap(char *a, char *b)//元素交换 { ch ...
- 对于home主页的切换处理
经过测试,发现,在home首页的时候,滑动到某一个位置的时候,如果再点击tabbar中的"购物车"."分类"或者"我的"的时候,再点击到首页 ...