原文地址

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

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

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

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

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

定义多个机器

通过 config.vm.define 方法调用可以在一个 Vagrantfile 中定义多个机器,这个指令可以在配置中创建 Vagrant 配置:

  1. Vagrant.configure("2") do |config|
  2. config.vm.provision "shell", inline: "echo Hello"
  3. config.vm.define "web" do |web|
  4. web.vm.box = "apache"
  5. end
  6. config.vm.define "db" do |db|
  7. db.vm.box = "mysql"
  8. end
  9. end

正如你所看到的,config.vm.define 带有另一个变量的块。这个变量,比如上面的 web,与 config 变量完全相同,除了内部变量的任何配置只适用于被定义的机器。因此,web 上的任何配置只会影响 web 机器。

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

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

在使用时,provisioner 等的执行顺序变得重要。Vagrant 按照 Vagrantfile 中列出的顺序根据作用域由外而内执行。例如,使用下面的 Vagrantfile:

  1. Vagrant.configure("2") do |config|
  2. config.vm.provision :shell, inline: "echo A"
  3. config.vm.define :testing do |test|
  4. test.vm.provision :shell, inline: "echo B"
  5. end
  6. config.vm.provision :shell, inline: "echo C"
  7. 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 将其标记为主。只能指定一台主机器。

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

自动启动机器

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

  1. config.vm.define "web"
  2. config.vm.define "db"
  3. 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. opencv中画圆circle函数和椭圆ellipse函数

    1.      void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, ...

  2. JS相比TS的缺点(或TS的优点)

    JS只有在运行时,才会抛出错误, JS里有任何的拼写错误 都不会提示错误 JS运行时报的错,指向也未必是错误的源头,也就是说:A类里因为书写代码有误,会造成运行时其他的类报错如B JS无法做到不同pa ...

  3. 搜索---DFS

    DFS   广度优先一层一层遍历,每一层得到的所有新节点,要用队列存储起来以备下一层遍历的时候再遍历.   而深度优先遍历搜索在得到一个新节点时立即对新节点进行遍历:从节点0出发开始遍历,得到新节点6 ...

  4. 基于cdn方式的vue+element-ui的单页面架构

    一.下载vue2.x,下载element-ui.js以及css 二.html文件 <!DOCTYPE html> <html> <head> <meta ch ...

  5. 分布式锁的实现【基于ZooKeeper】

    引言 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  6. Message相关函数对比

      SendMessage PostMessage  过程类型 同步过程:等待其他程序处理消息完了之后才返回,继续执行 异步过程:只把消息放入队列,不管其他程序是否处理都返回,然后继续执行 返回值 表 ...

  7. 了解卷积神经网络如何使用TDA学习

    在我之前的文章中,我讨论了如何对卷积神经网络(CNN)学习的权重进行拓扑数据分析,以便深入了解正在学习的内容以及如何学习它. 这项工作的重要性可归纳如下: 它使我们能够了解神经网络如何执行分类任务. ...

  8. vertica copy

    copy huimei.ken_copy  from '/home/dbadmin/file.txt' delimiter ';'

  9. springboot2.0整合redis的发布和订阅

    1.Maven引用 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  10. 029:url标签使用详解

    url标签使用详解: 在模版中,我们经常要写一些 url ,比如某个 a 标签中需要定义 href 属性.当然如果通过硬编码的方式直接将这个 url 写死在里面也是可以的.但是这样对于以后项目维护可能 ...