原文地址

Vagrant 可以通过一个 Vagrantfile 定义并控制多个客户机。这就是所谓的“multi-machine”多虚拟机环境。

这些机器通常可以协同工作,或者互相关联。下面是几个常见用例:

  • 准确建模多服务器生产拓扑环境,例如分离 Web 和数据库服务器。
  • 建模分布式系统,以及它们如何相互交互。
  • 测试一个接口,比如一个 API 到一个服务组件。
  • 灾难情况测试:机器宕机,网络分区,网络缓慢,环境不一致(inconsistent world views)等。

以前,通常是在一台机器上来模拟运行这样的复杂环境。不准确。

使用 Vagrant 的多客户机功能,可以在单个 Vagrant 环境中对这些环境进行建模,而不会失去 Vagrant 的任何好处。

1. 定义多个机器

多个机器定义在同一个项目的 Vagrantfile 文件中,使用 config.vm.define 方法调用。这个配置指令挺有趣的,因为它可以在一个配置中创建 Vagrant 配置。例如:

Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo Hello" config.vm.define "web" do |web|
web.vm.box = "apache"
end config.vm.define "db" do |db|
db.vm.box = "mysql"
end
end

config.vm.define 是一个包含另一个变量的块。这个变量,比如上面的 web 变量,和配置变量完全相同,但是内部变量使用的任何配置只适用于被定义的机器。因此,web 上的任何配置只会影响 web 这个机器。(As you can see, config.vm.define takes a block with another variable. This variable, such as web above, is the exact same as the config variable, except any configuration of the inner variable applies only to the machine being defined. Therefore, any configuration on web will only affect the web machine.)

而且重要的是,你可以继续使用配置对象。配置对象在特定于机器的配置之前加载并合并,就像 Vagrantfile 加载顺序 中的其他 Vagrantfile 一样。

如果你熟悉编程,这就类似语言中的不同的变量作用域。

在使用这些作用域时,执行顺序(例如 provision 的顺序)变得重要。Vagrant 按照 Vagrantfile 中列出的顺序执行外部输入。例如,使用下面的 Vagrantfile:

Vagrant.configure("2") do |config|
config.vm.provision :shell, inline: "echo A" config.vm.define :testing do |test|
test.vm.provision :shell, inline: "echo B"
end config.vm.provision :shell, inline: "echo C"
end

这种情况下的提供者 provisioner 将输出“A”,然后输出“C”,然后输出“B”。 注意“B”是最后一个。这是因为排序是按照文件中的顺序排序(That is because the ordering is outside-in, in the order of the file.)。

如果你想在多台机器上应用稍微不同的配置,请参阅 [此提示]

2. 控制多个机器

在 Vagrantfile 中定义了多台机器时,各种 vagrant 命令的用法稍有变化。

只有单个机器(如 vagrant ssh)才有意义的命令现在需要机器的名称来控制。使用上面的例子,变为 vagrant ssh webvagrant ssh db

其他命令(如 vagrant up)默认在每台机器上运行。所以如果你运行 vagrant up 命令,Vagrant 会启动 web 和 DB 两个机器。也可以通过 vagrant up webvagrant up db 命令启动特定机器。

此外,可以指定一个正则表达式来仅匹配某些机器。这在指定很多类似机器的情况下很有用,例如,如果正在测试一个分布式服务,可能有一个 leader 机器以及 follower0,follower1,follower2 等。如果想启动所有 follower,而不是 leader,可以做 vagrant up /follower[0-9]/。如果 Vagrant 在正斜杠内看到一个机器名称,会认为正在使用正则表达式。

3. 机器之间通信

为了促进多机器间的通信,应使用各种网络选项。特别是,专用网络(private network)可用于在多台机器和主机之间建立专用网络。

4. 指定主机

可以指定一台主机。当未指定多机环境中的特定机器时,主机将成为默认机器。

要指定默认机器,只需在定义它时将其标记为 primary。只能指定一台主机。

config.vm.define "web", primary: true do |web|
# ...
end

5. 自动启动机器

默认情况下,在多机器环境中,vagrant up 将启动所有定义的机器。自动启动设置允许你告诉 Vagrant 不启动特定机器。例:

config.vm.define "web"
config.vm.define "db"
config.vm.define "db_follower", autostart: false

当使用上述设置运行 vagrant 时,Vagrant 将自动启动“web”和“db”机器,但不会启动“db_follower”。可以通过运行 vagrant up db_follower 手动强制启动“db_follower”机器。

Vagrant 手册之多个虚拟机 multi-machine的更多相关文章

  1. 区分虚拟机和machine simulator

    1 虚拟机和machine simulator的不同 虚拟机是让多个操作系统同时共用现有的硬件架构,它不会模拟新的硬件架构.qemu这样的模拟器是模拟新的硬件架构,这个架构和host不同.

  2. 虚拟机(Virtual Machine)和容器(Container)的对比

    目前云计算平台常用的虚拟化技术有虚拟机(Virtual Machine)和容器(Container)两种.虚拟机已经是比较成熟的技术,容器技术作为下一代虚拟化技术,国内的各厂商应用还不广,但似乎其代表 ...

  3. Vagrant 手册之 Provisioning - 基本用法

    原文地址 虽然 Vagrant 提供了用于配置虚拟机的多个选项,但是有标准用法,好多知识点对这个 provisioner 是通用的. 配置 首先,Vagrantfile 中配置的每个 provisio ...

  4. Vagrant 手册之网络 - 端口转发

    原文地址 Vagrantfile 配置文件中端口转发的网络标识符:forwarded_port,例如: config.vm.network "forwarded_port", gu ...

  5. 用VirtualBox快速安装虚拟机virtual Machine(Win7+IE10)

    前端测试,经常需要各种环境, 用“Virtual Box + OVA文件”安装虚拟机, 是简单高效的一种方法,可以安装各种window和IE的版本.下面以IE10 + Win7为例说明. 1) 下载和 ...

  6. Vagrant 手册之 Multi-machine 多机器

    原文地址 Vagrant 可以在一个 Vagrantfile 中定义并控制多个虚拟机.这就是"multi-machine"环境. 这些机器可以协同工作或互相关联.multi-mac ...

  7. Vagrant 手册之 Provisioning - file 配置程序

    原文地址 Provisioner 命令:"file" 通过 file 配置程序可以上传宿主机的文件或目录到虚拟机中. 使用场景:将宿主机的 ~/.gitconfig 复制到虚拟机中 ...

  8. Vagrant 手册之 Provisioning - 概述

    原文地址 通过 Vagrant 中的 provisioner 配置程序,可以在使用 vagrant up 启动虚拟机时,在虚拟机上执行安装软件.更改配置等操作. box 通常是通用的,而每个项目总有自 ...

  9. Vagrant 手册之 Provisioning - Shell 配置程序

    原文地址 Provisioner 命令:"shell" 示例: node.vm.provision "shell" do |s| s.inline = < ...

随机推荐

  1. JAVA总结--dubbo与zookeeper

    读累了就看看实操https://www.cnblogs.com/huasky/p/10214642.html 一.SOA 概念:SOA:Service-Oriented Architecture,面向 ...

  2. 2101 可达性统计(拓扑排序/dfs+状态压缩)

    [题目描述] 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. [题目链接] 2101 可达性统计 [算法] 拓扑排序之后逆序计算(感觉dfs更好写而且应 ...

  3. 大神级回答exists与in的区别

    google搜了一下,很多帖子,而且出发点不同,各有各的道理,但是有一个帖子讲的特别好: http://zhidao.baidu.com/question/134174568.html 忍不住在百度上 ...

  4. jQuery中$.get()和$.post()的异同点

    相同点:两者都是向服务器异步请求数据的. 不同点: 1.$.get() 方法使用GET方法来进行异步请求的,$.post() 方法使用POST方法来进行异步请求的. 2.如果前端使用$.get() 方 ...

  5. HTML文档流和脱离文档流

    文档流:也就是我们通常看到的由左到右.由上而下的元素排列形式,在网页中每个元素都是默认按照这个顺序进行排序和显示的. 脱离文档流:元素脱离文档流之后,将不再在文档流中占据空间,而是处于浮动状态(可以理 ...

  6. java调用sqlldr报错:Message 2100 not found

    java调用Oracle的sqlldr命令报错:Message 2100 not found; No message file for product=RDBMS, facility=ULMessag ...

  7. AOP技术介绍--(引言)

    软件设计因为引入面向对象思想而逐渐变得丰富起来.“一切皆为对象”的精义,使得程序世界所要处理的逻辑简化,开发者可以用一组对象以及这些对象之间的关系将软件系统形象地表示出来.而从对象的定义,进而到模块, ...

  8. 在PHPstorm上安装thinkPHP

    >环境:ubuntu php7.2 phpstorm https://blog.csdn.net/roukmanx/article/details/85646174 https://www.ka ...

  9. 启动模式:uefi, legacy,以及GRUB命令使用

    机器启动模式:uefi, legacy 设置入口:BIOS:boot mode 磁盘分区表格式: gpt uefi所使用(此种模式下,grub只能识别gpt格式的boot引导项) mbr legacy ...

  10. sonar-runner命令模式运行sonar

    适用环境:该种配置的模式适用于本地调试模式 前提条件:在工程路径下创建sonar-project.properties文件 该客户端的路径在系统配置文件中进行了定义 alias sonar-runne ...