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

2018-03-22 14:42:07 浏览数 (1)

作者说明:

针对虚拟化中存储池的配置,笔者将书写一个系列作品,介绍从PowerVM到KVM再到Docker中存储池的配置与调优。似乎看起来三种技术没有什么关联性,但IT技术本质上实现原理一致的地方很多。理解了PowerVM,理解X86虚拟化不存在障碍,理解了Wpar,去理解docker的原理也不会太困难。

具体而言, 第一篇引用我在2013年的作品,介绍PowerVM中存储池的配置和调优,由于公众号字数限制,将分为三个子篇阐述。第二篇将讲述在KVM中,存储池的配置和调优。第三篇将讲述在Docker中,存储持久化层的配置和调优。

前言

在 PowerVM 的发展史上,Shared Storage Pool 并不是一个全新的概念。但是由于之前版本的 PowerVM 中 SSP 的功能不是十分强大,所以用的不是很多。相比之下,Storage Pool 使用的非常广泛,常见于各类配置手册中,由于命名类似,不少工程师将 Storage Pool 与 Shared Storage Pool 混淆。为了彻底解释清楚这两个技术的区别以及配置方法,本文在前面将会介绍 Storage Pool 的概念、配置方法以及 Storage Pool 和 Shared Storage Pool 的区别。

Storage Pool 的概念和管理

在介绍 Shard Storage Pool 之前,需要先讲一下 Storage Pool 的概念。

Storage Pool 是一个存储池的概念,它有两种实现方式,基于文件和基于卷组。Storage Pool 可以由 VIOS 上的本地 SAS 盘或者存储映射过来的存储 LUN 进行创建。在存储池中,通过创建虚拟盘(有瘦体和胖体两种,相关概念本文后续会有详细介绍),通过 VIOS 和 VIOC 之间创建的 VSCSI 通路,将虚拟盘映射给 VIOC,向 VIOC 提供系统盘或者数据盘。一个 Storage Pool 只能由一个 VIOS 管理,不能被多个 VIOS 管理。而不能被多个 VIOS 管理,这点是 Storage Pool 和 Shared Storage Pool 最大的区别之一。

基于卷组方式的 Storage Pool 实际上是创建一个卷组,然后在卷组中创建逻辑卷并且映射给 VIOC。在 VIOS 系统装完以后,rootvg 就是一个默认的存储池。

代码语言:javascript复制
 $lssp 
 Pool              Size(mb)   Free(mb)  Alloc Size(mb)    BDs Type     
 rootvg              139776     114688             256      0 LVPOOL
代码语言:javascript复制
 $lspv |grep -i rootvg 
 hdisk11          00f6b486cfe494d1                     rootvg           active

我们可以在这个存储池中创建虚拟盘,通过 VSCSI 的方式将其映射给 VIOC,作为 VIOC 的系统盘,有关具体的配置方法,本文后续会有详细说明。

常见的 VSCSI 高可用方案

在目前现有的 VSCSI 高可用方案中,通常有两种。一种是将一个存储的 LUN 映射给两个(多个)VIOS,然后两个(多个)VIOS 以 PV 的方式,将这个 LUN 映射给一个 VIOC,VIOC 则通过 MPIO,实现磁盘的路径聚合,从而实现 VSCSI 高可用。这种高可用的实现方式可以参照下示意图:

图 1.VSCSI 高可用方案 1

在上图的配置方式中,在 VIOC 上用 lspath 进行查看,可以看到一个磁盘对应多个 VSCSI 通路,例如:

代码语言:javascript复制
 # lspath |grep -i hdisk0 
 Enabled hdisk0 vscsi0
 Enabled  hdisk0 vscsi1

默认情况下,磁盘 I/O 优先从 Vscsi 优先级高的 VSCSI 通路走(默认情况下两条路径优先级相同,都是 1)当一个 VIOS 出现问题,所有的磁盘 I/O 将会切换到第二个 VIOS 的 VSCSI 上,从而实现 VSCSI 的高可用。

如果打算用 Storage Pool 实现高可用,那么在两个 VIOS 上分别创建两个 Storage Pool(可以是 VIOS 本地盘或者存储磁盘),然后创建一个虚拟盘(可以基于 lv 或者文件,通常是基于 lv 的方式),映射给 VIOC,VIOC 通过镜像的方式,将两个 VIOS 影映射过来的两个虚拟盘做成镜像,以实现 VSCSI 高可用。)这种高可用的实现方式可以参照下面示意图:

图 2.VSCSI 高可用方案 2

在上图中,任意一个 VIOS 出现宕机,都只会是 VIOC 上的一个磁盘出现问题,由于 VIOC 端 hdisk 磁盘做了镜像,因此不会引起业务中断和数据丢失。

基于卷组的 Storage Pool

创建基于卷组的 Storage Pool 和在 VIOS 上直接创建一个 vg 达到的效果是相同的,命令行使用下面两者之一即可:

代码语言:javascript复制
mkvg -vg weixinyuvgpool hdisk10

或者

代码语言:javascript复制
mksp -f weixinyuvgpool hdisk10

 $mksp -f weixinyuvgpool hdisk10 
 weixinyuvgpool

通过上面的命令,名为 weixinyu 的 storage pool 就创建成功了,里面有一块磁盘,hdisk10。

查看 storage pool,已经创建成功:

代码语言:javascript复制
 $lssp 
 Pool              Size(mb)   Free(mb)  Alloc Size(mb)    BDs Type     
 rootvg              139776      88832             256      4 LVPOOL     
 weixinyuvgpool    139904     139904             128      0 LVPOOL   
 filestoragepool       1016        985             256      1 FBPOOL     
 weixinyu               244        243             256      0 FBPOOL
代码语言:javascript复制
 $lspv |grep -i weixinyuvgpool 
 hdisk10          00f6b486cfe49436                     weixinyuvgpool   active

在默认的 rootvg storage pool 中创建一个 lv:

代码语言:javascript复制
$mklv -lv lvtest1 rootvg 10G
 lvtest1

确认被映射 VIOC 的 VSCSI 设备:

代码语言:javascript复制
 $lsdev -vpd|grep vhost 
  vhost0           U8233.E8B.06B486P-V6-C11                                        
 Virtual SCSI Server Adapter

然后新创建将 lv 映射给 VIOC:

代码语言:javascript复制
$mkvdev -vdev lvtest1 -vadapter vhost0 -devStoragePoolTestStoragePoolTestAvailable

在 VIOC 上用 cfgmgr 扫描后,可以识别到新增加的磁盘。

代码语言:javascript复制
 # bootinfo -s hdisk4 
 10240

基于文件的 Storage Pool

基于文件的 Storage Pool 必须创建在基于一个卷组的父存储池之上。

创建基于文件的 storage pool 命令如下:

代码语言:javascript复制
mksp -fb weixinyufilebase -sp rootvg -size 1000M

也可用通过 VIOS 上的 cfgassist 命令进行创建:

进行确认,名为 file base storage 的 storage pool 已经创建成功: $lssp Pool Size(mb) Free(mb) Alloc Size(mb) BDs Type rootvg 139776 100352 256 3 LVPOOL filestoragepool 1016 1015 256 0 FBPOOL 然后查看 rootvg 中的 lv 设备: $lsvg -lv rootvg |grep -i file filestoragepool jfs2 4 4 1 open/syncd /var/vio/storagepools/filestoragepool # df -g |grep -i filestoragepool /dev/filestoragepool 1.00 0.99 1% 4 1% /var/vio/storagepools/filestoragepool 可以看到,基于文件的存储池实际上是 rootvg 的一个文件系统。 下面,我们在基于文件的存储池中创建一个基于文件的虚拟盘,并且映射给 VIOC: $mkbdsp -sp filestoragepool 30m -bd weixinyufile1 -vadapter vhost0 Creating file "weixinyufile1" in storage pool "filestoragepool". Assigning file "weixinyufile1" as a backing device. vtscsi5 Available weixinyufile1 在 VIOS 上查看 VSCSI 映射关系: $lsmap -all |grep -i weixinyufile1 Backing device /var/vio/storagepools/filestoragepool/weixinyufile1 新创建的基于文件的虚拟盘,就是基于文件的 storage pool 中的一个文件: # cd /var/vio/storagepools/filestoragepool # ls -al total 61448 drwxr-xr-x 3 root system 256 Jan 14 19:24 . drwxr-xr-x 4 root staff 256 Jan 14 18:49 .. -rw-r--r-- 1 root staff 176 Jan 14 19:24 .weixinyufile1 drwxr-xr-x 2 root system 256 Jan 14 18:49 lost found -rw-r--r-- 1 root staff 31457280 Jan 14 19:24weixinyufile1

Storage Pool 简单的管理方法

Storage Pool 和虚拟盘的配置除了使用命令行的方式 , 还有比较简单的维护方法。如果仅仅是创建、查看、扩容、减小容量的话,可以使用 VIOS 中的 cfgassist 工具或者使用 HMC 管理。

我们先看一下 cfgassist 工具管理:

在 VIOS 上执行 cfgassist-Storage Pool。

在界面中,我们可以查看 Storage Pool 中的内容、创建 Storage Pool、修改 Storage Pool(增加或者减小 Storage Pool 的空间)。但需要注意的是,通过 cfgassist 工具,只能创建 Storage Pool,而不能创建“虚拟盘”。 第二个方法是,通过 HMC,对 Storage Pool 进行创建和配置。使用这个方法的好处是除了可以创建和维护 Storage Pool,还可以创建和映射虚拟盘: 首先登陆 HMC,选择一台装有 VIOS 的 Power 服务器,点击“虚拟资源”中的“虚拟存储器管理”

图 3.HMC 上的虚拟资源管理

在接下来的界面中,选择要创建 Storage Pool 的 VIOS(此处也说明一个 storage pool 只能基于一个 VIOS),点击“查询”:

图 4. 点击“查询”

我们可以看到已有的存储池,即 VIOS 上的 rootvg:

图 5. 查看存储池

接下来,点击“创建虚拟盘”,并且映射给 VIOC:

图 6.HMC 上创建虚拟盘

我们可以看到,创建虚拟盘的时候,我们除了可以看到默认的 Storage Pool,还可以看到 Shared Storage Pool(也就是说,在 SSP cluster 创建以后,后续的 SSP 的管理也可以由 HMC 界面进行管理)

图 7. 创建虚拟盘

我们选择 rootvg Storage Pool 中的空间,映射给 weixinyuvioc。点击“确认”

图 8. 创建虚拟盘

虚拟盘已经识别到,并且映射给了 weixinyuvioc1 分区:

图 9. 虚拟盘创建并且映射成功

从上图中可以看到,虚拟盘已经创建成功,并且映射给了指定的 VIOC。

在 VIOC 上执行 cfgmgr,可以扫描出现新创建的磁盘设备。

0 人点赞