Devicemapper的direct-lvm模式

一、简介

Devicemapper作为graphdriverdocker中,容器镜像之间架构如下

 

计算机生成了可选文字:Container snapshot Ubuntu image 91e54dfb1179 snapshot d74508fb6632 snapshot C22013C84729 snapshot d3a1f33e8a5a snapshot Container snapshot Busybox image 0292957ea1dd snapshot 28779C628bf0 snapshot Base device PO

 

Devicemapper的两个不同模式loop-lvmdirect-lvm区别就在于如何创建最底层的thin-pool

 

direct-lvm模式采用了LVM来创建thin-pool

 

       LVM是 Logical VolumeManager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux2.4内核上实现,基于device mapper,目前最新版本为:稳定版1.0.5,开发版1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。

 

二、基本术语

 

  • 物理卷(Physical Volume,PV)

指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

  • 卷组(Volume Group,VG)

类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

  • *逻辑卷(Logical Volume,LV)

类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

类型有:cache-pool, raid1, snapshot, thin, orthin-pool、linear、striped、cache(lvmcache)、thin provisioning(lvmthin)、mirror

  • 物理块(Physical Extent,PE)

每一个物理卷PV被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

  • 逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

 

下图所示LVM抽象模型,展示了PV、VG、LV三者之间关系

 

LVM抽象模型

LVM抽象模型

三、安装LVM

已有可跳过

$ yum installlvm2

四、手动创建dockerthin-pool

在此之前需要停止docker服务:

$ service docker stop

且需要删除所有镜像和容器,有重要资料,请做好备份

$ rm -rf /var/lib/docker/*

第一步:创建PV

可用空余硬盘或者硬盘中的分区进行创建PV,这些设备必须未正在被使用,创建之前先将这些设备用fdiskid改为8elvm),效果如下,此处只使用sda5来创建PV

计算机生成了可选文字:[root@bogon fdisk -l Disk /dev/sda: 42.9 6B, 4294967296€ bytes, 83886€8€ sectors Units = sectors of 1 512 = 512 bytes Sector size ( logical 'physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: Device Boot /dev/sdal /dev/sda2 /dev/sda3 /dev/sda4 ev s a Sta rt 1€26€48 42969€88 43173888 End 1€26€47 42969€87 43173887 83886€79 o cks 2€97152€ 1€24@€ 2€356€96 Id 83 8e 82 5 Systan Linux Linux LVM Linux swap / Solaris Extended Inux

 

命令:

$ pvcreate /dev/sda5

创建完成:(pvdisplay)

计算机生成了可选文字:[root@bogon pvdisplay - Physical volume - PV Name VG Name PV Size Al locatable PE Size Total PE Free PE Allocated PV WID /dev/sda5 docker 19.41 GiB / not usable 2.@€ MiB 4.@€ MiB 4818 C6e7jz-bm2b-xg8g-QnwD-foq5-Mxb3-bYQ02i

 

第二步:创建VG

命令:

$ vgcreate docker /dev/sda5

docker”为vg名,“/dev/sda5”为组成VGPV路径

创建完成:(vgdisplay

计算机生成了可选文字:[root@bogon vgdisplay - Volume group VG Name Systan ID Fomat Metadata Areas Metadata Sequence No VG Access VG Status MAX LV cur LV Open LV Max PV cur PV Act PV VG Size PE Size Total PE AUoc PE VG WID Size Size docker vn2 91 read/write resizable 19.41 GiB 4.@€ MiB 4969 4818 / 18.82 GiB 151 / 6€4.@€ MiB C8UyAq -5gRn -Na10-cpKH-tHb€78

 

第三步:创建能够组成thin-pool的两个LV

命令:

$ lvcreate --wipesignaturesy -n thinpool docker -l 95%VG

$ lvcreate --wipesignaturesy -n thinpoolmeta docker -l 1%VG

 

 

第四步:根据上一步的两个LV创建thin-pool

命令:

$ lvconvert -y --zero n -c512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta

 

以下步骤可选

第五步:配置thin-pool的自动扩展

 

修改lvm配置文件

$ vi/etc/lvm/profile/docker-thinpool.profile

如下:

activation{
   thin_pool_autoextend_threshold=80
   thin_pool_autoextend_percent=20
}

 

激活配置文件

$ lvchange --metadataprofiledocker-thinpool docker/thinpool

 

 

五、使用脚本创建thin-pool

 

在此之前需要停止docker服务:

$ service dockerstop

 

服务  docker-storage-setup

 

可通过service docker-storage-setup status查看执行脚本和环境变量文件

 

执行脚本:/usr/bin/docker-storage-setup

环境变量文件:/etc/sysconfig/docker-storage-setup

 

第一种做法:

提供创建POOL的设备,可以是整块硬盘或分区,即在环境变量文件中加入

DEVS="/dev/sda5"

 

执行脚本:

$ service docker-storage-setup start

 

docker启动会自动执行该脚本,所以也可直接执行

$ service docker start

 

第二种做法:

已有VG,或者自行创建VG(手动创建thin-pool中有提到),因为有些linux在安装时分区模式选用了lvm,所以会存在已有VG

 

在环境变量文件中加入

VG="docker"

docker”为已有的VG,可通过$vgdisplay查看

 

 

执行脚本:

$ service docker-storage-setup start

 

docker启动会自动执行该脚本,所以也可直接执行

$ service docker start

 

创建成功后会有:

计算机生成了可选文字:[root@bogon Ivdisplay - Logical volume - LV Name VG Name Write Access LV Creation host, LV Pool metadata LV Pool data LV LV Status # open LV Size time Allocated pool data Allocated metadata Current LE Segments Allocation Read ahead sectors currently set to Block device thinpool docker bG€3n1-jGq€-6nbj -lagz -OQQF -n 1K-Q4vgYH read/write bogon, 2€16-€8-13 -€4@€ thinpool tmeta thinpool_tdata available 18.44 GiB 472€ inherit auto 8192 253:2

 

 

 

六、direct-lvm下启动docker

 

docker启动配置文件

/etc/sysconfig/docker-storage

中添加或修改:

DOCKER_STORAGE_OPTIONS=--storage-driverdevicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/docker-thinpool--storage-opt dm.use_deferred_removal=true

 

/dev/mapper/docker-thinpool”为上述步骤中产生的thin-pool

 

修改完成后启动docker

$ service docker start

 

成功后执行

$ docker info

会有如下

计算机生成了可选文字:[ root 訕 ogon 一 ] # docker fo CO nt a In e rs : 2 Images : 39 Storage Driver : devicanapper P001 Name : docker-thinpool P001 Blocksize : 524 · 3 kB Backing Filesystan : xfs Data file. Metadata file. Data Space Used : 1 · 714 68 Data Space Total : 19 · 8 68 Data Space Available : 18.€8 68 Metadata Space Used : b84 kB Metadata Space Total : 2e5 · 5 8 Metadata Space Available : 2e4 · 8 祀 Udev Sync Supported : t ru e Deferred Ranoval Enabled : t ru e Lib ra ry Version : 1.€2 · 197 一 R L7 (2616-06-€g) Executlon DrIver : n at Ive -€ · 2 Logging Driver : json-file Kernel Version : 3 · 16 · € 一 327 · 22 · 2 · s17 · x85 64 Operating Systan : Centos Linux 7 (Core) Total ory : g77 · g 8 Name : bogon ID : YTPQ : SIYF : 41YN : 2LG5 : 330E : S02 众 : R ] BD : 33TP : D6VV : Zh 帐 : 卜 0 ] 8 : 4PL6 WRUNG : bridge-nf-caU-iptables disabled WRUNG : bridge-nf-caU-ip6tables disabled

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页