Vagrant—多節(jié)點虛擬機(jī)集群搭建
一. 前言
在我們開發(fā)程序時,使用的運行環(huán)境一般都是自己的電腦,Windows、Mac或者Linux操作系統(tǒng),在大多數(shù)時候能夠很好的運行軟件。然而,很多現(xiàn)代應(yīng)用都是分布式的,在生產(chǎn)環(huán)境中,由多個節(jié)點形成一個集群,每個節(jié)點部署在不同的機(jī)器上。這種情況下,本地單機(jī)部署不能模擬生產(chǎn)環(huán)境中的集群環(huán)境,總不能為了模擬集群,專門去買幾臺主機(jī)來部署私有云,這樣成本太高了。因此,我認(rèn)為使用虛擬機(jī)是性價比選擇,而Vagrant + VitualBox的組合是虛擬機(jī)中最方便的一種。
二. 單機(jī)虛擬機(jī)搭建
1.下載和安裝Vagrant+ VitualBox
Vagrant下載鏈接
- https://www.vagrantup.com/downloads.html
VitualBox下載鏈接
- https://www.virtualbox.org/wiki/Downloads
下載安裝完成后,在終端運行命令 vagrant -v ,出現(xiàn)類似下面的提示說明安裝成功。
- Vagrant 2.2.3
2.安裝Box
Box在Vagrant中的概念相當(dāng)于操作系統(tǒng),在使用Vagrant構(gòu)建虛擬機(jī)之前,我們需要為Vagrant添加系統(tǒng)包,在官方提供的 Vagrant Cloud 網(wǎng)站下可以找到各種版本的操作系統(tǒng),以 Ubuntu 16.04 LTS 版本的操作系統(tǒng)為例,對應(yīng)的就是名為 ubuntu/xenial64 的Box。
2.1 安裝方式一
我們運行下面的命令就能直接添加這個Box,運行命令后,Vagrant會從遠(yuǎn)程倉庫下載對應(yīng)的Box
- ~ vagrant box add ubuntu/xenial64
2.2 安裝方式二
雖然上面的步驟看起來沒什么問題,但在實際執(zhí)行過程中, Box 的下載速度慢到令人發(fā)指,可能需要幾天才能下載完,所以這里需要換一種安裝方式。
首先,還是先運行下面的命令
- ~ 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 后面的就是下載鏈接,復(fù)制鏈接后,可直接粘貼到瀏覽器或者迅雷下載,實際測試中速度會快很多,不出意外幾分鐘就可以下載完。
下載完成后運行下面命令,添加本地Box
- ~ vagrant box add /your/path/virtualbox.box --name YourBoxName
其中把 virtualbox.box 路徑改成自己的本地路徑, --name 后面是Box的名字,可自己命名,正常情況下可以和官方保持一致,即 ubuntu/xenial64 。
2.3 驗證
安裝完成后,運行下面命令驗證安裝是否成功
- ~ vagrant box list
終端會打印類似下面的信息
- laravel/homestead (virtualbox, 5.1.0)
- ubuntu/xenial64 (virtualbox, 0)
查看是否有你剛剛安裝的Box。
3. 初始化Vagrant
Box安裝完成后,運行下面命令初始化Vagrant
- ~ mkdir vagrant_test
- ~ cd vagrant_test
- ~ vagrant init ubuntu/xenial64
運行完成后, vagrant_test 目錄下會出現(xiàn)一個 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 文件中是虛擬機(jī)相關(guān)的配置信息,這里我們先使用默認(rèn)配置,暫時不管它。
4.啟動虛擬機(jī) & SSH登錄
4.1 構(gòu)建并啟動虛擬機(jī)
初始化完成后,在 vagrant_test 目錄下運行下面命令構(gòu)建并運行虛擬機(jī)
- ~ vagrant up
在出現(xiàn)類似下面信息后說明啟動成功
- ==> 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
4.2 SSH登錄
在Vagrant使用SSH非常簡單,在 vagrant_test 目錄下運行下面命令
- ~ vagrant ssh
成功后就進(jìn)入了虛擬機(jī)
三. 多借點虛擬集群搭建
上面使用的是Vagrant的單機(jī)模式,Vagrant也支持多機(jī)模式,即單個配置啟動多個虛擬機(jī),它可以很方便的模擬服務(wù)器集群環(huán)境。集群和單機(jī)模式的區(qū)別僅在于Vagrantfile配置文件不同,在Vagrantfile中我們通過循環(huán)來創(chuàng)建多個虛擬機(jī)。
1. 初始化Vagrant
運行下面命令,初始化集群配置文件
- ~ mkdir vagrant_cluster
- ~ cd vagrant_cluster
- ~ vagrant init ubuntu/xenial64
2. 修改 Vagrantfile
在搭建虛擬機(jī)集群時,我們需要對Vagrantfile做相應(yīng)修改,配置文件如下。
- Vagrant.configure("2") do |config|
- (1..4).each do |i|
- #定義節(jié)點變量
- config.vm.define "node#{i}" do |node|
- # box配置
- node.vm.box = "ubuntu/xenial64"
- # 設(shè)置虛擬機(jī)的主機(jī)名
- node.vm.hostname = "node#{i}"
- # 設(shè)置虛擬機(jī)的IP
- node.vm.network "private_network", ip: "192.168.60.#{10+i}"
- # 設(shè)置主機(jī)與虛擬機(jī)的共享目錄
- node.vm.synced_folder "/Users/meetmax", "/home/vagrant/code"
- # VirtaulBox相關(guān)配置
- node.vm.provider "virtualbox" do |v|
- # 設(shè)置虛擬機(jī)的名稱
- v.name = "node#{i}"
- # 設(shè)置虛擬機(jī)的內(nèi)存大小
- v.memory = 2048
- # 設(shè)置虛擬機(jī)的CPU個數(shù)
- v.cpus = 1
- end
- end
- end
- end
具體虛擬機(jī)的配置請參考文件中的注釋,和單虛擬機(jī)創(chuàng)建不同的地方是,集群創(chuàng)建通過 (1..4).each 循環(huán)創(chuàng)建了4個虛擬機(jī)節(jié)點。
3. 構(gòu)建并啟動虛擬機(jī)集群
啟動集群命令和常規(guī)命令一樣,運行下面的命令,會啟動所有虛擬機(jī)節(jié)點
- ~ vagrant up
啟動單個節(jié)點,可運行下面命令
- ~ vagrant up node1
其中, node1 為節(jié)點名稱。啟動多個虛擬機(jī)
- ~ vagrant up node1 node2
3.SSH登錄
登錄虛擬機(jī)單個節(jié)點
- ~ vagrant ssh node1
四. 常用虛擬機(jī)管理命令
- 啟動虛擬機(jī):vagrant up
- 登錄虛擬機(jī):vagrant ssh
- 重啟虛擬機(jī):vagrant reload
- 關(guān)閉虛擬機(jī):vagrant halt
- 銷毀虛擬機(jī):vagrant destroy
總結(jié)
在資源有限的情況下,多節(jié)點虛擬機(jī)集群可以很好的幫助我們模擬分布式環(huán)境,在虛擬機(jī)中進(jìn)行各種測試,即使系統(tǒng)損壞了也很容易恢復(fù),每個虛擬機(jī)節(jié)點都是隔離的,沒有什么負(fù)擔(dān)。以上希望對你有幫助!