Vagrant—多節點虛擬機集羣搭建

一. 前言

在軟件開發時,程序的運行環境大部分是本身的電腦,Windows、Mac或者Linux操做系統,在大多數時候可以很好的運行軟件。然而,有不少分佈式應用在本地不能很好的被模擬。這類應用,在生產環境中由多個節點造成一個集羣,每一個節點部署在不一樣的機器上。咱們通常也不會爲了模擬集羣,專門去買幾臺主機來部署私有云,這樣成本過高了。所以,我認爲使用虛擬機是性價比最高的選擇,而Vagrant + VitualBox的組合是虛擬機中最方便的一種。html

二. 單機虛擬機搭建

1.下載和安裝Vagrant+ VitualBox

1.Vagrant下載連接
https://www.vagrantup.com/downloads.html
2.VitualBox下載連接
https://www.virtualbox.org/wiki/Downloads
下載安裝完成後,在終端運行命令 vagrant -v ,出現相似下面的提示說明安裝成功。node

Vagrant 2.2.3

2.安裝Box

Box在Vagrant中的概念至關於操做系統,在使用Vagrant構建虛擬機以前,咱們須要爲Vagrant添加系統包,在官方提供的Vagrant Cloud網站下能夠找到各類版本的操做系統,以 Ubuntu 16.04 LTS版本的操做系統爲例,對應的就是名爲ubuntu/xenial64 的Box。laravel

2.1 安裝方式一

咱們運行下面的命令就能直接添加這個Box,運行命令後,Vagrant會從遠程倉庫下載對應的Boxubuntu

~ vagrant box add ubuntu/xenial64

2.2 安裝方式二

雖然上面的步驟看起來沒什麼問題,但在實際執行過程當中,Box的下載速度慢到使人髮指,可能須要幾天才能下載完,因此這裏須要換一種安裝方式。瀏覽器

1.首先,仍是先運行下面的命令
~ vagrant box add ubuntu/xenial64
2.運行後,終端上打印出相似下面的信息
~ 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

3.下載完成後運行下面命令,添加本地Box
~ vagrant box add /your/path/virtualbox.box --name YourBoxName

其中把virtualbox.box 路徑改爲本身的本地路徑,--name後面是Box的名字,可本身命名,正常狀況下能夠和官方保持一致,即ubuntu/xenial64 服務器

2.3 驗證

安裝完成後,運行下面命令驗證安裝是否成功app

~ vagrant box list

終端會打印相似下面的信息ssh

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

4. SSH登陸

登陸虛擬機單個節點

~ vagrant ssh node1

四. 經常使用虛擬機管理命令

  • 啓動虛擬機:vagrant up
  • 登陸虛擬機:vagrant ssh
  • 重啓虛擬機:vagrant reload
  • 關閉虛擬機:vagrant halt
  • 銷燬虛擬機:vagrant destroy

總結

在資源有限的狀況下,多節點虛擬機集羣能夠很好的幫助咱們模擬分佈式環境,在虛擬機中進行各類測試,即便系統損壞了也很容易恢復,每一個虛擬機節點都是隔離的,沒有什麼負擔。以上但願對你有幫助!

相關文章
相關標籤/搜索