从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第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 就是一个默认的存储池。

 $lssp 
 Pool              Size(mb)   Free(mb)  Alloc Size(mb)    BDs Type     
 rootvg              139776     114688             256      0 LVPOOL
 $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 通路,例如:

 # 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 达到的效果是相同的,命令行使用下面两者之一即可:

mkvg -vg weixinyuvgpool hdisk10

或者

mksp -f weixinyuvgpool hdisk10

 $mksp -f weixinyuvgpool hdisk10 
 weixinyuvgpool

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

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

 $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
 $lspv |grep -i weixinyuvgpool 
 hdisk10          00f6b486cfe49436                     weixinyuvgpool   active

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

$mklv -lv lvtest1 rootvg 10G
 lvtest1

确认被映射 VIOC 的 VSCSI 设备:

 $lsdev -vpd|grep vhost 
  vhost0           U8233.E8B.06B486P-V6-C11                                        
 Virtual SCSI Server Adapter

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

$mkvdev -vdev lvtest1 -vadapter vhost0 -devStoragePoolTestStoragePoolTestAvailable

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

 # bootinfo -s hdisk4 
 10240

基于文件的 Storage Pool

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

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

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,可以扫描出现新创建的磁盘设备。

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2016-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据

Kafka详细的设计和生态系统

Kafka 的核心是经纪人,主题,日志,分区和集群。核心也包括像 MirrorMaker 这样的相关工具。前面提到的是 Kafka,因为它存在于 Apache ...

1K1
来自专栏技术小黑屋

快速高效调试移动端前端代码

通常,前端调试输出一些日志信息可以使用alert或者console, 当然在Desktop机器上很容易,很多浏览器都支持,如果是在手机上,可能比较麻烦,怎么得到...

1651
来自专栏FreeBuf

甲方安全中心建设:代码审计系统

纵观甲方的安全体系建设,最开始和最重要的那一部分就是代码安全。甲方公司内部有很多项目,每个项目都由不同的开发人员进行开发,所以项目开发水平也是参差不齐,也就是说...

1212
来自专栏熊二哥

ASPNET_WEBAPI快速学习02

这部分内容的学习,已经放了大半年时间了,果断补充上,尽早将过去遗留的老技术坑都补上。首先将介绍服务幂等性的概念和相关解决方案,这部分也将是本文的理解难点,由于W...

2036
来自专栏Golang语言社区

Go 1.11 Beta 3 发布

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

852
来自专栏腾讯移动品质中心TMQ的专栏

【浅谈Chromium中的设计模式(一)】——Chromium中模块分层和进程模型

“EP”(中文:工程生产力)是目前项目中提升研发能力的一个很重要的衡量指标。笔者重点学习了Chromium产品是如何从代码和设计层面来保证快速高效的工程生产力。...

4728
来自专栏张善友的专栏

zookeeper 分布式锁服务

分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那一层来挡。当大量的行锁、表锁、事务充斥着数据库的时候。一般web应用很多的瓶颈都在数据库上,...

2128
来自专栏程序你好

微服务和传统中间件平台

微服务与部署在中间件平台(esb、应用服务器)上的传统服务有何不同?什么是微服务体系结构模式,它解决了什么问题?本文将讨论所有这些重要的主题,并描述如何管理、管...

1032
来自专栏芋道源码1024

【追光者系列】HikariCP 连接池配多大合适(第一弹)?

首先声明一下观点:How big should HikariCP be? Not how big but rather how small!连接池的大小不是设置...

1620
来自专栏lestat's blog

树莓派玩耍记

这篇文章是自己入手树莓派之后的一些使用记录 前些天看 v2ex 上有人讨论树莓派,于是出于好奇在淘宝上淘了一只树莓派来玩玩 体积超级小… ? 一个板子,...

3325

扫码关注云+社区