如何使用Vagrant做多服务器基础架构
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