随着公司的不断发展,对一些外围工具的使用也逐渐增多,其中包括磁盘数据的高可用,目前采用数据同步的方式是借助DRBD实现主从同步(nfs+drbd+keepalived)。
DRBD是分布式复制块设备,是一种通过TCP/IP网络实现块设备数据实时镜像的方案,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上,以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步,当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。本篇文档主要介绍nfs+DRBD+keepalived实现高可用储存的相关知识点。
公司目前K8S环境实现高可用存储采用数据同步的方式是nfs+DRBD+keepalived实现DRBD主从同步,下面首先介绍一下用到的名词、部署架构和切换脚本。
1.nfs:网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
2.DRBD:一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
3.keepalived:作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉。
1.通过浮动IP指向主服务器上的存储磁盘,此时数据存取都是主节点,但会同步到从节点的存储磁盘中;
2.从节点是虚线,表示此时数据不走从节点,待机状态;
3.当主服务器出现问题,浮动IP会转移到从服务器上,虚线变为实线,数据存储改为从服务器。切换过程中调用主副服务器的nfs_check.sh脚本,执行脚本内容,切换DRBD。
下面主要介绍切换nfs主从脚本nfs_check.sh,绿色部分为注解和打印日志说明,如下:
K8S实现高可用存储首先需要安装相关支撑程序,然后安装DRBD并进行相关配置,最后将DRBD设置为开机自启,下面主要介绍具体安装步骤。
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目录,再装一些支撑软件。
2.安装po4a-translate,编译drbd-utils的rpm包的时候,需要有命令【po4a-translate】的支持,但是系统上并没有这个命令。
3.检查kernel和kernel-devel版本是否一致,不一致执行更新命令使其保持一致:
1.编译drbd-utils:
2.编译DRBD:
3.安装drbd模块:
4.查看DRBD版本及路径:
5.新磁盘分区:
6.配置DRBD资源文件:
vi /etc/drbd.d/drbd.res
7.配置资源:
8.设置主节点:强制设置为主节点,在任一节点上执行:
9.格式化新分区并挂载:
查看:
lsblk
1.安装完DRBD后,需要将DRBD设置为开机自启。
2.设置完开机自启后,重启服务器,执行lsblk命令查看DRBD是否自动挂载。
测试主要包含两方面:一种是最基础的功能测试,主服务器宕机后检查副服务器的nfs是否启用。一种是业务测试,即主服务器宕机后,产品是否可以继续访问使用。下面主要介绍具体测试步骤。
1.测试步骤:
(1)主服务器停止nfs服务,观察nfs服务是否自动启动,未启动,是否切换DRBD。
(2)主服务器停止keepalived服务,测试是否切换DRBD。
(3)主服务器reboot重启,观察是否切换DRBD,当主服务器恢复后,观察DRBD是否回到主服务器。
2.检查重点:主服务器宕机后,DRBD是否切换挂载到从服务器,nfs依然正常挂载。
1.测试步骤:
(1)主服务器reboot重启,观察是否切换DRBD,测试产品页面功能是否正常访问和使用,redis连接是否正常,后台日志输出是否正常。
(2)当主服务器恢复后,观察DRBD是否回到主服务器,测试产品页面功能是否正常访问和使用,redis连接是否正常,后台日志输出是否正常。
2.检查重点:主服务器宕机后,产品页面功能是否正常访问和使用,redis连接是否正常,后台日志输出。
1.查看DRBD状态:
2.查看keepalived是否启动:
在DRBD切换挂载时,有可能因为配置不对而出现一些问题,下面主要介绍在测试过程中容易出现的问题以及对应的解决方法。
1.问题描述:DRBD切换后,nfs挂载提示“mount.nfs: Stale NFS file handle”
2.解决思路:这种错误提示在当前的情况下是因为“过时的nfs句柄”造成的,原因是客户端已打开文件,但服务器不再识别文件句柄,在某些情况下,NFS会在超时后清理其数据结构。但在其他情况下,需要自己清理nfs数据结构,然后重新启动nfs。
3.解决方法:重新启动nfs服务:
1.问题描述:DRBD切换后再切换回主服务器后,没有自动设置主节点,node1和node2互相认为对方 StandAlone,导致DRBD连接失败,无法同步。
2.解决思路:这个问题解决思路就是想办法让2个DRBD在系统自启后重新连接上。
3.解决方法:在主服务器重新设置主节点,在从服务器重新设置从节点。
主DRBD服务器执行:
副drbd服务器执行:
1.问题描述:DRBD切换后,产品功能没有问题,但查看产品服务日志时,发现自切换后,容器映射日志不再更新。
2.解决思路:检查发现是因为脚本中有些命令有时会报错或者执行超时,而keepalived再定时调用脚本时,检查如果在监听时间内脚本没有执行完,就会被认为脚本执行失败,就会切换keepalived的vip,导致keepalived多次主从切换。在多次切换过程中,日志映射出现异常。所以解决思路是保障切换一次就可以成功。
3.解决方法:调整脚本逻辑,减少非必要命令执行,在命令前加入timeout 1,表示此命令如果执行超过1秒,就跳过减少脚本执行一遍的时间。
通过在项目中调整DRBD相关功能,自己对于K8S高可用储存方面的知识有了一定提升,现将收获及心得进行总结。
知识收获方面主要学会了使用DRBD实现主从同步,nfs+DRBD+keepalived组合方案。keepalived原来在部署环境时就已经用到过,本次对一些细节进行了巩固,比如调用脚本方面。本次主要在DRBD方面令我收获最大,通过DRBD间接地学习了磁盘的分区、初始化及挂载等知识。
在工作过程中要学会使用链式学习法,链式学习法可以让学习的内容更具有连贯性,在学习新知识之前先了解所学内容的背景知识,再根据自身需要有针对性地学习,同时了解学习过程中遇到的其它知识,主动去查找相关资料和学习,触类旁通、一并掌握、由点到线、由线到面,将所学知识串联起来,形成体系。
通过项目运维相关工作,学习到了很多Linux与K8S集群的相关知识,也对高可用存储的实现方式有了一个大致的了解,后续要不断加强个人能力,加强学习,努力提高工作效率。
K8S是最近几年普及的新技术,公司在逐步推出K8S云平台构建集成开发解决方案、开发集成方案,因此在后续工作中需要及时适应新形势下的工作内容,扬长避短、发奋工作、克难攻坚,做好工作计划,力求把工作做得更好。