使用Vagrant部署虚拟分布式开发和测试环境
同步更新到笔者个人博客,可以访问我的博客查看原文:https://www.rockysky.tech
创建自动化配置开发环境
最近由于最近研究和学习的关系,需要经常配置和搭建多个虚拟机组成的分布式系统。原来只是用虚拟机程序,比如说用Virtual box直接建立虚拟机。如果只是偶尔创建虚拟机研究的话,我觉得直接使用Hyper-V或者Virtual box还是没问题的。但是这段时间需要经常批量创建虚拟机,然后有可能会在开发或者测试完成后销毁这些虚拟机。而且完成的虚拟机配置有时需要固定下来以后再使用。其实大家可以发现,这些需求,是能够用容器技术来实现吗?但是容器技术并不能创建完整的VM,而且容器技术通常是无状态的,用于运行微服务应用。对于数据库和存储类的分布式应用。或者要求固定存储的应用环境的搭建其实并不适合。
安装和配置Vagrant
Vagrant是用Ruby语言开发的多虚拟机(Multiple Hypervisors)自动化管理工具。Vagrant的最新版本是2.2.7。这个工具的安装非常简单,安装包可以在下面的页面下载:https://www.vagrantup.com/downloads.html 我是在自己的Windows操作系统上安装的。运行安装程序,然后选择好安装目录就可以开始了。Vagrant是一个命令行工具,没有UI界面。所以安装完成后我们打开PowerShell,或者安装的操作系统的shell程序,输入以下命令:
vagrant -v
我们就可以看到会显示版本号,我安装的是最新的2.2.7。如果正常那就应该没啥问题了。然后是安装虚拟机程序,在windows操作系统上我们可以选择Virtualbox,VMware workstation和Hyper-V。Hyper-V是windows自带的虚拟机程序,性能最好,不过我还是不推荐使用。主要还是因为Hyper-V本身功能和设计还不太成熟,如果删除一台虚拟机,相关的硬盘等资源不会同步删除,还需要手工清理。而且在默认设置下对CPU和内存的消耗比较大。当然最重要的因素还是Vagrant的Box库中提供的支持HyperV的box还是比较少,更新也不及时。VMWare Workstation在Windows的兼容性不太好,使用起来总感觉不是特别顺手,而且还老是提示升级到付费的Pro版本,反正就是用户体验不大好。因此,综合起来,我比较推荐单机VM开发测试环境采用Virtualbox。
接下来就是从Oracle的网站上下载VirtualBox和安装了,这个过程也很简单和直观,就不详细描述了。安装完Virtual Box后,windows系统的用户请一定要关闭HyperV功能,如下图所示:

也可以在Powershell命令行输入下面的命令(需要管理员权限)
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
安装Vagrant插件vagrant share
如果希望能够把配置好的虚拟机环境共享给其他人演示,或者和其他人合作。需要安装vagrant share插件,可以使用下面的命令:
vagrant plugin install vagrant-share
需要连接Vagrant在国外的服务器,所以安装会需要一段时间,等待一会儿后就会完成了。这个功能需要和ngrok.com内网穿透服务一起使用。

Vagrant的基本使用和操作
首先运行Vagrant帮助命令,查看大致有哪些命令和功能:

Vagrant会把一个虚拟机打包成box,这个有点类似docker的image概念。就是用来生成一个完整的虚拟机的。按照官网的说明创建一个标准的Ubuntu或者Centos非常容易。直接从官方的box库就可以下载并运行。下面的命令会在当前文件夹生成一个Vagrantfile配置文件。然后运行vagrant up就能够创建并运行一个Ubuntu18.4的虚拟机了,默认状态是使用的VirtualBox作为虚拟机Provider。
vagrant init hashicorp/bionic64
vagrant up
不过由于众所周知的原因,国内的下载速度是非常非常缓慢的。慢到怀疑是在上个世纪90年代的网速。
各种镜像源
http://www.vagrantbox.es/, 当然也可以到官方主页上去查找和下载。清华和科大有Centos和Ubuntu的Box镜像。下载下来以后如何载入。
vagrant box add https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box --name ubuntu/trusty
上面是下载清华的源
vagrant box add C:\test.box --name unbuntu1804
上面的是通过本地box加载
box被加载到本地以后我们可以通过box list命令查看, 我们可以看到本地现在已经有了两个box了。
PS D:\vagrant\example2> vagrant box list
ubuntu1804 (virtualbox, 0)
ubuntuNew  (virtualbox, 0)
重载,挂起,暂停和销毁虚拟机
vagrant suspend #这个命令是暂停虚拟机
vagrant halt #关闭虚拟机
vagrant destroy #彻底销毁虚拟机
vagrant reload #配置文件修改过后,可以重新加载配置
ssh登录虚拟机
vagrant ssh
我们通过vagrant status可以查看所有虚拟机的运行状态,如果有多个虚拟机在运行,需要加上机器名称
vagrant ssh node1
从新打包Box
当我们修改了原始的虚拟机配置,需要把现在的虚拟机作为标准开发环境的box时,我们应该用package命令:
vagrant package [name|id]
详细用法:https://www.vagrantup.com/docs/cli/package.html
Vagrant的配置文件
直接运行 vagrant init,然后打开这个文件。我们可以看到各个配置项。最基本的配置文件如下, 这个是用名称是hashicorp/bionic64的box创建一个虚拟机。
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
end
可以加入box的版本信息
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.box_version = "1.1.0"
  config.vm.hostname = "myhost"
end
配置私有网络,
这个是用虚拟网关作为dhcp服务器自动分配IP地址
Vagrant.configure("2") do |config|
  config.vm.network "private_network", type: "dhcp"
end
配置IPV4静态地址
Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "192.168.50.4"
end
配置IPV6静态地址
Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "fde4:8dba:82e1::c4"
end
配置公有网络
这个是用和主机物理网卡桥接的模式连接到外部的路由器的模式。外部网络可以访问到这台虚拟机
Vagrant.configure("2") do |config|
  config.vm.network "public_network"
end
同时配置多台虚拟机
通过下面的方式可以配置多台虚拟机
Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"
  config.vm.define "node1" do |n1|
    n1.vm.box = "mybox"
  end
  config.vm.define "node2" do |n2|
    n2.vm.box = "mybox2"
  end
end
												
											使用Vagrant部署虚拟分布式开发和测试环境的更多相关文章
- 搭建PhoneCat项目的开发与测试环境
		
AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 获取源代码 PhoneCa ...
 - (B)springboot配置开发和测试环境并添加启动路径
		
嗯,开发和测试环境要分离,这是一般共识(虽然我工作过的公司都没有这种分离),spring boot也可以按照配置文件的读取来做到这一点. 上图有三个application开头的配置文件,要达到能够读取 ...
 - AngularJS初探:搭建PhoneCat项目的开发与测试环境
		
AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 对于PhoneCat项目的 ...
 - 区块链入门(1):搭建(Ubuntu系统)Truffle v3.2.1 开发和测试环境
		
本文主要讲解ubuntu 16.04下, truffle开发测试环境的搭建. 第一步:安装nodejs 和 npm,有两种比较常见的方法. 方法1:直接在nodejs官网下载nodejs-v6.10 ...
 - 第五章 搭建S3C6410开发板测试环境
		
开发板是开发和学习嵌入式技术的主要设备.在这章中介绍了S3C6410开发板,它是三星公司推出的一款低功耗.高性价比的RISC处理器.安装串口调试工具:minicom.它的安装步骤:第1步:检测当前系统 ...
 - openKM部署二次开发,eclipse环境
		
1.下载openKM_install_forwin安装包,配置jdk环境,start openKM,访问localhost\OpenKM,用户:okmAdmin 密码:admin.查看是否启动成功.安 ...
 - SharePoint Server 2013开发之旅(四):配置工作流开发和测试环境
		
工作流这个功能,在SharePoint Server 2013中做了很大的改动.我们可以从微软官方的文档中了解一下大概的情况 http://technet.microsoft.com/zh-cn/li ...
 - 2020-06-19:多线程消费kafka的时候,开发、测试环境都能每秒10w+,但是正式环境只能1w/s,正式环境不能重启,看怎么调试?
		
福哥答案2020-06-19: 答案来自群成员:基准测试. 观察 网络和磁盘的读写,实时与历史曲线,观察文件句柄/内存的使用情况.观察系统patch 基础库/运行时状态.
 - SpringBoot项目 使用Jenkins进行自动化部署  gitlab打tag  生产测试环境使用 含配置中心
		
脚本 node('master') { def mvnHome = tool 'maven11-free' def gitUrl = "http://gitlab.wdcloud.cc:10 ...
 
随机推荐
- metinfo_5.3变量覆盖引发的一系列问题
			
metinfo_5.3中存在一个很经典的$$型变量覆盖,这种变量覆盖在之前的博客中提到过,今天的博客围绕这个变量覆盖漏洞结合这款CMS的其他功能进行漏洞利用. 变量覆盖+文件包含 拿到这个CMS首先还 ...
 - Pipe Fitter and the Fierce Dogs
			
Pipe Fitter and the Fierce Dogs [JAG Asia 2016] 理解题意之后,就是一个非常傻的DP 然后难在理解题意,理解非法状态 #include <bits/ ...
 - 领域建模-模型验证与面向资源的API设计
			
使用 UMLet 建模 1. 使用类图,分别对 Asg_RH 文档中 Make Reservation 用例以及 Payment 用例开展领域建模.然后,根据上述模型,给出建议的数据表以及主要字段,特 ...
 - day44-线程
			
#1.开启线程: from threading import Thread import os def func(): print('func',os.getpid()) t = Thread(tar ...
 - transcription-coupled repair|Germ|HK|TS|Mutation|四类变异
			
生命组学-可遗传变异 GC content:碱基: GC content不同的植物对应的gene length,可看作上图的转置: 由GC content看出来碱基变异程度,可以找到对应碱基改变,所以 ...
 - djangp-filter的使用
			
目录 Filter定义 Filter定义 定义如下Filter类 class BookFilter(django_filters.FilterSet): name = django_filters.C ...
 - COMET探索系列二【Ajax轮询复用模型】
			
写在前面:Ajax轮询相信大家都信手拈来在用,可是有这么一个问题,如果一个网站中同时有好多个地方需要用到这种轮询呢?就拿我们网站来说,有一个未读消息数提醒.还有一个时实时加载最新说说.昨天又加了一个全 ...
 - iOS多种刷新样式、音乐播放器、仿抖音视频、旅游App等源码
			
iOS精选源码 企业级开源项目,模仿艺龙旅行App 3D立体相册,可以旋转的立方体 横竖屏切换工具,使用陀螺仪检测手机设备方向,锁屏状... Swift版Refresh(可以自定义多种样式)架构方面有 ...
 - ckeditor+ckfinder添加水印。
			
1.修改ckfinder文件下面的config.php:添加一句include_once "plugins/watermark/plugin.php";//水印配置文件 2.修改p ...
 - FPGA 浮点定点数的处理
			
大纲: 1浮点数的格式指定 2浮点数的运算(加法) 3浮点数加减法器的实现(难于乘除法器的实现) 1. 在FPGA的设计中,浮点数的概念不同于C语言中的定义,这里的浮点数指的是小数点位置会发生变化的 ...