原文地址

Vagrant 可以在一个 Vagrantfile 中定义并控制多个虚拟机。这就是“multi-machine”环境。

这些机器可以协同工作或互相关联。multi-machine 的常见用例有:

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

注意,这只是生产环境的不准确模型,其行为可能有很大不同。

使用 Vagrant 的多机功能,可以在单个 Vagrant 环境中对这些环境进行建模。

定义多个机器

通过 config.vm.define 方法调用可以在一个 Vagrantfile 中定义多个机器,这个指令可以在配置中创建 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,与 config 变量完全相同,除了内部变量的任何配置只适用于被定义的机器。因此,web 上的任何配置只会影响 web 机器。

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

这类似语言如何具有不同的变量作用域。

在使用时,provisioner 等的执行顺序变得重要。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”。这是因为执行顺序是由外而内。

如果需要在多个机器上使用略有不同的配置,参考 这个知识点

控制多个机器

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

只有作用在单个机器上(如 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 在正斜杠内看到机器名称,则会认为正在使用正则表达式。

机器之间通信

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

指定主机器

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

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

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

自动启动机器

默认情况下,在多机器环境中,vagrant up 将启动所有定义的机器。autostart 选项可以告诉 Vagrant 不启动特定机器。例:

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

使用上面的设置运行 vagrant up 时,Vagrant 会自动启动 web 和 db 两个机器,但是不会启动 db_follower。可以通过 running vagrant up db_follower 手动启动。

Vagrant 手册之 Multi-machine 多机器的更多相关文章

  1. Vagrant 手册之多个虚拟机 multi-machine

    原文地址 Vagrant 可以通过一个 Vagrantfile 定义并控制多个客户机.这就是所谓的"multi-machine"多虚拟机环境. 这些机器通常可以协同工作,或者互相关 ...

  2. Vagrant 手册之 Vagrantfile - 机器设置 config.vm

    原文地址 配置的命名空间:config.vm config.vm 中的设置修改 Vagrant 管理的机器的配置. 1. 可用的设置项 config.vm.boot_timeout Vagrant 等 ...

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

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

  4. 【Poj1325】Machine Schedule机器调度

    目录 List Description Input Output Sample Input Sample Output HINT Solution Code Position: http://poj. ...

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

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

  6. Vagrant 手册之 Provisioning - 概述

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

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

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

  8. Vagrant 手册之 Vagrantfile - SSH 设置 config.ssh

    原文地址 配置的命名空间:config.ssh config.ssh 中的设置与配置 Vagrant 如何通过 SSH 访问您的计算机相关. 大多数 Vagrant 设置一样,一般使用默认设置即可,但 ...

  9. Vagrant 手册之 Vagrantfile - 提示及技巧

    原文地址 Vagrantfile 是一种非常灵活的配置格式.语法基于 Ruby,可以用它做很多事情.在本页使用一些提示和技巧时,请注意正确使用它们. 1. 使用循环定义虚拟机 如果你想对多机器应用稍微 ...

随机推荐

  1. RandomAccessFile类使用说明

    RandomAccessFile类是Java Io体系中功能最为丰富的文件访问类,它提供了众多的文件访问方法.RandomAccessFile类支持“随机访问”方式,这里的“随机”是指程序可以直接跳到 ...

  2. 7、 正则化(Regularization)

    7.1 过拟合的问题 到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fittin ...

  3. spark浅谈(3):

    一.shuffle操作 1.spark中特定的操作会触发我们都知道的shuffle事件,shuffle是spark进行数据重新分布的机制,这通常涉及跨执行程序和机器来赋值数据,使得混洗称为复杂而且昂贵 ...

  4. go中string类型转换为基本数据类型的方法

    代码 // string类型转基本数据类型 package main import ( "fmt" "strconv" ) func main() { str1 ...

  5. JavaScript数组为什么是对象

    有过PHP编程经验的程序员学习JavaScript的时候,会发现数组也是对象,这和PHP是不同的,在PHP中数组就是数组类型,并不是是对象.究竟为什么在JavaScript中数组会是对象呢? var ...

  6. 记录面试一位三年经验Web前端开发者的过程

    今天是2019年6月5日,后天就是端午节了,提前祝端午节快乐! 好了,开始这次面试过程的正题部分. 当我从人事手中接下这份三年哥(暂拟名称)的简历的时候,看到三年工作经验,心想 这应该是个大佬了 挺厉 ...

  7. VUE CLI3.X 创建项目

    Node.js环境搭建 Node.js基于V8引擎,可以让js代码脱离浏览器运行 Vue CLI3.0 需要Node.js 8.9或者更高版本. 用nvm或者nvm-windows在同一台电脑中管理多 ...

  8. linux机器间建立信任关系

    linux机器间建立信任关系 如何建立信任关系 在shell脚本中,需要使用scp命令将本地的文件复制到另一台机器中备份.但通常执行scp命令后都需要输入用户密码,这样在定时自动执行shell脚本中就 ...

  9. BZOJ2588 树上静态第k大

    题意翻译 给你一棵有n个结点的树,节点编号为1~n. 每个节点都有一个权值. 要求执行以下操作: U V K:求从节点u到节点v的第k小权值. 输入输出格式 输入格式 第一行有两个整数n和m(n,m≤ ...

  10. poj 1269 Intersecting Lines(直线相交)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8637   Accepted: 391 ...