IBM® AFS™ 存储区域网络(SAN)的存储虚拟化功能可以将现有的副分区从一个文件系统迁移到另一个文件系统,期间不需要重启文件服务器或中断客户端进程。本文介绍了使用现有 IBM AFS 文件服务器设置将副分区迁移到不同文件服务器时出现的问题,以及如何利用 IBM AFS SAN 存储虚拟化功能解决这些问题。

Ms. Indira Indira, 高级软件工程师, IBM

http://www.ibm.com/developerworks/i/authors/Indira_64x80px.jpgIndira Khopde 是位于印度浦那的 IBM 印度软件实验室 Andrew File System (AFS) 团队的高级软件工程师。她在过去三年一直效力于 AFS 团队,从事产品支持和特性开发工作。Indira 拥有浦那大学的计算机硕士学位。



2013 年 12 月 16 日

IBM AFS 概述

AFS 是一个分布式文件系统,允许共同运作主机(客户端和服务器),跨局域网(LAN)和广域网(WAN)高效地共享文件系统资源。

它的一些主要特性包括客户端/服务器架构、管理功能、可扩展性、位置透明性、安全性、可靠性、可移植性等。


IBM AFS 的主要组件

文件服务器:文件服务器是一个 AFS 实体,负责为卷中的特定文件集提供中央磁盘存储卡,并使运行在客户端上的授权用户可以访问这些文件。

卷服务器:卷服务器允许对它所在的机器上的 AFS 卷执行管理任务和检测。这些操作包括卷创建和删除、重命名、转储和恢复、为只读卷修改复制站点列表、创建和增加新的只读卷映象、创建和更新备份卷、列出分区上的所有卷,以及检查卷状态。

Basic OverSeer (BOS) Server :BOS Server 是一个管理工具,它运行在单元(cell)中的所有文件服务器机器上。该服务器在系统重启后按照顺序监视 AFS 代理的健康状况,回答关于它们的状态的请求,并在它们遇到故障时进行重启。它还接受重启、暂停、恢复进程,并安装新服务器二进制文件的命令。

救援服务器(salvager):救援服务器不同于其他 AFS 服务器,因为它只在指定的时间运行。BOS Server 将在文件服务器、卷服务器或两者都发生故障时调用 salvager。salvager 将尝试修复引起故障的磁盘崩溃。作为系统管理员,您还可以在需要时调用 salvager,即使文件服务器或卷服务器都没有出现故障。

卷位置服务器:卷位置服务器将维护和导出卷位置数据库。该数据库会跟踪卷实例所在的服务器或服务器组。它支持的操作包括查询并返回卷位置和状态信息、卷 ID 管理,创建、删除和修改 VLDB 条目。

客户端组件(Venus):AFS 缓存管理由 AFS 客户端(afsd)和一些守护进程实现。它支持本地磁盘缓存和内存缓存。

副分区:副分区是使用物理设备创建的 IBM AIX® 分区。按照惯例,每个分区被命名为 /vicepx,其中,x 是一个或两个英文字母。AFS 分区可以命名为 /vicepa/vicepaa/vicepb/vicepbb,一直到 /vicepz/vicepzz

卷:用于 AFS 存储的磁盘分区不会直接托管各种用户文件或目录。相反,相关的系统目录结构的子树将被放到称为卷的容器中。


现有文件服务器设置

现有文件服务器设置如图 1 所示,其中多个客户端可以访问 Fileserver1 上的卷。

在现有设计中,每个文件服务器都有自己的本地存储,并将在其中创建副分区,卷和数据将存储到本地存储中。

图 1. 现有文件服务器设置
现有文件服务器设置

现有文件服务器设置的问题

现有设置的主要问题是,无论在哪个文件服务器上,只要 AFS 管理员需要执行软件升级,那么他首先需要将该服务器上的所有卷移动到其他服务器。移动内容包括复制这些卷中的所有数据。完成软件升级后,卷将再次移回之前的文件服务器。整个过程非常漫长,可能需要几天才能完成。


SAN 存储虚拟化解决方案

新的 AFS 服务器是更大型的机器,使用虚拟化程度更高的 SAN 系统来保存 AFS 副分区数据。我们现在有两个或更多个 AFS 文件服务器来共享 SAN 中的完整数据存储。

新的配置在多个文件服务器之间共享 SAN 存储。这有助于缩短副分区迁移所需的时间,因为不需要复制数据。

现有 AFS 实现可以做到这一点:进行一些特定于 AFS 的配置,部署文件服务器。但是,在移动副分区时会出现宕机,虽然宕机是有限的,但也需要重启文件服务器,这会影响当前的和运行中的客户端任务。

图 2. 新的基于 SAN 存储的文件服务器设置
新的基于 SAN 存储的文件服务器设置

vos 添加两个新命令即可在不同文件服务器之间移动所有副分区。

方法如下:

vos detachpart -fromserver <machine name of server from where to
detach> -partition <partition names to be moved> [-cell <cell name>]
[-noauth] [-localauth] [-verbose] [-timeout <timeout in seconds >] [-help]

方法如下:

vos attachpart -fromserver <machine name of server from where to
detach> -toserver <machine name of server where to attach> -partition <partition
names to be moved> [-cell <cell name>] [-noauth] [-localauth] [-verbose] [-timeout
<timeout in seconds >] [-help]

vos detachpart 命令将从指定为 fromserver 的文件服务器中分离出分区,而 vos attachpart 命令将 fromserver 文件服务器中的分区连接到 toserver 文件服务器。

因为不需要重启文件服务器,也不需要中断客户端任务,因此迁移过程十分迅速。它们只会获得一个 busy 消息,直到迁移完成。

我们正在为不同文件服务器之间移动单个或多个副分区提供支持。


在不同文件服务器之间移动所有副分区的步骤

我们将 fromserver 称为 fileserver1(其中已安装副分区),而 toserver 则充当 fileserver2(我们希望在其中移动副分区)。并且,我们假设在移动副分区的过程中没有发生 vos 动作。

  1. 向文件服务器发送一个 SIGUSR1 ,将 fileservser1 标记为 VBUSY。

    这样,当前活跃的客户端任务就会开始获得一条 busy 消息,客户端任务将在移动完副分区后继续执行。

  2. 运行以下命令,将分区从 fileserver1 分离出来。
    vos detachpart -fromserver fileserver1 -partition all -cell punetest

    该命令将所有卷标记为脱机状态,并关闭所有打开的文件句柄,这样我们就可以卸载副分区。

  3. 从 fileserver1 中卸载所有 SAN 副分区。
    • 卸载所有副分区,这样就不会在同一时间将分区安装到多个文件服务器上,因为这会造成数据不一致。
    • 将所有卷组设为非活跃状态。为此,可发出 varyoffvg 命令,指定卷组名。
    • 从系统中移除所有卷组的卷组定义。为此,可发出 exportvg 命令。指定卷组名。
    • 运行 lsvg 命令,检查卷组是否被设为非活跃状态,以及卷组定义是否被删除。
  4. 在 fileserver2 上安装所有 SAN 副分区。
    • 将前面导出的卷变为系统已知。为此,可发出 importvg -y 命令,指定卷组名。
    • 激活所有卷组。发出 varyonvg 命令,指定卷组名。
    • 运行 lsvg 命令,检查卷组名是否系统已知,以及卷组是否已激活。
    • 安装所有副分区,使它们可以连接到 fileserver2。
  5. 在 fileserver2 上重启 fs 实例。

    我们需要运行以下命令,以使文件服务器发现新安装的副分区。

    bos restart fileserver2 -instance fs -cell punetest
  6. 运行以下命令将分区连接到 fileserver2。
    vos attachpart -fromserver fileserver1 -toserver fileserver2 -partition all -cell punetest

    该命令破坏了来自旧的文件服务器(fileserver1)的回调,修改了卷位置,从而可以指向新的文件服务器,即 fileserver2,并将所有卷标记为在线。

  7. 向文件服务器发送一个 SIGUSR2,取消 fileserver1 的 VBUSY 标记。

    通过这样做,客户端任务将停止接收 busy 消息并恢复其行为。

  8. 在 fileserver1 上关闭 fs 实例。

    我们需要运行以下命令,以确保客户端访问新的文件服务器 fileserver2 来访问卷。

    bos shutdown -server fileserver1 -instance fs -cell punetest

将分区从测试服务器 pghafs03.rchland.ibm.com 移动到 pghafs02.rchland.ibm.com 的步骤示例

当前 pghafs03 上安装有 6 个副分区(/vicepa 到 /vicepf)。

[root@pghafs03] > mount
node       mounted        mounted over    vfs       date        options
-------- ---------------  ---------------  ------ ------------ ---------------
          /dev/hd4         /                jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/hd2         /usr             jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/hd9var      /var             jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/hd3         /tmp             jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/hd1         /home            jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/hd11admin   /admin           jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /proc            /proc            procfs Mar 11 08:15 rw
          /dev/hd10opt     /opt             jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/livedump    /var/adm/ras/livedump jfs2 Mar 11 08:15 rw,log=/dev/hd8
          /dev/lvvarlog    /var/log         jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/lvafslogs   /usr/afs/logs    jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/lvscm       /opt/IBM/SCM     jfs2   Mar 11 08:15 rw,log=/dev/hd8
          /dev/ramdisk0    /usr/vice/cache  jfs    Mar 11 08:15 rw,nointegrity
          AFS              /afs             afs    Mar 11 08:17 rw
          /dev/fslv00      /testvg          jfs    Mar 19 08:30 rw,log=/dev/loglv06
          /dev/lv01        /vicepa          jfs    May 24 00:47 rw,log=/dev/loglv01
          /dev/lv02        /vicepb          jfs    May 24 00:47 rw,log=/dev/loglv02
          /dev/lv03        /vicepc          jfs    May 24 00:47 rw,log=/dev/loglv03
          /dev/lv04        /vicepd          jfs    May 24 00:47 rw,log=/dev/loglv04
          /dev/lv05        /vicepe          jfs    May 24 00:47 rw,log=/dev/loglv05
          /dev/lv00        /vicepf          jfs    May 24 00:47 rw,log=/dev/loglv00
          [root@pghafs03] >
  1. 向文件服务器发送一个 SIGUSR1,将 pghafs03 手动标记为 VBUSY。
    [root@pghafs03] > ps -ef | grep server
    root  7274520  8781978   0   May 24      -  0:01
    /usr/afs/bin/volserver -log -p 16
    root  8781978        1   0   Mar 12      -  0:06
    /usr/afs/bin/bosserve
    rroot 13041896  8781978   0   May 24      -  0:04
    /usr/afs/bin/fileserver -hr 24 -L -m 1 -cb 128000 -rxpck
    2500 -p 256 -udpsize 1048576 -implicit rl -nojumbo
    -seclog -vc 1200 -s 1800 -l 1200 -b 180
    [root@pghafs03] > kill -SIGUSR1 13041896
    [root@pghafs03] >
    
    FileLog:Mon May 27 00:56:23 2013 Marked fileserver as VBUSY for partition movement
    
    Clients start getting VBUSY message.
    afs: Waiting for busy volume 536894431 (indira.e.1) in
    cell test36.transarc.com
    afs: Waiting for busy volume 536894431 (indira.e.1) in
    cell test36.transarc.com
  2. 运行 vos detachpart -fromserver fileserver1 -partition all -cell punetest 命令,从 pghafs03 分离分区。
    [root@pghafs03] > vos detachpart -fromserver pghafs03
    -partition all -c test36
    vos detachpart: Parsing all partitions...
    vos detachpart: Detaching all partitions from server 
    pghafs03...please check logs for successful completion
    [root@pghafs03] >
    All volumes will be marked as offline.
    [root@pghafs03] > vos exam 536892892 -c  test36
    atd.virt.f.691 536892892 RW 2 
    K Off-line
    pghafs03.rchland.ibm.com /vicepf
    RWrite 536892892   ROnly 0 Backup 0
    MaxQuota 100000 K
    Creation    Tue Mar 19 10:43:01 2013
    Last Update Tue Mar 19 10:48:38 2013
    Last Access Tue Apr 9 06:53:54  2013
    0 accesses in the past day (i.e., vnode references)
    RWrite: 536892892
    number of sites -> 1
    server pghafs03.rchland.ibm.com partition /vicepf RW Site
    [root@pghafs03] >
    FileLog:Mon May 27 00:56:36 2013
    vos detachpart : Making all 
    volumes offline...
    Mon May 27 00:56:36 2013 VShutdown:shutting down on-
    line volumes...
    Mon May 27 00:56:36 2013 VShutdown: complete.
    Mon May 27 00:56:36 2013 vos detachpart : Made all 
    volumes offline...
  3. 从 pghafs03 卸载所有 SAN 副分区。
    • 运行脚本,从 pghafs03 卸载副分区。
    • 确保从 pghafs03 卸载了所有副分区。
  4. 在 pghafs02 上安装所有 SAN 副分区。
    • 运行脚本,安装 pghafs02 的副分区。
    • 确保在 pghafs02 上安装了所有副分区。
  5. 在 pghafs02 上重启 fs 实例。
    [root@pghafs03] > bos restart -server pghafs02 -instance
    fs -c test36
    [root@pghafs03] >
  6. 运行 vos attachpart -fromserver fileserver1 -toserver fileserver2 -partition all -cell punetest 命令,将分区连接到 pghafs02。
    [root@pghafs03] > vos attachpart -fromserver pghafs03
    -toserver pghafs02 -partition all -c test36
    vos attachpart: Parsing all partitions...
    vos attachpart: Attached all partitions to server 
    pghafs02 from server pghafs03... please check logs for 
    successful completion
    [root@pghafs03]>
    FileLog:
    Mon May 27 01:00:45 2013 vos attachpart : breaking all
    callbacks for each and every volumes...
    Mon May 27 01:00:45 2013 VBreakAllCallBack_r: breaking 
    callback on all volumes...
    Mon May 27 01:00:45 2013 VBreakAllCallBack_r: complete.
    Mon May 27 01:00:45 2013 vos attachpart : after breaking 
    all callbacks for each and every volumes...
  7. 向文件服务器发送一个 SIGUSR2,取消 pghafs03 的 VBUSY 标记。
    [root@pghafs03] > ps -ef |grep server
    root 7274520 8781978 0 May 24 - 0:02 
    /usr/afs/bin/volserver -log -p 16
    root 8781978       1 0 Mar 12 - 0:06
    /usr/afs/bin/bosserver
    root 13041896 8781978 0 May 24 - 0:04
    /usr/afs/bin/fileserver -hr 24 -L -m 1 -cb 128000 -rxpck 
    2500 -p 256 -udpsize 1048576 -implicit rl -nojumbo 
    -seclog -vc 1200 -s 1800 -l 1200 -b 180
    [root@pghafs03] >kill -SIGUSR2 13041896
    [root@pghafs03] >
    
    FileLog:
    Mon May 27 01:01:32 2013 Unmarked fileserver from VBUSY 
    as partition movement is done
  8. 关闭 pghafs03 上的 fs 实例。
    [root@pghafs03] > bos shutdown -server 
    pghafs03 -instance fs -c test36
    [root@pghafs03] > ps -ef| grep server
    root 8781978 1 0 Mar 12 - 0:06 
    /usr/afs/bin/bosserver
    [root@pghafs03]>

错误恢复

虽然这里要求在移动副分区期间不应发生任何 vos 动作,但是万一出现错误,那么可以通过以下办法进行恢复。

需要进行恢复的点有很多。本节将了解其中一些恢复点。

案例 1

  • 案例 1:假设我们希望在运行步骤 2 后恢复

    此时 fileserver1 处于 busy 模式,所有卷被标记为脱机。要从这一点进行恢复,可以执行以下任一步骤:

    • 运行 bos restart fileserver1 -instance fs -cell punetest 命令。
    • 运行 vos attachpart -fromserver fileserver1 -toserver fileserver1 -partition all -cell punetest 命令,也就是说,将信号发送给接收方和发送方文件服务器是相同的,通过向 fileserver1 发送一个 SIGUSR2,取消对 fileserver1 的 busy 模式的标记。

    您可以执行以下任一步骤,将卷再次标记为在线。

  • 案例 2:假设我们希望在运行步骤 3 后执行恢复

    此时 fileserver1 处于 busy 模式下,所有卷均脱机,我们已卸载了分区。要从这一点恢复,我们可以再次安装分区并执行 案例 1 中提到的任意一个步骤。

  • 案例 3:假设我们希望在运行步骤 4 后执行恢复

    此时 fileserver1 处于 busy 模式下,所有卷均处于脱机状态,我们已从 fileserver1 卸载了分区,并挂载了 fileserver2 的分区。要从这一点恢复,可以执行以下任意步骤之一:从 fileserver2 卸载分区,将它们安装回 fileserver1,然后执行 案例 1 中提到的两个步骤中的任意一个。或者,执行剩余的步骤(步骤 5 到步骤 8)。

    • 从 fileserver2 卸载分区,挂载回 fileserver1,执行 案例 1 中提到的两个步骤中的任意一个。
    • 或者,执行剩余的步骤(步骤 5 到步骤 8)。

结束语

IBM AFS 的 SAN 存储虚拟化使得管理员能够监视有硬件问题或高负荷下运行的文件服务器的健康状况,然后非常轻松地在文件服务器之间迁移副分区,客户端任务不会受到影响,也不需要重启文件服务器。

参考资料

学习

  • 参考有关 varyoffvg 命令的信息。
  • 参见 IBM AFS for UNIX 在线问答
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=957427
ArticleTitle= IBM AFS 副分区虚拟化
publish-date=12162013