在軟件開發時,程序的運行環境大部分是本身的電腦,Windows、Mac或者Linux操做系統,在大多數時候可以很好的運行軟件。然而,有不少分佈式應用在本地不能很好的被模擬。這類應用,在生產環境中由多個節點造成一個集羣,每一個節點部署在不一樣的機器上。咱們通常也不會爲了模擬集羣,專門去買幾臺主機來部署私有云,這樣成本過高了。所以,我認爲使用虛擬機是性價比最高的選擇,而Vagrant + VitualBox的組合是虛擬機中最方便的一種。html
1.Vagrant下載連接
https://www.vagrantup.com/downloads.html
2.VitualBox下載連接
https://www.virtualbox.org/wiki/Downloads
下載安裝完成後,在終端運行命令 vagrant -v
,出現相似下面的提示說明安裝成功。node
Vagrant 2.2.3
Box在Vagrant中的概念至關於操做系統,在使用Vagrant構建虛擬機以前,咱們須要爲Vagrant添加系統包,在官方提供的Vagrant Cloud網站下能夠找到各類版本的操做系統,以 Ubuntu 16.04 LTS
版本的操做系統爲例,對應的就是名爲ubuntu/xenial64
的Box。laravel
咱們運行下面的命令就能直接添加這個Box,運行命令後,Vagrant會從遠程倉庫下載對應的Boxubuntu
~ vagrant box add ubuntu/xenial64
雖然上面的步驟看起來沒什麼問題,但在實際執行過程當中,Box
的下載速度慢到使人髮指,可能須要幾天才能下載完,因此這裏須要換一種安裝方式。瀏覽器
~ vagrant box add ubuntu/xenial64
~ vagrant box add ubuntu/xenial64 /opt/vagrant/embedded/gems/2.2.3/gems/vagrant-2.2.3/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /Users/meetmax/test in PATH, mode 040777 ==> box: Loading metadata for box 'ubuntu/xenial64' box: URL: https://vagrantcloud.com/ubuntu/xenial64 ==> box: Adding box 'ubuntu/xenial64' (v20190724.1.0) for provider: virtualbox box: Downloading: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20190724.1.0/providers/virtualbox.box
接着,Ctrl + C
中斷命令,Downloading
後面的就是下載連接,複製連接後,可直接粘貼到瀏覽器或者迅雷下載,實際測試中速度會快不少,不出意外幾分鐘就能夠下載完。bash
~ vagrant box add /your/path/virtualbox.box --name YourBoxName
其中把virtualbox.box
路徑改爲本身的本地路徑,--name
後面是Box的名字,可本身命名,正常狀況下能夠和官方保持一致,即ubuntu/xenial64
。服務器
安裝完成後,運行下面命令驗證安裝是否成功app
~ vagrant box list
終端會打印相似下面的信息ssh
laravel/homestead (virtualbox, 5.1.0) ubuntu/xenial64 (virtualbox, 0)
查看是否有你剛剛安裝的Box。分佈式
Box安裝完成後,運行下面命令初始化Vagrant
~ mkdir vagrant_test ~ cd vagrant_test ~ vagrant init ubuntu/xenial64
運行完成後,vagrant_test
目錄下會出現一個Vagrantfile
文件,終端打印相似下面的信息。
A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Vagrantfile 文件中是虛擬機相關的配置信息,這裏咱們先使用默認配置,暫時無論它。
初始化完成後,在vagrant_test
目錄下運行下面命令構建並運行虛擬機
~ vagrant up
在出現相似下面信息後說明啓動成功
==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 5.1.38 default: VirtualBox Version: 6.0 ==> default: Mounting shared folders... default: /vagrant => /Users/meetmax/vagrant/vagrant_test
在Vagrant使用SSH很是簡單,在vagrant_test
目錄下運行下面命令
~ vagrant ssh
成功後就進入了虛擬機
上面使用的是Vagrant的單機模式,Vagrant也支持多機模式,即單個配置啓動多個虛擬機,它能夠很方便的模擬服務器集羣環境。集羣和單機模式的區別僅在於Vagrantfile配置文件不一樣,在Vagrantfile中咱們經過循環來建立多個虛擬機。
運行下面命令,初始化集羣配置文件
~ mkdir vagrant_cluster ~ cd vagrant_cluster ~ vagrant init ubuntu/xenial64
在搭建虛擬機集羣時,咱們須要對Vagrantfile作相應修改,配置文件以下。
Vagrant.configure("2") do |config| (1..4).each do |i| #定義節點變量 config.vm.define "node#{i}" do |node| # box配置 node.vm.box = "ubuntu/xenial64" # 設置虛擬機的主機名 node.vm.hostname = "node#{i}" # 設置虛擬機的IP node.vm.network "private_network", ip: "192.168.60.#{10+i}" # 設置主機與虛擬機的共享目錄 node.vm.synced_folder "/Users/meetmax", "/home/vagrant/code" # VirtaulBox相關配置 node.vm.provider "virtualbox" do |v| # 設置虛擬機的名稱 v.name = "node#{i}" # 設置虛擬機的內存大小 v.memory = 2048 # 設置虛擬機的CPU個數 v.cpus = 1 end end end end
具體虛擬機的配置請參考文件中的註釋,和單虛擬機建立不一樣的地方是,集羣建立經過(1..4).each
循環建立了4個虛擬機節點。
啓動集羣命令和常規命令同樣,運行下面的命令,會啓動全部虛擬機節點
~ vagrant up
啓動單個節點,可運行下面命令
~ vagrant up node1
其中,node1
爲節點名稱。啓動多個虛擬機
~ vagrant up node1 node2
登陸虛擬機單個節點
~ vagrant ssh node1
在資源有限的狀況下,多節點虛擬機集羣能夠很好的幫助咱們模擬分佈式環境,在虛擬機中進行各類測試,即便系統損壞了也很容易恢復,每一個虛擬機節點都是隔離的,沒有什麼負擔。以上但願對你有幫助!