如何使用Vagrant做多服务器基础架构

时间:2020-01-09 10:34:22  来源:igfitidea点击:

Vagrant已证明自己是测试服务和应用程序开发的出色工具。大多数人都知道可以使用它来架起模仿生产环境的服务器,但是很少有人知道它对多服务器的支持。在本教程中,我将向我们展示如何使用Vagrant站立整个应用程序堆栈。

每个Web应用程序都有一个应用程序服务器,这不用多说。它们通常还具有后端数据库服务器,并且它们在所有内容之前可能都具有缓存服务,例如Redis。

借助Vagrant的多服务器支持,我们可以搭建一个模拟生产的完整环境。好处是操作可以测试其配置,开发人员可以更好地代表生产。

我们的实验室环境

本教程中的环境将具有以下基础结构。我们将使用MongoDB作为数据库,使用Redis进行缓存,将一个简单的NodeJS Express API用作应用程序。

Vagrantfile

能够将我们所有的服务器合并到一个Vagrantfile中,这使其更易于移植且更易于管理。如果我们已经熟悉Vagrantfiles,那么学习如何添加其他服务器将变得轻而易举。

以下是一个Vagrantfile,它定义了三个服务器:webapp,mysql和redis。每个服务器使用相同的Ubuntu 16.04发行版,因此我们将其全局设置。然后,在每台服务器内,我们根据预期目的自定义VM。

Vagrant.configure("2") do |config|

    # All servers will run Ubuntu 16.04
    config.vm.box = "ubuntu/xenial64"
    config.vm.box_check_update = true

    # Create the NodeJS App Server
    config.vm.define "webapp" do |webapp|
        webapp.vm.hostname = "webapp"
        webapp.vm.network "private_network", ip: "192.168.50.30"
        webapp.vm.provider "virtualbox" do |v|
            v.name = "webapp"
            v.memory = 2048
            v.cpus = 2
            v.linked_clone = true
            v.gui = false
        end

        webapp.vm.provision "shell", inline: <<-SHELL 
          sudo apt update
          sudo apt upgrade -y

          sudo apt install apache2 -y
        SHELL
    end

    # Create the MySQL Server
    config.vm.define "mysql" do |mysql|
        mysql.vm.hostname = "zk1"
        mysql.vm.network "private_network", ip: "192.168.50.31"
        mysql.vm.provider "virtualbox" do |v|
            v.name = "mysql"
            v.memory = 2048
            v.cpus = 1
            v.linked_clone = true
            v.gui = false
        end
        mysql.vm.provision "shell", inline: <<-SHELL 
          sudo apt update
          sudo apt upgrade -y

          sudo apt install mysql-server -y
        SHELL
    end

    # Create the Redis Server
    config.vm.define "redis" do |redis|
        redis.vm.hostname = "redis"
        redis.vm.network "private_network", ip: "192.168.50.32"
        redis.vm.provider "virtualbox" do |v|
            v.name = "redis"
            v.memory = 2048
            v.cpus = 1
            v.linked_clone = true
            v.gui = false
        end
        redis.vm.provision "shell", inline: <<-SHELL 
          sudo apt update
          sudo apt upgrade -y

          sudo apt install redis
        SHELL
    end

end

进行相同的设置,然后运行vagrant up命令。将依次创建,启动和配置每个服务器。

启动Vagrant环境

vagrant up

管理多服务器环境

随着所有服务器的运行,我们将需要一种单独与之交互的方法。我们可能需要安装到特定服务器或者重新配置它。幸运的是,我们可以在使用Vagrant命令时指定服务器。

启动服务器

我们可以启动所有服务器,也可以仅启动特定服务器。

启动所有服务器

vagrant up

启动特定的服务器

vagrant up webapp

SSH到服务器

我们使用vagrant ssh命令将其封装到我们的Vagrant服务器中。仅运行一台服务器时,只需运行vagrant ssh。但是,这在多服务器设置中不起作用。我们需要指定要装入的服务器。

vagrant ssh webapp
vagrant ssh mysql

流浪的ssh redis

重新配置服务器

通过配置,我们可以重新配置所有服务器,也可以配置特定的服务器。

调配所有服务器

vagrant provision

设置特定服务器

vagrant provision webapp