Vagrant—多节点虚拟机集群搭建

作者:MeetMax 2019-09-03 16:18:03云计算虚拟化 在我们开发程序时,使用的运行环境一般都是自己的电脑,Windows、Mac或者Linux操作系统,在大多数时候能够很好的运行软件。

一. 前言

在我们开发程序时,使用的运行环境一般都是自己的电脑,Windows、Mac或者Linux操作系统,在大多数时候能够很好的运行软件。然而,很多现代应用都是分布式的,在生产环境中,由多个节点形成一个集群,每个节点部署在不同的机器上。这种情况下,本地单机部署不能模拟生产环境中的集群环境,总不能为了模拟集群,专门去买几台主机来部署私有云,这样成本太高了。因此,我认为使用虚拟机是性价比选择,而Vagrant + VitualBox的组合是虚拟机中最方便的一种。

[[275794]]

二. 单机虚拟机搭建

1.下载和安装Vagrant+ VitualBox

Vagrant下载链接

    https://www.vagrantup.com/downloads.html

VitualBox下载链接

    https://www.virtualbox.org/wiki/Downloads

下载安装完成后,在终端运行命令 vagrant -v ,出现类似下面的提示说明安装成功。

    Vagrant2.2.3

2.安装Box

Box在Vagrant中的概念相当于操作系统,在使用Vagrant构建虚拟机之前,我们需要为Vagrant添加系统包,在官方提供的 Vagrant Cloud 网站下可以找到各种版本的操作系统,以 Ubuntu 16.04 LTS 版本的操作系统为例,对应的就是名为 ubuntu/xenial64 的Box。

2.1 安装方式一

我们运行下面的命令就能直接添加这个Box,运行命令后,Vagrant会从远程仓库下载对应的Box

    ~vagrantboxaddubuntu/xenial64

2.2 安装方式二

虽然上面的步骤看起来没什么问题,但在实际执行过程中, Box 的下载速度慢到令人发指,可能需要几天才能下载完,所以这里需要换一种安装方式。

首先,还是先运行下面的命令

    ~vagrantboxaddubuntu/xenial64

运行后,终端上打印出类似下面的信息

    ~vagrantboxaddubuntu/xenial64/opt/vagrant/embedded/gems/2.2.3/gems/vagrant-2.2.3/lib/vagrant/util/which.rb:37:warning:Insecureworldwritabledir/Users/meetmax/testinPATH,mode040777==>box:Loadingmetadataforbox'ubuntu/xenial64'box:URL:https://vagrantcloud.com/ubuntu/xenial64==>box:Addingbox'ubuntu/xenial64'(v20190724.1.0)forprovider:virtualboxbox:Downloading:https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20190724.1.0/providers/virtualbox.box

接着, Ctrl + C 中断命令, Downloading 后面的就是下载链接,复制链接后,可直接粘贴到浏览器或者迅雷下载,实际测试中速度会快很多,不出意外几分钟就可以下载完。

下载完成后运行下面命令,添加本地Box

    ~vagrantboxadd/your/path/virtualbox.box--nameYourBoxName

其中把 virtualbox.box 路径改成自己的本地路径, –name 后面是Box的名字,可自己命名,正常情况下可以和官方保持一致,即 ubuntu/xenial64 。

2.3 验证

安装完成后,运行下面命令验证安装是否成功

    ~vagrantboxlist

终端会打印类似下面的信息

    laravel/homestead(virtualbox,5.1.0)ubuntu/xenial64(virtualbox,0)

查看是否有你刚刚安装的Box。

3. 初始化Vagrant

Box安装完成后,运行下面命令初始化Vagrant

    ~mkdirvagrant_test~cdvagrant_test~vagrantinitubuntu/xenial64

运行完成后, vagrant_test 目录下会出现一个 Vagrantfile 文件,终端打印类似下面的信息。

    A`Vagrantfile`hasbeenplacedinthisdirectory.Youarenowreadyto`vagrantup`yourfirstvirtualenvironment!PleasereadthecommentsintheVagrantfileaswellasdocumentationon`vagrantup.com`formoreinformationonusingVagrant.

Vagrantfile 文件中是虚拟机相关的配置信息,这里我们先使用默认配置,暂时不管它。

4.启动虚拟机 & SSH登录

4.1 构建并启动虚拟机

初始化完成后,在 vagrant_test 目录下运行下面命令构建并运行虚拟机

    ~vagrantup

在出现类似下面信息后说明启动成功

    ==>default:Machinebootedandready!==>default:CheckingforguestadditionsinVM...default:TheguestadditionsonthisVMdonotmatchtheinstalledversionofdefault:VirtualBox!Inmostcasesthisisfine,butinrarecasesitcandefault:preventthingssuchassharedfoldersfromworkingproperly.Ifyouseedefault:sharedfoldererrors,pleasemakesuretheguestadditionswithinthedefault:virtualmachinematchtheversionofVirtualBoxyouhaveinstalledondefault:yourhostandreloadyourVM.default:default:GuestAdditionsVersion:5.1.38default:VirtualBoxVersion:6.0==>default:Mountingsharedfolders...default:/vagrant=>/Users/meetmax/vagrant/vagrant_test

4.2 SSH登录

在Vagrant使用SSH非常简单,在 vagrant_test 目录下运行下面命令

    ~vagrantssh

成功后就进入了虚拟机

三. 多借点虚拟集群搭建

上面使用的是Vagrant的单机模式,Vagrant也支持多机模式,即单个配置启动多个虚拟机,它可以很方便的模拟服务器集群环境。集群和单机模式的区别仅在于Vagrantfile配置文件不同,在Vagrantfile中我们通过循环来创建多个虚拟机。

1. 初始化Vagrant

运行下面命令,初始化集群配置文件

    ~mkdirvagrant_cluster~cdvagrant_cluster~vagrantinitubuntu/xenial64

2. 修改 Vagrantfile

在搭建虚拟机集群时,我们需要对Vagrantfile做相应修改,配置文件如下。

    Vagrant.configure("2")do|config|(1..4).eachdo|i|#定义节点变量config.vm.define"node#{i}"do|node|#box配置node.vm.box="ubuntu/xenial64"#设置虚拟机的主机名node.vm.hostname="node#{i}"#设置虚拟机的IPnode.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=1endendendend

具体虚拟机的配置请参考文件中的注释,和单虚拟机创建不同的地方是,集群创建通过 (1..4).each 循环创建了4个虚拟机节点。

3. 构建并启动虚拟机集群

启动集群命令和常规命令一样,运行下面的命令,会启动所有虚拟机节点

    ~vagrantup

启动单个节点,可运行下面命令

    ~vagrantupnode1

其中, node1 为节点名称。启动多个虚拟机

    ~vagrantupnode1node2

3.SSH登录

登录虚拟机单个节点

    ~vagrantsshnode1

四. 常用虚拟机管理命令

启动虚拟机:vagrant up登录虚拟机:vagrant ssh重启虚拟机:vagrant reload关闭虚拟机:vagrant halt销毁虚拟机:vagrant destroy

总结

在资源有限的情况下,多节点虚拟机集群可以很好的帮助我们模拟分布式环境,在虚拟机中进行各种测试,即使系统损坏了也很容易恢复,每个虚拟机节点都是隔离的,没有什么负担。以上希望对你有帮助!