Vagrant—多節點虛擬機集群搭建
一. 前言
在我們開發程序時,使用的運行環境一般都是自己的電腦,Windows、Mac或者Linux操作系統,在大多數時候能夠很好的運行軟件。然而,很多現代應用都是分布式的,在生產環境中,由多個節點形成一個集群,每個節點部署在不同的機器上。這種情況下,本地單機部署不能模擬生產環境中的集群環境,總不能為了模擬集群,專門去買幾臺主機來部署私有云,這樣成本太高了。因此,我認為使用虛擬機是性價比選擇,而Vagrant + VitualBox的組合是虛擬機中最方便的一種。
二. 單機虛擬機搭建
1.下載和安裝Vagrant+ VitualBox
Vagrant下載鏈接
- https://www.vagrantup.com/downloads.html
VitualBox下載鏈接
- https://www.virtualbox.org/wiki/Downloads
下載安裝完成后,在終端運行命令 vagrant -v ,出現類似下面的提示說明安裝成功。
- Vagrant 2.2.3
2.安裝Box
Box在Vagrant中的概念相當于操作系統,在使用Vagrant構建虛擬機之前,我們需要為Vagrant添加系統包,在官方提供的 Vagrant Cloud 網站下可以找到各種版本的操作系統,以 Ubuntu 16.04 LTS 版本的操作系統為例,對應的就是名為 ubuntu/xenial64 的Box。
2.1 安裝方式一
我們運行下面的命令就能直接添加這個Box,運行命令后,Vagrant會從遠程倉庫下載對應的Box
- ~ vagrant box add ubuntu/xenial64
2.2 安裝方式二
雖然上面的步驟看起來沒什么問題,但在實際執行過程中, 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 后面的就是下載鏈接,復制鏈接后,可直接粘貼到瀏覽器或者迅雷下載,實際測試中速度會快很多,不出意外幾分鐘就可以下載完。
下載完成后運行下面命令,添加本地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 目錄下會出現一個 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 文件中是虛擬機相關的配置信息,這里我們先使用默認配置,暫時不管它。
4.啟動虛擬機 & SSH登錄
4.1 構建并啟動虛擬機
初始化完成后,在 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
4.2 SSH登錄
在Vagrant使用SSH非常簡單,在 vagrant_test 目錄下運行下面命令
- ~ vagrant ssh
成功后就進入了虛擬機
三. 多借點虛擬集群搭建
上面使用的是Vagrant的單機模式,Vagrant也支持多機模式,即單個配置啟動多個虛擬機,它可以很方便的模擬服務器集群環境。集群和單機模式的區別僅在于Vagrantfile配置文件不同,在Vagrantfile中我們通過循環來創建多個虛擬機。
1. 初始化Vagrant
運行下面命令,初始化集群配置文件
- ~ mkdir vagrant_cluster
- ~ cd vagrant_cluster
- ~ vagrant init ubuntu/xenial64
2. 修改 Vagrantfile
在搭建虛擬機集群時,我們需要對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個虛擬機節點。
3. 構建并啟動虛擬機集群
啟動集群命令和常規命令一樣,運行下面的命令,會啟動所有虛擬機節點
- ~ vagrant up
啟動單個節點,可運行下面命令
- ~ vagrant up node1
其中, node1 為節點名稱。啟動多個虛擬機
- ~ vagrant up node1 node2
3.SSH登錄
登錄虛擬機單個節點
- ~ vagrant ssh node1
四. 常用虛擬機管理命令
- 啟動虛擬機:vagrant up
- 登錄虛擬機:vagrant ssh
- 重啟虛擬機:vagrant reload
- 關閉虛擬機:vagrant halt
- 銷毀虛擬機:vagrant destroy
總結
在資源有限的情況下,多節點虛擬機集群可以很好的幫助我們模擬分布式環境,在虛擬機中進行各種測試,即使系統損壞了也很容易恢復,每個虛擬機節點都是隔離的,沒有什么負擔。以上希望對你有幫助!