Vagrant 手册之多个虚拟机 multi-machine
原文地址
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"endconfig.vm.define "db" do |db|db.vm.box = "mysql"end endconfig.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"endconfig.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 web 或 vagrant ssh db。
其他命令(如 vagrant up)默認在每臺機器上運行。所以如果你運行 vagrant up 命令,Vagrant 會啟動 web 和 DB 兩個機器。也可以通過 vagrant up web 或 vagrant 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|# ... end5. 自動啟動機器
默認情況下,在多機器環境中,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”機器。
轉載于:https://www.cnblogs.com/kika/p/10851648.html
總結
以上是生活随笔為你收集整理的Vagrant 手册之多个虚拟机 multi-machine的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 下面的AIDL
- 下一篇: android 中的常用组件