首页 > 其他分享 >K8S高可用存储配置说明

K8S高可用存储配置说明

时间:2022-10-03 12:07:16浏览次数:75  
标签:可用 DRBD keepalived 存储配置 drbd nfs 切换 服务器 K8S


随着公司的不断发展,对一些外围工具的使用也逐渐增多,其中包括磁盘数据的高可用,目前采用数据同步的方式是借助DRBD实现主从同步(nfs+drbd+keepalived)。

DRBD是分布式复制块设备,是一种通过TCP/IP网络实现块设备数据实时镜像的方案,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上,以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步,当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。本篇文档主要介绍nfs+DRBD+keepalived实现高可用储存的相关知识点。 

1整体介绍 

公司目前K8S环境实现高可用存储采用数据同步的方式是nfs+DRBD+keepalived实现DRBD主从同步,下面首先介绍一下用到的名词、部署架构和切换脚本。 

1.1名词解释 

1.nfs:网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。 

2.DRBD:一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 

3.keepalived:作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉。 

1.2部署架构 

K8S高可用存储配置说明_数据

1.通过浮动IP指向主服务器上的存储磁盘,此时数据存取都是主节点,但会同步到从节点的存储磁盘中; 

2.从节点是虚线,表示此时数据不走从节点,待机状态; 

3.当主服务器出现问题,浮动IP会转移到从服务器上,虚线变为实线,数据存储改为从服务器。切换过程中调用主副服务器的nfs_check.sh脚本,执行脚本内容,切换DRBD。 

1.3脚本介绍 

下面主要介绍切换nfs主从脚本nfs_check.sh,绿色部分为注解和打印日志说明,如下: 

K8S高可用存储配置说明_K8S高可用_02

K8S高可用存储配置说明_服务器_03

K8S高可用存储配置说明_高可用_04

K8S高可用存储配置说明_数据_05

K8S高可用存储配置说明_数据_06

K8S高可用存储配置说明_服务器_07

2实现步骤 

K8S实现高可用存储首先需要安装相关支撑程序,然后安装DRBD并进行相关配置,最后将DRBD设置为开机自启,下面主要介绍具体安装步骤。 

2.1支撑程序 

1.到
​​​ http://oss.linbit.com/drbd下载drbd-9.0.19-1.tar.gz、drbd-utils-9.12.1.tar.gz,再将drbd-9.0.19-1.tar.gz、drbd-utils-9.12.2.tar.gz上传到虚拟机/usr/local目录,再装一些支撑软件。 ​

K8S高可用存储配置说明_高可用_08

2.安装po4a-translate,编译drbd-utils的rpm包的时候,需要有命令【po4a-translate】的支持,但是系统上并没有这个命令。 

K8S高可用存储配置说明_数据_09

3.检查kernel和kernel-devel版本是否一致,不一致执行更新命令使其保持一致: 

K8S高可用存储配置说明_服务器_10

  

K8S高可用存储配置说明_服务器_11

K8S高可用存储配置说明_数据_12

  

2.2安装DRBD 

1.编译drbd-utils: 

K8S高可用存储配置说明_服务器_13

2.编译DRBD: 

K8S高可用存储配置说明_高可用_14

3.安装drbd模块: 

K8S高可用存储配置说明_高可用_15

4.查看DRBD版本及路径: 

K8S高可用存储配置说明_服务器_16

5.新磁盘分区: 

K8S高可用存储配置说明_服务器_17

6.配置DRBD资源文件: 

vi /etc/drbd.d/drbd.res 

K8S高可用存储配置说明_高可用_18

K8S高可用存储配置说明_K8S高可用_19

K8S高可用存储配置说明_数据_20

7.配置资源: 

K8S高可用存储配置说明_K8S高可用_21

8.设置主节点:强制设置为主节点,在任一节点上执行: 

K8S高可用存储配置说明_服务器_22

9.格式化新分区并挂载: 

K8S高可用存储配置说明_服务器_23

查看: 

lsblk 

K8S高可用存储配置说明_数据_24

  

2.3开机自启 

1.安装完DRBD后,需要将DRBD设置为开机自启。 

K8S高可用存储配置说明_服务器_25

2.设置完开机自启后,重启服务器,执行lsblk命令查看DRBD是否自动挂载。 

K8S高可用存储配置说明_数据_26

  

3测试验证 

测试主要包含两方面:一种是最基础的功能测试,主服务器宕机后检查副服务器的nfs是否启用。一种是业务测试,即主服务器宕机后,产品是否可以继续访问使用。下面主要介绍具体测试步骤。 

3.1基础测试 

1.测试步骤: 

(1)主服务器停止nfs服务,观察nfs服务是否自动启动,未启动,是否切换DRBD。 

(2)主服务器停止keepalived服务,测试是否切换DRBD。 

(3)主服务器reboot重启,观察是否切换DRBD,当主服务器恢复后,观察DRBD是否回到主服务器。 

2.检查重点:主服务器宕机后,DRBD是否切换挂载到从服务器,nfs依然正常挂载。 

3.2 业务测试

1.测试步骤: 

(1)主服务器reboot重启,观察是否切换DRBD,测试产品页面功能是否正常访问和使用,redis连接是否正常,后台日志输出是否正常。 

(2)当主服务器恢复后,观察DRBD是否回到主服务器,测试产品页面功能是否正常访问和使用,redis连接是否正常,后台日志输出是否正常。 

2.检查重点:主服务器宕机后,产品页面功能是否正常访问和使用,redis连接是否正常,后台日志输出。 

3.3相关命令 

1.查看DRBD状态: 

K8S高可用存储配置说明_K8S高可用_27

2.查看keepalived是否启动: 

K8S高可用存储配置说明_高可用_28

4问题说明 

在DRBD切换挂载时,有可能因为配置不对而出现一些问题,下面主要介绍在测试过程中容易出现的问题以及对应的解决方法。 

4.1切换挂载 

1.问题描述:DRBD切换后,nfs挂载提示“mount.nfs: Stale NFS file handle” 

K8S高可用存储配置说明_数据_29

  

2.解决思路:这种错误提示在当前的情况下是因为“过时的nfs句柄”造成的,原因是客户端已打开文件,但服务器不再识别文件句柄,在某些情况下,NFS会在超时后清理其数据结构。但在其他情况下,需要自己清理nfs数据结构,然后重新启动nfs。 

3.解决方法:重新启动nfs服务:

K8S高可用存储配置说明_K8S高可用_30

4.2DRBD挂载 

1.问题描述:DRBD切换后再切换回主服务器后,没有自动设置主节点,node1和node2互相认为对方 StandAlone,导致DRBD连接失败,无法同步。 

K8S高可用存储配置说明_服务器_31

  

2.解决思路:这个问题解决思路就是想办法让2个DRBD在系统自启后重新连接上。 

3.解决方法:在主服务器重新设置主节点,在从服务器重新设置从节点。 

主DRBD服务器执行: 

K8S高可用存储配置说明_服务器_32

K8S高可用存储配置说明_数据_33

  

副drbd服务器执行: 

K8S高可用存储配置说明_服务器_34

K8S高可用存储配置说明_K8S高可用_35

  

4.3日志查看 

1.问题描述:DRBD切换后,产品功能没有问题,但查看产品服务日志时,发现自切换后,容器映射日志不再更新。 

2.解决思路:检查发现是因为脚本中有些命令有时会报错或者执行超时,而keepalived再定时调用脚本时,检查如果在监听时间内脚本没有执行完,就会被认为脚本执行失败,就会切换keepalived的vip,导致keepalived多次主从切换。在多次切换过程中,日志映射出现异常。所以解决思路是保障切换一次就可以成功。 

3.解决方法:调整脚本逻辑,减少非必要命令执行,在命令前加入timeout 1,表示此命令如果执行超过1秒,就跳过减少脚本执行一遍的时间。 

K8S高可用存储配置说明_数据_36

5心得总结 

通过在项目中调整DRBD相关功能,自己对于K8S高可用储存方面的知识有了一定提升,现将收获及心得进行总结。 

5.1知识收获 

知识收获方面主要学会了使用DRBD实现主从同步,nfs+DRBD+keepalived组合方案。keepalived原来在部署环境时就已经用到过,本次对一些细节进行了巩固,比如调用脚本方面。本次主要在DRBD方面令我收获最大,通过DRBD间接地学习了磁盘的分区、初始化及挂载等知识。 

5.2学习方法 

在工作过程中要学会使用链式学习法,链式学习法可以让学习的内容更具有连贯性,在学习新知识之前先了解所学内容的背景知识,再根据自身需要有针对性地学习,同时了解学习过程中遇到的其它知识,主动去查找相关资料和学习,触类旁通、一并掌握、由点到线、由线到面,将所学知识串联起来,形成体系。 

5.3心得体会 

通过项目运维相关工作,学习到了很多Linux与K8S集群的相关知识,也对高可用存储的实现方式有了一个大致的了解,后续要不断加强个人能力,加强学习,努力提高工作效率。 

K8S是最近几年普及的新技术,公司在逐步推出K8S云平台构建集成开发解决方案、开发集成方案,因此在后续工作中需要及时适应新形势下的工作内容,扬长避短、发奋工作、克难攻坚,做好工作计划,力求把工作做得更好。

标签:可用,DRBD,keepalived,存储配置,drbd,nfs,切换,服务器,K8S
From: https://blog.51cto.com/u_15710237/5730046

相关文章

  • k8s扩容节点
    集群新增主机:192.168.10.45fei-test-k8snode12.idc2.test.cn192.168.10.159fei-test-k8snode13.idc2.test.cn192.168.10.58fei-test-k8snode14.idc2.test.cnssh1......
  • K8S日常操作手册
    kubectl创建对象创建资源$kubectlcreate-f./my-manifest.yaml使用多个文件创建资源$kubectlcreate-f./my1.yaml-f./my2.yaml使用目录下的所有清单文件(yam......
  • K8S缩容
    如果你想从Kubernetes集群中删除节点,正确流程如下:1、获取节点列表kubectlgetnode2、设置不可调度kubectlcordon$node_name3、驱逐节点上的Podkubectldrain$n......
  • 部署高可用openelb服务
    使用kubectl安装OpenELB#当前使用的是最新版openelb:v0.5.1kubectlapply-fopenelb.yaml执行完毕后,请再次执行下述命令检查openelb-manager的状态:#kubectlget......
  • 【K8S】Kubernetes控制器Controller-RS/Deployment/HPA详解
    一、介绍Pod是kubernetes的最⼩管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建......
  • 【云原生】Hive on k8s 环境部署
    目录一、概述二、开始部署1)构建镜像2)添加Metastore服务编排1、配置2、控制器3、Service3)添加HiveServer2服务编排1、控制器2、Service4)修改values.yaml5)开始部署6)测试......
  • k8s helm方式部署夜莺监控系统
    一、夜莺介绍   Nightingale|夜莺监控,一款先进的开源云原生监控分析系统,采用All-In-One的设计,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密......
  • 三步快速搭建android开发环境 (下载包已集成可用sdk,无需费心到google相应网站下载,快哉!)
    其中,adtbuntle在这里下:找到这个:​​adt-bundle-windows-x86_64-20140321.zip​​510.0M Android4.2(4.4?)多合一开发包,注意所含eclipse是64位的。===================......
  • k8s部署canal-server使用configMap挂载方式报Read Only file System
    k8s部署canal-server使用configMap挂载方式报ReadOnlyfileSystem1.1、问题复现由于部署canal-server时,需要修改主库master的数据库连接信息以及配置zookeeper,所以为了......
  • k8s发布-jenkins流水线构建
    一、需求:使用jenkins流水线构建应用,发布至k8s二、发布流程:从gitlab仓库拉取代码--》代码编译、打包--》制作镜像并上传至镜像仓库--》发布至k8s三、安装所需插件jen......