IT星球论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 138|回复: 0

Linux讲座之打造高可靠性NFS集群(组图)

[复制链接]

2002

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2016-2-19 18:27:00 |显示全部楼层
linux讲座之打造高可靠性NFS集群(组图)
简介
  
  NFS 是Unix 世界最通用共享文件系统的方式,NFS Server 常扮演企业中重要的File Server。但是实务应用上时常遇到一个问题,当NFS Serverc Crash 会 造成所有NFS Client 相关Session 无法正常运作及终止。问题严重时,甚至NFS Client 及Server 都需reboot 才能解决问题。关于此问题,笔者尝试用 RedHat Cluster Suite 架构HA 的机制来解决此问题,当主要的NFS Server 故障时,另一台备用的NFS Server 能立刻接手继续提供NFS 服务。
  
  测试环境
  
  软件
  
  RedHat Enterprise Linux ES 版Update 2
  RedHat Cluster Suite Update 2
  硬件
  
  x 86 服务器两台
  两张网络卡
  Adaptec SCSI Card 29320-R 两张
  Proware Rackmount 3000I3 磁盘阵列
  
 

  图1:Proware Rackmount 3000I3 磁盘阵列
  
  操作步骤:
  
  1. High Availability NFS Cluster 架构规划
  
  笔者测试架构的简图如图2。主要服务器node1 的ip 为192.168.0.201,备用服务器node2 的ip 为192.168.0.202,整个HA Cluster 对外的service ip 为192.168.0.200。
  
 

  图2:High Availability NFS Cluster 架构图
  
  2.设置Proware Rackmount 3000I3 磁盘阵列
  
  这款磁盘阵列,很容易便可从面板上的「Sel」键设置成RAID 5 的磁盘(可参考其安装手册第五章)。假如SCSI 排线连接正确,从node1 或node2 执行「hwbrowser」应可看到Proware Rackmount 上的Share Disk(图3)。
  
 

  图3:hwbrowser 画面
  
  3.安装Red Hat 集群管理员套件
  
  用root 登入node1 安装clumanager 与redhat-config-cluster 套件才能设置RedHat 集群管理员,将光盘收入光驱中,便会自动执行安装程序(图4)。请选 取「clumanager」及「redhat-config-cluster」套件进行安装(图5);在node2亦重复此步骤。
  
 

  图4:Red Hat 集群管理安装画面
   

  图5:选取「clumanager」及「redhat-config-cluster」套件
  
  或利用rpm 方式安装:
  
  [root@node2 RPMS]# rpm -ivh clumanager-1.2.12-1.i386.rpm
  [root@node2 RPMS]# rpm -ivh redhat-config-cluster-1.0.2-1.1.noarch.rpm
  [root@node1 root]# rpm -qa | grep clu
  clumanager-1.2.12-1
  redhat-config-cluster-1.0.2-1.1
  
  4.编辑 /etc/hosts
  
  [root@node1 root]#vi /etc/hosts
  127.0.0.1 localhost.localdomain localhost
  192.168.0.201 node1.example.com node1
  192.168.0.202 node2. example.com node2
  并将此文件scp 至node2
  [root@node1 root]#scp /etc/hosts node2:/etc/hosts
  
  5.设置集群共享分区(Configuring Shared Cluster Partitions)
  
  共享集群共享分区是用来存放集群的状态信息,存放内容如下:
  
  集群锁定状态
  服务状态
  设置信息
  
 每一个成员将会定期的写入它的服务状态到共享的储存空间,共需要建立两个集群共享分区:primary 及shadow。假如primary 的共享分区毁损了,集群成员还可以从shadow 或备用共享分区读取信息,并且在同时修复primary 分区,资料的一致性是透过检查码(checksums) 来维护,而且任何在两个分区间的不一致资料将会自动地修正。
  
  假如一个成员在开机时无法写入两个共享的分区,它将不被允许加入集群。集群共享分区的需求如下:
  
  两个分区至少需要 10MB 的空间
  
  共享的分区必须是 raw 装置,它们不能含有文件系统。
  
  共享分区只能由集群的状态与设置信息所使用
  
  [root@node1 root]# fdisk -l /dev/sdb
  Disk /dev/sdb: 80.0 GB, 80018931712 bytes
  255 heads, 63 sectors/track, 9728 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Command (m for help): p      
  #  
  # example: /dev/raw/raw1 /dev/sda1
  # /dev/raw/raw2 8 5
  /dev/raw/raw1 /dev/sdb1
  /dev/raw/raw2 /dev/sDB2
  [root@node2 root]# cat /etc/sysconfig/rawdevices
  # raw device bindings
  # format:   
  #  
  # example: /dev/raw/raw1 /dev/sda1
  # /dev/raw/raw2 8 5
  /dev/raw/raw1 /dev/sdb1
  /dev/raw/raw2 /dev/sdb2
  
  编辑完/etc/sysconfig/rawdevices 文件后,可以重新开机 或者是执行下列指令来使其生效。
  
  #service rawdevices restart
  
  #使用 raw -aq 指令可查询所有的raw 装置
  
  [root@node1 root]# raw -aq
  /dev/raw/raw1: bound to major 8, minor 17
  /dev/raw/raw2: bound to major 8, minor 18
  7.设置集群名称
  
  选择『主选单』=>『系统设置』=>『服务器设置』=>『集群』。
  
  或在shell 提示符号下输入redhat-config-cluster 指令。
  
 

  图6:设置集群名称
  
  8.设置Share Raw Device
  
  选择redhat-config-cluster 上的「Cluster」=>「Shared State」便可看到图7 的画面,填入正确的Raw Device。
  
 

  图7:Share Raw Device
  
  9. 新增Cluster Member
  
  选取「Member」,再点选「新增」的按钮(图8)。程序将会要求输入Member名称。请输入Cluster 中一部系统的主机名称或地址,请注意每一个Member 必须位于与执行redhat-config-cluster 的机器在同一子网络中,而且必须在 DNS或每一部集群系统的 /etc/hosts 文件中已经定义了。请新增两个Cluster Member「node1」及「node2」。(图9)
  
 

  图8:新增Cluster Member
   

  图9:nfs_cluster 的成员
  
  10.设置Failover Domain
  
  「Failover Domain」是指提供某种服务,可互相备用的主机集合。一个Failover Domain 含有下列的特征:
  
  Unrestricted — 指派给这个网域的一项服务可以在任何可用的成员(包括不列在此Failover Domain 内的主机)上执行
  Restricted — 指派给这个网域的一项服务只能可以在Failover Domain 可用的成员上执行。
  Unordered — 当一项服务被指派给一个Unordered 的Failover Domain,服务将执行于其上的成员将于未经优先级排列的可用Failover Domain 成员中来挑选。
  Ordered —允许您在一个Failover Domain 中的成员间指定一个优先级,在清单顶部的成员便是最优先的,接下来便是清单中的第二个成员,依此类推。 选择「Failover Domain」的卷标页,再点选「新增」的按钮。将会出现如图10所示的「Failover Domain」对话窗口。
  
 

  图10:「Failover Domain」对话窗口
  
  勾选「Restrict failover to only these members」防止在这里未列出的任何成员接手指派给这个网域的一项服务。
  
  勾选「Ordered Failover」依据网域中成员清单的位置来决定接管服务的优先权,较优先的成员将位于顶端。
  
 

  图11:设置「Failover Domain」的属性
  
  11.激活NFS 服务器
  
  要建立High Availability NFS 服务,每一部集群成员都必须激活NFS 服务
  
  # service nfs start 「Start Cluster Service」
  b. 激活NFS 设置向导:「Cluster」=>「Configure 」=>「Add Exports」=>
  「NFS」
  你将会看到如图12 的画面,然后按下「Forward」。
  
 

  图12:NFS Druid 画面
  
  c.利用「NFS Druid」将/dev/sdb export 给NFS Client,目录名称为 /data,步骤如图13~图15。这个部份有几点需特别注意:
  
  Service Name—在集群中用来辨识这个服务所使用的名称
  Service IP—集群的NFS 服务将被指定一个浮动的IP 地址,以用来与集群服务器的IP 地址做区分,这个IP 地址称为「Service IP」。NFS Client 存取NFS, 是透过Service IP 而不是node1 或node2 的真实IP。
  这是为了不让NFS Client 知道是集群内那台服务器提供服务。这个浮动的 IP 位址将会设置在主要服务器(Master,在本例中是node1)。藉由使用这个方法,NFS 客户端只知道浮动IP 地址,而不知道已经配置了集群的 NFS 服务器的事实。
  如果主要服务器故障(node1),则此Service IP 会移转至备用服务器(node2),如些一来,当主要服务器故障,备用服务器接管NFS 服务,NFS Client 完全不用做任何异动。
  避免使用 exportfs –r
  exportfs -r 指令将移除在 /etc/exports 文件中没有特别指定的任何export 资讯,执行这个指令将会导致集群的NFS 服务变得无法被存取(直到服务被重新激活)。由于这个原因,建议您避免于已设置高存取性之NFS 服务的集群中使用exportfs -r 指令。如要回复不经意使用exportfs -r 指令,必须先停止然后再重新激活 NFS 集群服务。
  
 

  图13:export 与Client 选项
   

  图14:设置Service Name 与Service IP
   

  图15:选择export 的Device
  
  在「NFS Druid」的最后,点选「套用」来建立这个服务。并从「集群设置工具」中选择「文件」=>「储存」来储存设置。
  
  13.将node1 的/etc/cluster.xml 复制至node2
  
  集群设置工具将集群服务与系统程序、集群成员与集群服务的信息储存在/etc/cluster.xml 配置文件。所以当node1 巳完成设置后,请将/etc/cluster.xml 复制至node2 上,并激活node2 上的「clumanager」程序。
  
  [root@node1 root]# scp /etc/cluster.xml node2:/etc/cluster.xml
  root@node2's password:
  cluster.xml 100% 1405
  [root@node2 root]# service clumanager start
  Starting Red Hat Cluster Manager...
  Loading Watchdog Timer (softdog): [ OK ]
  Starting Quorum Daemon:
  14.修改node1 及node2 上的/etc/syslog.conf 指定Cluster Log 存放位置。
  
  [root@node1 root]# vi /etc/syslog.conf
  # Add for cluster
  local4.* /var/log/cluster
  # service syslog restart
  [root@node2 root]# vi /etc/syslog.conf
  # Add for cluster
  local4.* /var/log/cluster
  # service syslog restart
  15.查看集群状态
  
  选择 『集群』 => 『设置』 显示集群状态(图16)。
  

  图16:集群状态图
  
  16.测试High Availability NFS Cluster,下面是笔者的测试过程,用此来证明当node1 Crash 时,node2 确实可Take Over NFS 服务,达到High Availability 目的。
  
  [root@ftp root]# showmount -e 192.168.0.200
  Export list for 192.168.0.200:
  /data *
  [root@ftp root]#mkdir /mnt/nfs
  [root@ftp root]#mount 192.168.0.200:/data /mnt/nfs
  [root@ftp root]#mount
  ...........
  ...........
  192.168.0.200:/data on /mnt/nfs type nfs (rw,addr=192.168.0.200)
  [root@ftp root]# cd /mnt/nfs
  此时将node1 电源关掉或执行「poweroff」指令仿真node1 Crash
  [root@ftp nfs]# ls
  此时大约会hang 5~10 秒,node1 便接管NFS 服务,ls 指令执行结果便会出现。
  
  后记
  
  本文笔者利用RedHat Cluster Suite 加上SCSI Share Disk 构建High Availability NFS Cluster。由于SAN 的流行,而且愈来愈多厂商对于Linux HA 解决方案感兴趣,下期文章笔者将继续介绍如何在SAN 环境下构建RedHat High Availability Cluster。                                                               
Linux讲座之打造高可靠性NFS集群(组图)

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部