分类: 架构设计与优化
2017-12-07 16:16:31
DUAP平台微力系统WEB前端采用NFS共享方式将站点公共数据统一集中保存,这个结构简单高效,一定程度上满足了在线业务对性能上的要求。同时也存在以下几点不足:
1、单节点故障风险:如果提供NFS共享的51节点出现故障,整个应用就会全面中断。
2、网卡带宽的占用较高:业务响应、与数据库交互、NFS共享存取都使用同一物理网卡,当大批量活动集中操作时网卡带宽资源严重不足。
微力本次结构优化,主要集中在通过调整对NFS共享的实现方式,来解决上述单节点故障的隐患;不同数据请求采用不同网卡进行通信,降低对单个网卡资源的占用,最终提高业务系统的性能和可用性。
物理结构上两台服务器通过光纤HBA卡双线连接DS5020存储,挂载分配的逻辑卷LUN。在使用该逻辑卷的方式上,有两种可选方式:
1、集群文件系统OCFS2,其优点是所有节点可对共享空间同时进行读写,但实现过程比较复杂,文件系统不是Linux通用格式,出问题较难排查。
2、网络文件系统NFS,其中一台Web前端A通过FC连接存储逻辑卷LUN并进行挂载,然后通过NFS方式共享给另一台Web前端B。当A节点发生故障时,B节点卸载A的NFS共享,然后通过FC连接并挂载逻辑卷LUN。
综合考虑IO性能、运维难易度、新服务器所支持的OS发行版本,集群文件系统OCFS2不符合本次要求,最终选择网络文件系统NFS。与整改前的NFS不同之处体现在存储类型上:整改前使用的是本地磁盘,一旦物理机出现故障将使整个业务终止并且恢复业务时间相对比较长;而整改后使用的是外接存储设备,发生故障时可通过切换快速恢复业务。物理拓扑结构如下所示:
图- 1设备物理连接拓扑
出于安全考虑,两台WEB前端使用多条物理链路连接存储,都进行相同的多路径配置,并且给识别到的逻辑卷LUN取一个易识别的名称,然后进行分区、格式化(在一台节点上进行分区、格式化即可)。如下图所示(共享逻辑卷名称为weili_nfs,大小为500G):
图- 2存储划分的共享逻辑卷
图- 3系统多路径工具识别到的逻辑卷
临时挂载逻辑卷到本地/mnt目录,并进行IO性能的测试,效果非常理想,10G数据大概10秒左右。如下图所示:
mount /dev/mapper/weili_nfs /mnt //挂载逻辑卷到本地
dd if=/dev/zero of=/mnt/IO_test.iso bs=1G count=10
图- 4NFS服务端通过HBA卡挂载共享逻辑卷
图- 5对挂载的逻辑卷进行I/O测试
服务器之间内网的数据交互同外网用户业务请求的数据交互建议使用不同的物理网卡进行分离,eth0承载业务数据请求,网段为192.168.103.0;eth1承载NFS数据共享,网段不同于业务网段即可,本例为172.168.1.0。
节点名称 |
eth0(外网业务) |
eth1(内网交互) |
weili-web01 |
192.168.103.51 |
172.168.1.51 |
weili-web02 |
192.168.103.52 |
172.168,1.52 |
微力两台web前端需要共享的内容主要是用户上传的数据,其保存目录为/home/var/www/wx.dghui.com.git/uploads,因此weili-web01(NFS服务端)通过光纤HBA卡通道将共享逻辑卷LUN挂载到该目录,然后将该目录通过NFS方式共享出去。weili-web02(NFS客户端)光纤HBA卡与存储物理上是连接的,但使用NFS方式将weili-web01共享的目录挂载到自己相同的目录下。只有当NFS服务端出现故障时,weili-web02才通过光纤HBA卡通道将共享逻辑卷挂载到本机对应的目录下。具体流程如下所示:
图- 6正常及故障场景示意图
1、weili-web01正常开机后先检查多路径服务是否运行,该服务是识别共享逻辑卷的关键(暂未设置随机启动),如果没有运行,请使用以下命令开启,正常状态如下图所示:
systemctl restart multipathd //重启multipathd服务
systemctl status multipathd //查看multipathd服务
2、将共享卷挂载到本机/home/var/www/wx.dghui.com.git/uploads,如果没有挂载请输入一下命令进行挂载。
mount /dev/mapper/weili_nfs \
/home/var/www/wx.dghui.com.git/uploads
3、检查nfs-server服务是否启用,如果没有启用请按照以下命令启用。
systemctl status nfs-server //查看nfs-server的状态
systemctl restart nfs-server //重启nfs-server服务
showmount –e 127.0.0.1 //查看nfs共享的目录
查看NFS服务共享的目录
A. 如果NFS服务端运行正常,只需将其共享挂载到本机对应的目录即可:
mount –t nfs x.x.x.x:/home/var/www/wx.dghui.com.git/uploads \
/home/var/www/wx.dghui.com.git/uploads (x.x.x.x为nfs共享用IP)
B. 如果NFS服务端故障,先卸载之前通过TCP/IP进行的nfs挂载,然后通过光纤HBA卡挂载共享逻辑卷:
umount / home/var/www/wx.dghui.com.git/uploads
mount /dev/mapper/weili_nfs
/home/var/www/wx.dghui.com.git/uploads
具体操作流程如下图所示:
图- 7故障处理流程
模拟NFS服务端weili-web01(本例为192.168.103.51)出现故障无法通过TCP/IP进行连接,NFS客户端weili-web02(192.168.103.52)通过光纤HBA卡挂载共享逻辑卷,检查数据是否完整一致。操作步骤如下图所示:
图- 8NFS服务端共享目录中的内容
图- 9客户端通过TCP/IP 以NFS形式挂载共享目录
图- 10关闭NFS服务端
图- 11客户端无法查看NFS挂载的内容
图- 12NFS客户端通过光纤通道挂载逻辑卷
故障模拟演练发现数据是保持一致的,说明在NFS服务端发生故障时,NFS客户端读取共享数据是不受影响,能确保应用快速恢复。为了确保数据的安全,共享目录内的数据会定期进行完整备份。