Docker存储配置切换loop-lvm到direct-lvm
生产环境下的存储配置
CentOS下全部使用device mapper的driver存储容器数据以及镜像,推荐使用direct-lvm模式。主要是效率,数据安全性等方面的考虑,效率方面可以参考Comprehensive Overview of Storage Scalability in Docker,数据安全性等内容可以阅读官方文档。
切换loop-lvm到direct-lvm
需要额外预留一个200g的分区(不挂载),并用lvm命令创建thinpool(OPS已经定义了装机模板)。
$ yum install -yq lvm2 device-mapper
|
$ pvcreate /dev/sda2 # 初始化一个physical volume(假设sda2是未挂载的200g分区)
$ vgcreate docker /dev/sda2 # 创建volume cgroup
|
$ lvcreate --wipesignatures y -n thinpool docker -l 80 %VG
$ lvcreate --wipesignatures y -n thinpoolmeta docker -l 5 %VG
|
$ lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta
|
创建thinpool后检查下状态:
$ lvs -o+seg_monitor
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8 : 0 0 1 .1T 0 disk
├─sda1 8 : 1 0 500M 0 part /boot
├─sda2 8 : 2 0 200G 0 part
│ ├─docker_vg-thinpool_tmeta 253 : 0 0 10G 0 lvm
│ │ └─docker_vg-thinpool 253 : 2 0 160G 0 lvm
│ └─docker_vg-thinpool_tdata 253 : 1 0 160G 0 lvm
│ └─docker_vg-thinpool 253 : 2 0 160G 0 lvm
├─sda3 8 : 3 0 20G 0 part /var
├─sda4 8 : 4 0 1K 0 part
├─sda5 8 : 5 0 10G 0 part /
├─sda6 8 : 6 0 8G 0 part [SWAP]
├─sda7 8 : 7 0 2G 0 part /home
└─sda8 8 : 8 0 877 .3G 0 part /home/q
|
$ dockerd --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt dm.use_deferred_removal= true
|
运维相关
dockerd运行成功后,创建容器,并用lsblk以及lvs命令观察当前的分配情况:
$ lvs -a
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[lvol0_pmspare] docker_vg ewi------- 10 .00g
thinpool docker_vg twi-aot--- 160 .00g 4.74 0.04
[thinpool_tdata] docker_vg Twi-ao---- 160 .00g
[thinpool_tmeta] docker_vg ewi-ao---- 10 .00g
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8 : 0 0 1 .1T 0 disk
├─sda1 8 : 1 0 500M 0 part /boot
├─sda2 8 : 2 0 200G 0 part
│ ├─docker_vg-thinpool_tmeta 253 : 0 0 10G 0 lvm
│ │ └─docker_vg-thinpool 253 : 2 0 160G 0 lvm
│ │ ├─docker- 8 : 8 - 2415920137 -fbaa790aaa4464ec26893f2ef8c0df0aa4ff4c3656e96bdaf1fe26433c043560 253 : 3 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -23638258c17119a569a1ccf6b1a91f73e15167cf1f7917b6298ca1423a8f5db8 253 : 4 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -10e51b2d98421c93d721b32add56699c5ac55baa58b19e80ed6c96a6e977d728 253 : 5 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -1e6a5e0122b39967605523d12dbc276f8d34ca0e2b6f50a3feebad2c4f09b891 253 : 6 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -ad3129f820e200588b5189f83f2b875155688c5d8fb6e02a8e8034628006663e 253 : 7 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -1012bad184a9cc1a4de495a465ba690c32ba43ad3f3393d1af5c33bf17db6be5 253 : 8 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -35584c11675f78a7a469a5637ab8251113f6d05695661a2f76985f8cc3e66207 253 : 9 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -964da701e42b4734cec85ee043436451437b97bc03129e7a3c3e38d9196a7acc 253 : 10 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -37e327e0e23cc07f42400e0d7e83748b9c16cea72c4c1e9d39063b4e38983ac0 253 : 11 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -94aac673d3b9098ef00d594329a85338872dee6321dd4e3fbca38c1ca975b026 253 : 12 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -ed3587d218ad3241457fb19f1196e64dee3e3bf4f6737472748e53219030d6cb 253 : 13 0 10G 0 dm
│ │ ├─docker- 8 : 8 - 2415920137 -02eba21c96277023cc330d333c907aa6d69f8fb860ea784b8f25d2c1015d59ba 253 : 14 0 10G 0 dm
│ │ └─docker- 8 : 8 - 2415920137 -e7f1449e05caab6ba37543bf3192ff9933325587928d29f835322223d78631df 253 : 15 0 10G 0 dm
│ └─docker_vg-thinpool_tdata 253 : 1 0 160G 0 lvm
│ └─docker_vg-thinpool 253 : 2 0 160G 0 lvm
│ ├─docker- 8 : 8 - 2415920137 -fbaa790aaa4464ec26893f2ef8c0df0aa4ff4c3656e96bdaf1fe26433c043560 253 : 3 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -23638258c17119a569a1ccf6b1a91f73e15167cf1f7917b6298ca1423a8f5db8 253 : 4 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -10e51b2d98421c93d721b32add56699c5ac55baa58b19e80ed6c96a6e977d728 253 : 5 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -1e6a5e0122b39967605523d12dbc276f8d34ca0e2b6f50a3feebad2c4f09b891 253 : 6 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -ad3129f820e200588b5189f83f2b875155688c5d8fb6e02a8e8034628006663e 253 : 7 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -1012bad184a9cc1a4de495a465ba690c32ba43ad3f3393d1af5c33bf17db6be5 253 : 8 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -35584c11675f78a7a469a5637ab8251113f6d05695661a2f76985f8cc3e66207 253 : 9 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -964da701e42b4734cec85ee043436451437b97bc03129e7a3c3e38d9196a7acc 253 : 10 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -37e327e0e23cc07f42400e0d7e83748b9c16cea72c4c1e9d39063b4e38983ac0 253 : 11 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -94aac673d3b9098ef00d594329a85338872dee6321dd4e3fbca38c1ca975b026 253 : 12 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -ed3587d218ad3241457fb19f1196e64dee3e3bf4f6737472748e53219030d6cb 253 : 13 0 10G 0 dm
│ ├─docker- 8 : 8 - 2415920137 -02eba21c96277023cc330d333c907aa6d69f8fb860ea784b8f25d2c1015d59ba 253 : 14 0 10G 0 dm
│ └─docker- 8 : 8 - 2415920137 -e7f1449e05caab6ba37543bf3192ff9933325587928d29f835322223d78631df 253 : 15 0 10G 0 dm
├─sda3 8 : 3 0 20G 0 part /var
├─sda4 8 : 4 0 1K 0 part
├─sda5 8 : 5 0 10G 0 part /
├─sda6 8 : 6 0 8G 0 part [SWAP]
├─sda7 8 : 7 0 2G 0 part /home
└─sda8 8 : 8 0 877 .3G 0 part /home/q
|
同时收集device-mapper的日志,用于持续跟踪direct-lvm工作情况,本机上可以使用:
journalctl -fu dm-event.service
|
如果发现error的日志,配合device mapper events的文档看一下,160g的空间一般不会发生dm.min_free_space相关的问题,除非当前机器上的垃圾镜像/容器内数据膨胀的很大了。
其他问题
性能
direct-lvm的block大小与性能有比较大的关系,写入是Allocate-on-demand,更新已存在的数据是Copy-on-write,前者与块存储很像,一次写入的数据量小于block size的话,会造成浪费。后者则是创建snapshot的时候每次都copy block size大小的数据,所以不适合在direct-lvm上频繁更新/写入小文件(小于block size),性能很低。
扩容
lvm扩容的需求暂时看不到,等CM的发布上来以后,估计lvm扩容是个常态了。
扩容的话需要使用vgextend/lvextend:
$ vgextend vg-docker /dev/sdb1
$ lvextend -l+ 100 %FREE -n vg-docker/data
|
然后根据blockdev --getsize64拿到vg的大小,除以512,算出新的table sectors,重新写回dmsetup table里。
docker-storage-setup脚本
部分CentOS7的docker-engine的RPM包带了一个docker-storage-setup的脚本,可以自动初始化direct-lvm,咱们这边没看到有,可以忽略这个脚本。
systemd MountFlags
docker1.12以后修改了systemd的service unit中的MountFlags参数,从slave改成了shared,这样就导致了容器内的mountinfo会被自动继承到宿主机的/etc/mtab里。df -h就会变成如下的样子:
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 10G 1 .7G 8 .4G 17 % /
devtmpfs 63G 0 63G 0 % /dev
tmpfs 63G 12K 63G 1 % /dev/shm
tmpfs 63G 323M 63G 1 % /run
tmpfs 63G 0 63G 0 % /sys/fs/cgroup
/dev/sda7 2 .0G 33M 2 .0G 2 % /home
/dev/sda8 2 .0T 366G 1 .6T 19 % /home/q
/dev/sda4 20G 876M 20G 5 % /var
/dev/sda2 497M 127M 370M 26 % /boot
/dev/dm- 3 10G 837M 9 .2G 9 % /home/q/docker/devicemapper/mnt/c59f5124cf4f2c055c0fb8a545b9a36430a62484bd17e40c65fa759677a1c494
shm 64M 0 64M 0 % /home/q/docker/containers/c34787539d49fc2b8c9b1692ffadac2c887f11d0eb0f583ea15de7969d8dcd05/shm
/dev/dm- 5 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/45b205be0b5868f2abf518529f1cf5a57cfaeef930b4a93246d2ff577cc2729b
shm 64M 0 64M 0 % /home/q/docker/containers/cd691d6274a9ed0755baa0aa9164a137cbed9f66d2c86a7710a8322a30ed4932/shm
/dev/dm- 7 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/1411a2dd3212fff1ccbd5dad4631c3039974ecadbf721b21367215b52d41a05f
shm 64M 0 64M 0 % /home/q/docker/containers/20ef7dd79679475c43b5d96b2582c50a0fb8e278aacc38789c4c7b079baffa67/shm
/dev/dm- 13 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/635e8495ae7a78b6528fd9815990d8ffe3c313c2e9e39556838b0d1e09505188
shm 64M 0 64M 0 % /home/q/docker/containers/b27bb93c915ca41a20ebfbf3946a84158d81d0e0e547fc7b29993b93d71ba70c/shm
/dev/dm- 8 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/433cd2bef34f59a936b01dd6e533f3a5f6c46c5c777a72e03f8273efc0f84782
shm 64M 0 64M 0 % /home/q/docker/containers/d843b21f0f872b257fb33ec4ec7a45013810b65e17e2e03dda4a718b43123e5b/shm
/dev/dm- 9 10G 234M 9 .8G 3 % /home/q/docker/devicemapper/mnt/5fa277cc9ccab68ea3476197c0ad8a8e65556ea489579386ee9721dd7cc9e742
shm 64M 0 64M 0 % /home/q/docker/containers/ed9fa870d9e5d718fa9ef2ef37399521e6baa98cb823dd265f6bd7a3c7d31143/shm
/dev/dm- 12 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/fbac533312232de3d3081c536f66f3d39d809ad02310fd9899fe3c5ec4403785
shm 64M 0 64M 0 % /home/q/docker/containers/87585b4ce2b1e9757b7e7626927bca66d0352ccdc0979c79cec7763124a72c70/shm
/dev/dm- 11 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/ff5943eea966f25aba19a4f01549681386739e01ca59d9856209c0f8a02c49bd
shm 64M 0 64M 0 % /home/q/docker/containers/88318b626dcb1f758104b59a617f72321fe89fea1014e8769ec1646333819b6d/shm
/dev/dm- 6 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/a6f3263a91f34fccffb933144b2d7adf119ee2a11f2309d9dba50ca56c3c95ef
shm 64M 0 64M 0 % /home/q/docker/containers/83d5aa6bd318e9279b07ca93882b3a6e61c40b5a63b2a57ad23ca05eda90ec13/shm
/dev/dm- 19 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/8e6dd15f468c0daf1a84742ddb6518bc43ade296db9b11b295113a081c097f20
shm 64M 0 64M 0 % /home/q/docker/containers/3ef4f4bee627e25f38bbfeb6585d5f0b1521c999ff70594403361db40c60d521/shm
/dev/dm- 20 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/1101767d5c8a2976fba2ad801b070a0aee462747a24b2604ee3c0e58f268d7c7
shm 64M 0 64M 0 % /home/q/docker/containers/8a3d3533b73e4f2e73b2ebf8948a153aa0238f841f06a04258a1cd93e4a3185f/shm
/dev/dm- 21 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/b8cf8ba6575d7a22f9112a456a7ccd3489b873af3fe8297fd48a8c632f4bc755
shm 64M 0 64M 0 % /home/q/docker/containers/065b671662d9485f85177e8d1d8efa318b775d16cce8f1764e3ef322e5577d58/shm
/dev/dm- 17 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/746ea6dffda2d73dc50f38a0e888ef94c6fe32a6d50530ed340d4b7e45c4d01b
shm 64M 0 64M 0 % /home/q/docker/containers/d0c1615128973e527862801cbbaec912c1c2c49612792f113c60473d6f8e6e1f/shm
/dev/dm- 14 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/f05fc9e9d0c46cf3487361cc23315d8f052a984fcd83ad07db6ced2b9d056fab
shm 64M 0 64M 0 % /home/q/docker/containers/0fd60f4b75328441c98989fc5c475a0535a5be69708c724122c56d75b272ee4f/shm
/dev/dm- 15 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/8263d710eb71391c7565f42895547ab54b6be7134ff6a53504b27fb0827ad8cc
shm 64M 0 64M 0 % /home/q/docker/containers/3d930b65aff13f1b4c4ba5881094264379ba24b4f9513862383f6b330a99ca3c/shm
/dev/dm- 16 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/a18bbc47ee0aef6cf64a694a8ef22ebdd336ae0fbb85646a12971039d2b705d8
shm 64M 0 64M 0 % /home/q/docker/containers/8809b728ecdfba50ca7b0dad62678f73e79bb394cc908d405c7e519386ba2969/shm
/dev/dm- 18 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/2ec7de4bfb4e4470acc2084eb7088d461e2b6f9a881c694f4fca17a13d5346aa
shm 64M 0 64M 0 % /home/q/docker/containers/3d2821e9b0c7a955fc8a413eaf45d2335f445582a2ff12674ecd1bb52cc94472/shm
/dev/dm- 22 10G 548M 9 .5G 6 % /home/q/docker/devicemapper/mnt/c69dfe3fab712c4c4406cd2b15361517a0f08213fdcd3c768d90fff1aef38d98
shm 64M 0 64M 0 % /home/q/docker/containers/d13a45b5a66aa072df0b3aeeef679753ff1a381c1ff71f228ee17745f88ba633/shm
/dev/dm- 4 10G 62M 10G 1 % /home/q/docker/devicemapper/mnt/f614499952f86ef6d6f0a12b08e98791bce567e249d0057c40a380e71f2a3e53
shm 64M 0 64M 0 % /home/q/docker/containers/0151dbaaa28a6d30a27932f1cafe5f54bf83e78d8870bd78c18ea5352c68e01a/shm
/dev/dm- 10 10G 1 .4G 8 .7G 14 % /home/q/docker/devicemapper/mnt/9f226b2388cb91dced03aa32e623fb47d068060ff264d1a081976371c76cf353
shm 64M 0 64M 0 % /home/q/docker/containers/fc59743e16ac9134e729e531f4ae28460b408501f4bb243847bea5976bbb8a06/shm
tmpfs 13G 0 13G 0 % /run/user/ 30303
|
这里会引申出两个问题,第一个是会出现proc的错误挂载(原因还未找到),导致我们的check_disk报错:
proc net:[ 4026531968 ] proc rw,nosuid,nodev,noexec,relatime 0 0
|
DISK CRITICAL - net:[ 4026531968 ] is not accessible: No such file or directory
|
需要修改nrpe的配置:
/home/q/nrpe/libexec/check_disk -w 15 % -c 10 % -A -l -I proc
|
Docker存储配置切换loop-lvm到direct-lvm相关推荐
- linux 扩展zhu分区,Linux分区调整(LVM和非LVM环境中扩容和缩小)
前言:我的上一篇博文详细介绍了磁盘.格式以及分区知识,里面也涉及了LVM,本文主要实践下LVM和非LVM环境中Linux分区如何扩容和缩小. 分区调整原理: Linux磁盘分区和磁盘格式紧密相连,想要 ...
- docker项目切换(nginx)、重启shell 脚本
docker项目切换.重启脚本 背景 具体操作 nginx配置 配置文件1 配置文件2 编写nginx替换脚本(用来执行端口替换) 编写启动脚本 dockerfile文件正常编写 给脚本授权 执行./ ...
- linux 安装 lvm,Linux配置LVM
Linux LVM概念介绍及相关配置 LVM简介 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品 ...
- LVM学习之LVM基础
有关LVM的好处我就不在此多介绍了,有空的话自己可以去百度百科中看看.我们在此之进行LVM的相关操作,以及命令的学习. 要想使系统支持LVM,我们必须安装lvm软件,在此我们实验使用的是centos6 ...
- linux查看lvm命令,linux lvm常用命令总结
linux LVM 1 创建 .删除思路创建:Linux分区---物理卷---卷组---逻辑卷删除:逻辑卷---卷组----物理卷---Linux分区 2 linux分区 linux中我们通常使用fd ...
- linux lvm uuid绑定,LVM:“找不到具有uuid的设备”但是blkid找到了UUID
我有一个SLES 11.2 PPC(3.0.58-0.6.6-ppc64)系统,它失去了对其卷组的跟踪(包含数据并不重要的LV,但回来会很好).磁盘通过SAN的两条光纤路径连接. 当我在上周五计划停电 ...
- linux lvm 查看,Linux LVM 详解
逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统,都是非常的好用.传统分区使用固定大小分区,重新调整大小十分麻烦.但是,LVM可以创建和管理"逻辑" ...
- 查看linux是否lvm分区,linux LVM分区查看dm设备
linux LVM分区查看dm设备 在linux中iostat -d查看磁盘状态时,有的会有如下dm-0,dm-1的条目. Device: tps kB_read/s ...
- 烂泥:LVM学习之LVM基础
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 有关LVM的好处我就不在此多介绍了,有空的话自己可以去百度百科中看看.我们在此之进行LVM的相关操作,以及命令的学习. 要想使系统支持LVM,我们必须安 ...
- LVM管理详解手册(LVM创建、LVM扩容、LV减容)
LVM逻辑卷管理是所有运维工程师绕不开的门槛,本文将以为实例方式向大家展示讲解LVM逻辑卷创建.扩容.减容以及常见错误的处理方法. LVM是 Logical Volume Manager(逻辑卷管理) ...
最新文章
- 使用C++实现单项选择题标准化考试系统设计
- 独家 | PHM数据竞赛首个中国夺冠团队经验分享(常用模型赛题详解PPT视频)
- 华为第四代服务器芯片Hi1620,华为第四代自研芯片Hi1620曝光, 全球首款7nm的ARM处理器...
- 单片机里面的CPU使用率是什么鬼?
- call、apply、bind的区别,模拟call、apply和bind的实现
- .第一天.net 学习理论
- 网络经商赚钱经典50问
- 带你入门HTML+CSS网页设计,编写网页代码的思路
- pinterest类网站差异化发展 时光轴成稀饭网突围利器
- OpenSSL密码库算法笔记——第2.3.3章 Montgomery模数与相关函数
- 搜狗浏览器安装第三方插件
- matlab图像取样和量化,一文看懂数字图像的取样和量化
- 安装教程_Mac Adobe CC 2020 安装教程
- 大型网站架构之安全性:高安全架构
- Gartner 魔力四象限 -- 应用安全检测
- 认识Hyperledger
- sql oracle 退格键,Oraclesqlplus中方向键、退格键的使用是怎样的? 爱问知识人
- 绿色出行之路 中国越走越宽
- C语言技巧:有if时使用likely和unlikely让代码运行更快
- 饿汉单例、懒汉单例类
热门文章
- 教你如何选期权比例:记住年终奖扣税的临界点,用期权控制税前金额,实现利益最大化!...
- 计算机校本培训 培训总结,校本培训工作总结(2015—2016学年度)
- 命名实体识别难在哪?
- c# chart 各个属性_C# Chart各个属性详细解析、应用
- LOL英雄联盟卡顿掉帧问题解决办法 2022年8月1日
- Python实现视频流媒体传输
- OpenCV画椭圆、实心圆、凹多边形、线段、矩形
- 进阶级 - Git Hub 常用指南
- Exchange2010启用反垃圾邮件功能
- 小牛性能服务器图片,小牛8玩游戏卡不卡? 实测后发现真不差