熟练使用常用的 VMControl 命令行,结合一些必要的界面操作,无疑可以使日常管理维护工作更加得心应手,事半功倍。本文将通过实例对一些常用的 VMControl 命令行进行介绍。
在 VMControl 的最新版本中,提供了较为完善的 PowerVM 虚拟化环境的管理和监控方案,用户可以对每台 Power 服务器进行虚拟机(LPAR) 创建、捕获(Capture)、部署(Deploy)、迁移 (Relocation)等生命周期的管理;也可以把被管理的 Power 服务器组合成为服务器池(System Pool),作为一个整体进行管理,从而把部署在服务器池中的虚拟机组合成 Workload,进行 Workload 的生命周期管理、优化和监控。对服务器池和 Workload 的管理和监控,也就是 VMControl 的核心功能。
一般而言,服务器池中的 Workload 捕获(Capture)和部署(Deploy)可以帮助用户轻松实现一个和多个业务系统的安装和备份;而 Resilience(弹性)的设置可以实现 Workload 的 HA(High Availability,高可用性),当某台服务器发生一些故障时,能够自动对服务器上的 Workload 进行迁移,使得运行在 Workload 上的业务无中断的运行;在本文中我们将会以这些常用的管理任务为例探讨如何使用 VMControl 命令行,简化系统管理员日常工作。
下面首先对 VMControl 的命令行做简单的介绍。
VMControl 命令行一览
常用的 VMControl 命令行通常是在 vsm、availability、sccli 和 imagemgrcli 几个命令包(Bundle)下,可以通过 Director 的命令行 lsbundle 查询这几个命令包下的命令行列表。
# smcli lsbundle | grep -i imagemgrcli # smcli lsbundle | grep -i vsm # smcli lsbundle | grep – I Availability
这几个命令包的输出,也即是 VMControl 命令行的全集,包含了将近 70 个相关的命令行。可见,VMControl 还是提供了相当丰富的命令行供管理员使用。
根据命令行应用对象的不同,这些命令行可以分为五类:服务器池相关命令、Workload 相关命令、虚拟镜像相关命令、存储相关命令、虚拟机相关命令和服务器相关命令。下表给出了各分类的一些常用命令行,使用这些 VMControl 命令行,可以完成最基本的 Power 服务器的管理任务。
表 1.VMControl 命令行的分类和部分命令行
命令行应用相关对象 | 常用命令行 |
---|---|
服务器池 | imagemgrcli/mksyspool imagemgrcli/lscandidatestorage |
Workload | imagemgrcli/lsworkloads imagemgrcli/chworkload |
虚拟镜像 | imagemgrcli/lsva imagemgrcli/lscustomization imagemgrcli/deployva imagemgrcli/lsrepos imagemgrcli/lscapsrv imagemgrcli/captureva |
存储 | sccli/dumpstcfg sccli/svsrelationships sccli/svsresources |
虚拟机 | vsm/lsvrtsys |
服务器 | Availability/mkfarm |
对于这里黑体标注的命令行,将会在后面通过实例以帮助了解其用法。
一般而言,通过命令行的作用对象和命名规则,我们也可以猜到大部分命令的用途,比如命令行带前缀 ch(change)表示改变,rm(remove)表示删除,ls(list)表示列出,add 表示添加,start 表示启动,有兴趣的读者也可以通过结合使用命令行 man < 命令 > ,或者 –help 查询获得命令行使用指南。
下面我们将通过实例学习上表中这些常用的命令行,包括准备 VMControl 管理环境,对管理的 Power 服务器创建服务器池,部署和创建 Workload 到服务器池,配置 Workload 的属性自动实现 Workload 的动态迁移;并且,我们也会对 Workload 进行备份,对 Workload 的生命周期进行管理,并对资源使用情况进行监控。
vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.
从介绍可以看出vmtouch是一个管理和控制Unix和类Unix文件系统缓存的工具。
vmtouch的主要功能如下:
由于vmtouch是个比较小众的命令,很多Linux发行版不带这个命令,所以如果要使用这个命令要自己先编译一个。
抄了几个vmtouch的用法:
1. 看看/bin目录有多少内容在内存中
$ vmtouch /bin/ Files: 92 Directories: 1 Resident Pages: 348/1307 1M/5M 26.6% Elapsed: 0.003426 seconds
2. 看看某文件(big-dataset.txt)有多少在内存中
How much of big-dataset.txt is currently in memory? $ vmtouch -v big-dataset.txt big-dataset.txt [ ] 0/42116 Files: 1 Directories: 0 Resident Pages: 0/42116 0/164M 0% Elapsed: 0.005182 seconds
然后读入部分文件,
$ tail -n 10000 big-dataset.txt > /dev/null
然后在用vmtouch查看一下:
$ vmtouch -v big-dataset.txt big-dataset.txt [ oOOOOOOO] 4950/42116 Files: 1 Directories: 0 Resident Pages: 4950/42116 19M/164M 11.8% Elapsed: 0.006706 seconds
我们可以看出big-datset.txt开始时没有数据在内存中,在用tail命令读入了部分数据后,有19MB的数据进入了内存。
3. 把文件(a.txt)清除出内存
$ vmtouch -ve a.txt Evicting a.txt Files: 1 Directories: 0 Evicted Pages: 42116 (164M) Elapsed: 0.076824 seconds
vmtouch主要作用是做数据的warmup,即对于将要用到的数据,通过vmtouch把它们事先读入内存,而不是在需要时再从硬盘上读入,这样可以提高系统效率。
对于vmtouch的实现,一个核心的函数是mincore(), 看一下它的manual:
mincore - determine whether pages are resident in memory
#include <unistd.h>
#include <sys/mman.h>
int mincore(void *addr, size_t length, unsigned char *vec)
mincore()需要调用者传入文件的地址(通常由mmap()返回),它会把文件在内存中的情况写在vec中。