从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第2子篇)

时间:2022-05-05
本文章向大家介绍从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第2子篇),主要内容包括Shared Storage Pool 的概念、Shared Storage Pool 的新特性、Shared Storage Pool 的管理管理方式、Shared Storage Pool 的配置、创建和配置逻辑单元、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

Shared Storage Pool 的维护管理

Shared Storage Pool 的概念

共享存储池是一个 SAN 存储设备的池,这些设备可以跨多个 VIO 服务器。共享存储池是由 2 部分构成的:1.VIO 服务器群集;2. 一个带有全局命名空间的分布式数据对象库。分布式数据对象库使用专门为 VIO 服务器存储虚拟化功能开发的群集文件系统。

当 VIO 服务器启用共享存储池的时候,VIO 服务器通过逻辑单元(logical units)来使用存储池中的空间,并将逻辑单元映射给客户端分区使用。逻辑单元是一个基于文件的存储设备。在客户端分区则将其识别为一个虚拟 SCSI 磁盘。逻辑单元包含了虚拟块和一个虚拟块地址空间。共享存储池使用的物理卷被视为一些物理块的聚合,这些物理块通过物理卷上的元数据进行管理。共享存储池中的物理卷包含了物理块和一个物理块地址空间。系统通过 VATL(Virtual Address Translation Look aside) 来处理从虚拟块地址到物理块地址的转换。

图 10.SSP 逻辑架构图

相对于 Storage Pool, Shared Storage Pool 有以几个特征:

  1. SSP 中的磁盘只能是存储提供的,而不能是 VIOS 的本地盘。
  2. SSP 中的磁盘不可删除(只能被替代)。
  3. SSP 的空间不能减少。
  4. SSP 可用空间的增加 , 只能通过两种方式:1. 向 SSP 中增加新的 PV。2. 将 SSP 中现有的磁盘用容量更大的一块磁盘替代(替代的盘的容量必须大于或者等于被替代磁盘的容量)。

Shared Storage Pool 的新特性

从 VIOS2.2.2.0 开始,SSP 的功能有所增强,体现在以下 2 个方面:

  1. 一个 SSP Cluster 支持的 VIOS 节点的数量由 1 个增加到 16 个、SSP 中一个 VIOS 可以支持的 VIOC 的数量由 1 个增加到 200 个,这使 SSP 能够跨物理服务器,为多个 VIOC 提供服务。
  2. 一个 SSP 可支持的最大物理磁盘数量由 1 个增加到 1024 个、一个 SSP 支持的单个磁盘的容量由 5GB 增加到 16TB、一个 SSP 支持的总容量由 10GB 增加到 512TB、每个 virtual disk 的支持最大容量由 1GB 增加到 4TB、一个 SSP 支持的 Virtual disks 最大数量由 1 个增加到 8192 个,这都使 SSP 能够提供的存储空间由以前 GB 的数量级产生了质变化。
表 1.SSP 的新特性

Shared Storage Pool 的管理管理方式

Shared Storage Pool 管理方式有几个:

  1. 通过 System Director 进行图形化管理
  2. 通过 VIOS 上的 cfgassist 工具进行管理
  3. 通过 VIOS 上的命令行进行管理

通过 System Director 对 SSP 进行管理操作简单,直接点击鼠标即可完成 SSP cluster 的创建,如下图步骤(以下只列出关键步骤的截图以作介绍。)

首先在 System Director 中选中一个 VIOS,在下拉菜单中选择“System Configuration”,然后选择“Create Shard Storage Pool”

图 11.System Director 创建 SSP

输入 SSP Cluster 的名字:

图 12.System Director 创建 SSP

选择 SSP cluster 的 Repository Disk。

图 13.System Director 创建 SSP

通过 System Director 对 SSP 进行管理优点很明显,但是需要客户的虚拟化环境有 System Director 环境,因此并不适合所有情况。

下面,我们介绍使用 VIOS 上的 cfgssist 工具进行管理。

在 VIOS2.2.2.0 中 , 在 VIOS 中可以使用菜单方式来配置 SSP cluster, 其优点是配置和管理非常方便。缺点是不利于客户实现脚本化管理。

在 VIOS 中执行 cfgassist 命令:

$cfgassist

选择“Shared storage Pools”,然后选择“Manage cluster and VIOS Nodes”

在接下来的界面里,就可以配置 SSP cluster 了:

SSP cluster 创建成功以后,可以给 SSP cluster 增加 VIOS 节点:

在下图中,依次给 SSP cluster 增加其余的 VIOS。

下一步的操作就是创建逻辑单元并映射给 VIOC: 首先选择“Manage Logical Units in storage pool”

选择“Create and Map Logical Unit”

然后选择对应的 SSP cluster:weixinyuSSP,对应的 SSP:SSP1。 创建一个 1000MB 的逻辑单元:

将光标移动到“Virtual Server Adapter to Map”,按 F4 键,可以列出已经的 vhosts 设备:

在我的试验中,vhosts0 和 vhost1 分别指向两个 VIOC。如果想将这个逻辑单元映射给两个 VIOC,那就分别添映射两次,这样两个 VIOC 就都能识别到同一个磁盘了。 在本试验中,有 4 个 VIOS,如果想让 VIOC 上的一个磁盘有 4 条路径,就还需要在另外三个 VIOS 上执行相同的映射操作。 由于本文主要介绍以命令行方式配置 SSP cluster,因此关于菜单配置,我们不再详细描述。 下面我将主要介绍使用命令行方式配置 SSP cluster 并且进行管理。

Shared Storage Pool 的配置

创建和配置 cluster

在试验中,有四个 VIOS,名字分别为:VIOS1,VIOS2,VIOS3,VIOS4,VIOS 的版本均为 VIOS2.2.2.0:

首先将 4 个 VIOS 的 /etc/hosts 文件中配置好四个 VIOS 之间相互的解析关系:

 172.16.24.31    vios1 
 172.16.24.32    vios2
 172.16.26.31    vios3 
 172.16.26.32    vios4
 $ioslevel 
 2.2.2.0

配置一个 SSP Cluster,确保四个 VIOS 节点可以识别同一个物理硬盘,以作为 Repository Disk:

 $hostname 
 vios1 
 $lspv |grep -i fd79b 
 hdisk5          00f6b486eb3fd79b               None
 $hostname 
 vios2 

 $lspv |grep -i fd79bHdisk5           00f6b486eb3fd79b                     None

创建一个 SSP Cluster,命名为:weixinyuSSP,Repository Disk 使用 hdisk5,SSP 名字命名为 SSP1,SSP 中加入一个数据磁盘 hdisk6。

$cluster -create -clustername weixinyuSSP -repopvs hdisk5 -spname SSP1 
-sppvs hdisk6 -hostname vios1
 Cluster weixinyuSSP has been created successfully.

查看新创建的 SSP cluster:

 $cluster -list 
 CLUSTER_NAME:  weixinyuSSP
 CLUSTER_ID:      1742e92c5bba11e2a25d00215e8ab240
 $lssp -clustername weixinyuSSP 
 POOL_NAME:       SSP1 
 POOL_SIZE:       65536 
 FREE_SPACE:      64373
 TOTAL_LU_SIZE:   0 
 OVERCOMMIT_SIZE: 0 
 TOTAL_LUS:       0 
 POOL_TYPE:       CLPOOL 
 POOL_ID:         FFFFFFFFAC10181F0000000050EFB476

接下来,在第一个 VIOS 上,将其余 3 个 VIOS 依次加入 SSP cluster 中:

$cluster -addnode -clustername weixinyuSSP -hostname vios2Partition vios2 has been added to the weixinyuSSP cluster.
		
 $cluster -addnode -clustername weixinyuSSP -hostname vios3 
 Partition vios3 has been added to the weixinyuSSP cluster. 

 $cluster -addnode -clustername weixinyuSSP -hostname vios4 
 Partition vios4 has been added to the weixinyuSSP cluster.

查看 cluster 中节点信息:

 $cluster -status -clustername weixinyuSSP                 
 Cluster Name         State 
 weixinyuSSP        OK
			Node Name           MTM           Partition Num  State  Pool State 
 vios1            8233-E8B0206B486P         6  OK     OK
 vios3            8233-E8B0206B486P         8  OK     OK  
 vios4            8233-E8B0206B486P         9  OK     OK  
 vios2            8233-E8B0206B486P         7  OK     OK

列出 SSP 中已有的磁盘:

 $lspv -clustername weixinyuSSP -sp SSP1 
 PV NAME       SIZE(MB)    PVUDID                          
 hdisk4           65644       26112001738004E741E8A072810XIV03IBMfcp

列出 VIOS 上可被添加到 SSP 的磁盘:

 $lspv -clustername weixinyuSSP -capable 
 PV NAME          SIZE(MB)    PVUDID                             hdisk0           16411       26112001738004E741E82072810XIV03IBMfcp
 hdisk1           16411       26112001738004E741E83072810XIV03IBMfcp 
 hdisk2           65644       26112001738004E741E88072810XIV03IBMfcp 
 hdisk5           65644       26112001738004E741E8B072810XIV03IBMfcp

然后,将四块磁盘全部加入到 SSP1 中:

 $chsp -add -clustername weixinyuSSP -sp SSP1 hdisk0 
 Current request action progress: % 5 
 Current request action progress: % 5 
 Current request action progress: % 80 
 Current request action progress: % 100 
 $chsp -add -clustername weixinyuSSP -sp SSP1 hdisk1

 $chsp -add -clustername weixinyuSSP -sp SSP1 hdisk2 

 $chsp -add -clustername weixinyuSSP -sp SSP1 hdisk5 

再次进行验证,四个磁盘已经加入到 SSP 中:

 $lspv -clustername weixinyuSSP -sp SSP1 
 PV NAME          SIZE(MB)    PVUDID                             hdisk4           65644       26112001738004E741E8A072810XIV03IBMfcp
 hdisk0           16411       26112001738004E741E82072810XIV03IBMfcp 
 hdisk1           16411       26112001738004E741E83072810XIV03IBMfcp 
 hdisk2           65644       26112001738004E741E88072810XIV03IBMfcp 
 hdisk5           65644       26112001738004E741E8B072810XIV03IBMfcp

SSP 的可用空间已经增加:

 $lssp -clustername weixinyuSSP 
 POOL_NAME:       SSP1 
 POOL_SIZE:       229248 
 FREE_SPACE:    225302
 TOTAL_LU_SIZE:   0 
 OVERCOMMIT_SIZE: 0 
 TOTAL_LUS:       0 
 POOL_TYPE:       CLPOOL 
 POOL_ID:         FFFFFFFFAC10181F0000000050EFB476

创建和配置逻辑单元

逻辑单元(logical unit)源于 SSP,为 VIOC 提供磁盘空间。VIOS 可以将一个逻辑单元映射给一个或者多个 VIOC。

逻辑单元有两种类型:

瘦体:

  • 这种类型是默认的逻辑单元类型
  • 只有当 VIOC 有空间需求的时候才进行分配。
  • 只有当 VIOC 真正使用逻辑单元的空间时,SSP 中的可用空间才会减少

胖体:

  • 当将逻辑单元映射给 VIOC 的时候,空间就会分配。
  • 当讲逻辑单元分配给 VIOC 的时候,SSP 中的可用空间立即减少。

下面,我们将创建逻辑单元,默认的类型是瘦体,创建以后瘦体的逻辑单元 weixinyuvioc1 后,SSP1 的可用空间并未减少:

 $lssp -clustername weixinyuSSP 
 POOL_NAME:       SSP1 
 POOL_SIZE:       229248 
 FREE_SPACE:    225302
 TOTAL_LU_SIZE:   0 
 OVERCOMMIT_SIZE: 0 
 TOTAL_LUS:       0 
 POOL_TYPE:       CLPOOL 
 POOL_ID:         FFFFFFFFAC10181F0000000050EFB476
 $mkbdsp -clustername weixinyuSSP -sp SSP1 12G -bd weixinyuvioc1 
 Lu Name:weixinyuvioc1 
 Lu Udid:75c8e72e28845ce65112e27b3822891f
 $lssp -clustername weixinyuSSP 
 POOL_NAME:       SSP1 
 POOL_SIZE:       229248 
 FREE_SPACE:    225302
 TOTAL_LU_SIZE:   12288 
 OVERCOMMIT_SIZE: 0 
 TOTAL_LUS:       1 
 POOL_TYPE:       CLPOOL 
 POOL_ID:         FFFFFFFFAC10181F0000000050EFB476

如果想创建胖体逻辑单元,需要指定参数 -thick:

 $mkbdsp -clustername weixinyuSSP -sp SSP1 11G -bd weixinyuThickvioc1 -thick 
 Lu Name:weixinyuThickvioc1 
 Lu Udid:23fdaf97a4fd76977155eb23e140f877

胖体的逻辑单元创建以后,SSP 的可用空间会立即减少:

 $lssp -clustername weixinyuSSP 
 POOL_NAME:       SSP1 
 POOL_SIZE:       229248FREE_SPACE:    214037
 TOTAL_LU_SIZE:   23552 
 OVERCOMMIT_SIZE: 0 
 TOTAL_LUS:       2 
 POOL_TYPE:       CLPOOL 
 POOL_ID:         FFFFFFFFAC10181F0000000050EFB476

查看已经创建好的逻辑单元:

$lssp -clustername weixinyuSSP -sp SSP1 -bd 
 Lu Name          Size(mb)    ProvisionType      %Used Unused(mb)  Lu UdidweixinyuThickvioc111264       THICK        100%  0     
                                             23fdaf97a4fd76977155eb23e140f877weixinyuvioc1    12288       THIN          0% 12288    
                                             75c8e72e28845ce65112e27b3822891f

接下来,我们将已将创建好的两个逻辑单元映射给 VIOC weixinyuvioc1,用于其系统安装和数盘使用。

首先,创建一个 VIOC,这个 VIOC 应该有 4 个 VSCSI 设备,分别指向 4 个 VIOS。

图 14.HMC 查看 VSCSI 设备

分别在四个 VIOS 上查看 VSCSI 对应的 VSCSI 设备:

 $lsmap -all 
 SVSA            Physloc                                      Client Partition ID 
 --------------- -------------------------------------------- ------------------
 vhost0          U8233.E8B.06B486P-V6-C11                     0x00000001 

 VTD             NO VIRTUAL TARGET DEVICE FOUND

将已经创建好的两个逻辑单元映射给 vhost0:

$mkbdsp -clustername weixinyuSSP -sp SSP1 -bd weixinyuvioc1 -vadapter vhost0
 Assigning file "weixinyuvioc1" as a backing device. 
 VTD:vtscsi0 

 $mkbdsp -clustername weixinyuSSP -sp SSP1 -bd weixinyuThickvioc1 -vadapter vhost0 
 Assigning file "weixinyuThickvioc1" as a backing device. 
 VTD:vtscsi1

验证映射关系:

 $lsmap -all 
 SVSA            Physloc                                      Client Partition ID 
 --------------- -------------------------------------------- ------------------ 
 vhost0          U8233.E8B.06B486P-V6-C11                     0x00000001 

 VTD                   vtscsi0
 Status                Available 
 LUN                   0x8100000000000000 
 Backing device        weixinyuvioc1.75c8e72e28845ce65112e27b3822891f 
 Physloc                
 Mirrored              N/A 

 VTD                   vtscsi1 
 Status                Available 
 LUN                   0x8200000000000000 
 Backing device        weixinyuThickvioc1.23fdaf97a4fd76977155eb23e140f877 
 Physloc                
 Mirrored              N/A

在 VIOS1 上对逻辑单元映射完毕后,还要依次在 VIOS2,VIOS3,VIOS4 上同样执行映射的命令。

我们也可以使用一条命令,完成逻辑单元的创建和映射:

 $mkbdsp -clustername weixinyuSSP -sp SSP1 11G -bd weixinyuThick2vioc1 
 -vadapter vhost0 -thick 
 Lu Name:weixinyuThick2vioc1 
 Lu Udid:1f9a81e644769bb142225f04b31e0902 

 Assigning file "weixinyuThick2vioc1" as a backing device.
 VTD:vtscsi2

但是,使用上面这条明令时,需要注意的是,在第一个 VIOS 上执行这条命令以后,在其他 VIOS 上应该仅执行映射 ( 不必包含创建的命令 ) 的命令,否则将会重复创建逻辑单元。

当在四个 VIOS 上均对已有的两个逻辑单元完成映射以后,就可以对 weixinyuvioc1 进行操作系统安装了,VIOS 系统安装成功以后,将会识别到两块磁盘,每块磁盘都有四条 VSCSI 路径。

 # lspv 
 hdisk0          00f6b4860e44f5db                    rootvg          active
 hdisk1          none                                None
 # lspath |grep -i hdisk0 
 Enabled hdisk0 vscsi0 
 Enabled hdisk0 vscsi1 
 Enabled hdisk0 vscsi2 
 Enabled hdisk0 vscsi3 

 # lspath |grep -i hdisk1 
 Enabled hdisk1 vscsi0 
 Enabled hdisk1 vscsi1 
 Enabled hdisk1 vscsi2 
 Enabled hdisk1 vscsi3

上面结果可以看出,每个磁盘有 4 条路径,分别对应 4 个 VIOS 的 5 条 VSCSI 通路。

如果我们想删除一个逻辑单元,可以参照如下的步骤:

首先在 VIOS 上查看想要删除的逻辑单元:

 $lssp -clustername weixinyuSSP -sp SSP1 -bd 
 Lu Name          Size(mb)    ProvisionType      %Used Unused(mb)  Lu Udid 
 weixinyuThick2vioc1  11264       THICK               100%  0   
 e2c9a6addf093a529de23a9f02adf651
 weixinyuThickvioc1  11264       THICK               100%  0     
 23fdaf97a4fd76977155eb23e140f877 
 weixinyuvioc1      11264       THICK               100% 0     
 2fe33e6c4bd00b977951b19e0c598770 
 weixinyuvioc1      12288       THIN                 25% 9133     
 75c8e72e28845ce65112e27b3822891f

删除逻辑单元时,指定逻辑单元的 ID 号:

 $rmbdsp -clustername weixinyuSSP -sp SSP1 -luudid 2fe33e6c4bd00b977951b19e0c598770 
 Logical unit  with udid "2fe33e6c4bd00b977951b19e0c598770" is removed.

确认 ID 号为“2fe33e6c4bd00b977951b19e0c598770”的逻辑单元已经删除成功:

 $lssp -clustername weixinyuSSP -sp SSP1 -bd                                       
 Lu Name          Size(mb)    ProvisionType      %Used Unused(mb)  Lu Udid 
 weixinyuThick2vioc1  11264       THICK               100%  0      
 e2c9a6addf093a529de23a9f02adf651 
 weixinyuThickvioc1  11264       THICK               100%  0      
 23fdaf97a4fd76977155eb23e140f877 
 weixinyuvioc1      12288       THIN                 25% 9133     
 75c8e72e28845ce65112e27b3822891f

验证 SSP cluster 的稳定性初始情况,SSP cluster 的四个节点都是正常状态,SSP cluster 的状态也是正常的:

$cluster -status -clustername weixinyuSSP
 Cluster Name         State 
 weixinyuSSP        OK
		
    Node Name        MTM           Partition Num  State  Pool State 
    vios1            8233-E8B0206B486P         6  OK     OK  
    vios3            8233-E8B0206B486P         8  OK     OK  
    vios4            8233-E8B0206B486P         9  OK     OK  
 vios2            8233-E8B0206B486P         7  OK     OK

停掉一个 VIOS,集群处于降级状态:

 $clstartstop -stop -n weixinyuSSP -m vios2 

$cluster -status -clustername weixinyuSSP
 Cluster Name         State 
 weixinyuSSP        DEGRADED
			
    Node Name        MTM           Partition Num  State  Pool State 
    vios1            8233-E8B0206B486P         6  OK     OK  
    vios3            8233-E8B0206B486P         8  OK     OK  
    vios4            8233-E8B0206B486P         9  OK     OK  
    vios2            8233-E8B0206B486P         7  DOWN

再停掉两个 VIOS,集群依然处于降级状态:

 $clstartstop -stop -n weixinyuSSP -m vios3 
 $clstartstop -stop -n weixinyuSSP -m vios4 
 $ cluster -status -clustername weixinyuSSP 
 Cluster Name         State 
 weixinyuSSP        DEGRADED
	
    Node Name        MTM           Partition Num  State  Pool State 
    vios1            8233-E8B0206B486P         6  OK     OK  
    vios3            8233-E8B0206B486P         8  DOWN 
    vios4            8233-E8B0206B486P         9  DOWN 
    vios2            8233-E8B0206B486P         7  DOWN

此时,登陆 VIOC,对磁盘进行读操作:

 # dd if=/dev/rhdisk0 of=/dev/null 
 14730+0 records in 
 14730+0 records out 
 # dd if=/dev/rhdisk1 of=/dev/null 
 5279+0 records in 
 5279+0 records out 
 # dd if=/dev/rhdisk2 of=/dev/null 
 4958+0 records in 
 4958+0 records out

然后再次进行路径查看,可以看到每个磁盘的 4 条路径中已经有三条处于 failed 状态:

 # lspath 
 Enabled hdisk0 vscsi0 
 Enabled hdisk1 vscsi0 
 Failed  hdisk1 vscsi1 
 Enabled hdisk0 vscsi1 
 Failed  hdisk1 vscsi2 
 Failed  hdisk1 vscsi3 
 Enabled hdisk0 vscsi2 
 Enabled hdisk2 vscsi0 
 Failed  hdisk2 vscsi1 
 Enabled hdisk0 vscsi3 
 Failed  hdisk2 vscsi2 
 Failed  hdisk2 vscsi3

处于正常状态那条路径 VSCSI,是 VIOS1 提供的。

将停止的 VIOS 再次启动:

$clstartstop -start -n weixinyuSSP -m vios2
 $clstartstop -start -n weixinyuSSP -m vios3 
 $clstartstop -start -n weixinyuSSP -m vios4

SSP cluster 恢复为正常状态:

 $cluster -status -clustername weixinyuSSP 
 Cluster Name         State 
 weixinyuSSP        OK
		
    Node Name        MTM           Partition Num  State  Pool State 
    vios1            8233-E8B0206B486P         6  OK     OK  
    vios3            8233-E8B0206B486P         8  OK     OK  
    vios4            8233-E8B0206B486P         9  OK     OK  
    vios2            8233-E8B0206B486P         7  OK     OK