在《Nutanix超”容”合之ACS(下)实战篇01》中,我们完成了环境的准备并且使用ACS在Nutanix AHV虚拟化环境中快速生成了两台Docker宿主机。实战篇02主要是使用和验证ACS的容器数据持久化功能。
激活Nutanix Volume Plugin
Nutanix Volume Plugin在ACS作为Docker宿主机的容器和ABS iSCSI存储的桥梁。简单点说就是它将容器的数据直接放到了存储上并允许多个虚拟机中的容器访问,这样就解决了把容器数据放在本地且无法持久化的问题。
docanix01和docanix02两台宿主机我们已经创建完毕,下面我们来试试如何将不同主机间容器的数据进行持久化。
本文中两台宿主机均在客户端(CentOS)上使用docker-machine ssh进行远程连接。
但不仅限于此种方式,直接用putty或者xshell这样的工具连接也是一样。
拉取最新的Nutanix Volume Plugin镜像
Nutanix Volume Plugin是作为一个容器运行在docker host上面的
(两台宿主机均需执行)
启动Plugin容器
运行/root目录下的start-volume-plugin.sh脚本
- prism ip address:Prism的IP地址
- Dataservices ip address:ABS数据服务的IP地址,上章中已配置
- prism username:Prism的用户名
- prism password:Prism用户的密码
(两台宿主机均需执行)
监控Plugin容器
我们可以通过docker ps看到容器已经是启动的,但plugin的激活还需要几分钟。当我们看到上面最后的日志内容且没有任何报错的时候即可判定Nutanix Volume Plugin启动成功。
注:该plugin激活过程涉及到一些软件包(如iscsi-initiator)的yum安装,所以再次强调虚拟机必须要能够访问互联网。
至此两台宿主机上的Nutanix Volume Plugin功能已成功激活,下面我们实践一下数据的持久化是怎么做的。
数据持久化测试
本文中测试方法基于Nutanix Volume Driver:
- 在docanix01宿主机上运行一个MySQL数据库容器,并在创建名为docanix_db的数据库后干掉(停止并删除)该容器。
- 在docanix02宿主机上运行一个MySQL数据库容器,并挂载先前docanix01的volume验证数据是否可用。
在doncanix01上执行
- –volume-driver指定为nutanix,启动的容器会调用plugin
- -v后面的VOLUME:/PATH比较有讲究:
- 当VOLUME不存在的时候,plugin会调用prism去创建一个volume并挂载到容器上
- 当VOLUME已存在的时候,plugin会直接挂载到容器上
- VOLUME的名字需要用小写,这个是ACS目前的一个bug
到了这里我们去Prism里面看看,这个volume到底是啥?
Home–>Storage–>Table–>Volume Group
可以看到一个名为data01的volume已被自动创建,它就是我们在启动容器的时候指定的volume
选中data01并点击update
将Share across multiple iSCSI initiators or multiple VMs勾选
因为docanix01和docanix02都需要访问该volume。
检查容器是否成功运行
可以看到名为MySQL的容器已正常运行
变更MySQL数据库的数据
以创建一个名为docanix_db的数据库为例
docker-enter是一个很好用的登录容器的工具,秒杀docker attach
安装方式:
wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
echo “[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker” >> ~/.bashrc; source ~/.bashrc
停止并销毁MySQL容器
可以看到docanix01主机中已经没有MySQL容器在运行
运行新的MySQL容器
在doncanix02主机上操作
- -v 参数中的volume指定为data01,新容器直接挂载之前被销毁的容器的volume。
数据检查和操作
可以看到我们先前在doncaix01上创建的docanix_db数据库在docanix02上也可以看到。
会不会是看不中用?我们创建一个Table测试一下
mysql> create table users (UID int primary key,name varchar(20));
Query OK, 0 rows affected (0.05 sec)
mysql> show tables;
+----------------------+
| Tables_in_docanix_db |
+----------------------+
| users |
+----------------------+
1 row in set (0.00 sec)
可以看到名为users的表已被成功创建到docanix_db数据库中。
到这里我们就可以确定了,之前在docanix01上的MySQL容器虽然被销毁了,但是容器中MySQL数据库的数据经过Nutanix Volume Plugin做了持久化之后,我们在docanix02上运行一个新的容器依然可以使用。
这说明了什么?排除高可用的场景,试想一下如果在一台虚拟机上面跑的一个MySQL数据库,然后这台虚拟机被误删除了,我们需要重新生成另外一台虚拟机并重新部署MySQL的环境并恢复数据,这个过程得要多长时间?
而在这个实验场景当中,我们只用
- 重新provision一台Docker Host(大约10分钟的样子)
- 运行Nutanix Volume Plugin(大概5分钟的样子)
- 运行docker run在5秒内重新启动一个MySQL实例
整个被误删的数据库环境在20分钟之内绝对可以起来…而且在不需要重新生成Docker宿主机的情况下,5秒钟就可以恢复一个MySQL环境!
这仅仅只是Docker容器化和Nutanix超融合结合之后最基本的实践,Docanix(Docker+Nutanix)还有无穷尽的功能需要我们去挖掘和尝试…
好了,实战篇就到这里了,希望大家关注多多关注微信订阅号’小张烤茄’一起学习交流。
讲真,由于NCE的环境比较吃资源,我4vcpu和32GB的内存的Homelab有一半资源都分给了Nutanix的Control VM,先前觉得特别奢侈和浪费,所以有尝试用KVM虚拟化+Btier分层存储的方案来替换到NCE,目的为节省更多的硬件资源。
但是在最终,我还是选择了NCE。尽管NCE也可以被认为是一个开源版,但是相对于CentOS的KVM和Btier这种开源软件来说,实在是强大和稳定得太多…
能理解花了快一个月搭建起来的环境因为Btier分层存储的问题导致所有KVM虚拟机都起不来的痛楚吗?…
不是为Nutanix打广告,真心是前车之鉴。如果有环境和兴趣的朋友完全可以用NCE来作为虚拟化平台,因为NCE自身的AHV虚拟化就是基于KVM来做的,命令行操控过度很平滑,Prism的一键式Web UI也方便易用。而且CVM的资源分配并非是定值,不会一口气全吃掉,用多少是多少,剩余的还是会跟整个环境的虚机共享的。
评论前必须登录!
注册