使用工具
- Virtualbox
免费开源的虚拟机软件,使用它可以快速生成虚拟机 - Vagrant
基于Ruby的工具,用于创建和部署虚拟化开发环境 - Git
使用Git for Windows 来作命令行工具 - Centos
服务器集群基于centos,需要在 vagrant 官网下载centos 的 box
搭建步骤
- 创建 Vagrantfile
- 鼠标右键点击桌面,选择 git bash 进入 git 命令行
- 创建并进入工作目录
mkdir ~/Distributed && cd ~/Distributed
- 使用
vagrant init
命令生成 Vagrantfile
- 编辑 Vagrantfile 的内容如下所示
Vagrant.configure("2") do |config|
(1..3).each do |i|
config.vm.define "node#{i}" do |node|
# 设置虚拟机的Box
node.vm.box = "centos/7"
# 设置虚拟机的主机名
node.vm.hostname="node#{i}"
# 设置虚拟机的IP
node.vm.network "private_network", ip: "192.168.56.#{100+i}"
# 设置主机与虚拟机的共享目录
node.vm.synced_folder "~/VmProjects/Distributed/node#{i}/workspace", "/home/vagrant/workspace"
# VirtaulBox相关配置
node.vm.provider "virtualbox" do |v|
# 设置虚拟机的名称
v.name = "node#{i}"
# 设置虚拟机的内存大小
v.memory = 2048
# 设置虚拟机的CPU个数
v.cpus = 1
end
end
end
end
-
Vagrantfile 的基本语法
-
deploy.vm.provider
这句指定了虚拟机的提供者。本次使用 virtualbox。需要注意的是 Vagrant 只是虚拟机的编排工具,而它本身并不提供虚拟技术,需要跟其他虚拟机软件结合,例如:virtualbox、VMware。接下来的 v 就是对这台虚拟机的设置。v.name
:virtualbox 中这台虚拟机的名字v.memory
:该虚拟机的内存大小,单位是 MBv.cpus
:该虚拟机的 CPU 核数
-
vm.box
该虚拟机的初始化镜像名称,这里是 centos/7。 -
vm.hostname
该虚拟机的 hostname,ssh 连接时用的就是这个名字。请起一个有意义的名字,不然以后又得重设 -
vm.network
网络设置,Vagrant 有三种网络设置模式:Forwarded port
这种方式把本机和虚拟机的端口进行映射,例如:config.vm.forwarded_port 80 , 8080
这是把虚拟机的 80 端口映射到宿主机的 8080 端口,这样访问宿主机的 8080 端口就相当于访问虚拟机的 80 端口了。
Private network
这种方式是私有网络,只允许宿主机访问虚拟机。如果多个虚拟机设定在同一个网段,那么几个虚拟机之间也可以互相访问。相当于搭建了个小型集群。Public network
这种方式虚拟机的网络配置跟宿主机的网络配置一样,在外网别可以像访问宿主机一样访问虚拟机。
-
node.vm.synced_folder
主机与虚拟机的共享目录,该目录文件在windows下但会映射到虚拟机的目录
-
-
生成集群
- 运行
vagrant up
,即可生成集群
- 运行
可能出现的问题
-
如何下载 vagrant box 文件?
- 没有下载 box 直接使用 Vagrantfile 生成虚拟机,vagrant 会自动从远程下载 box 文件,速度可能会很慢。但直接下载 box 文件,又在官网找不到链接。
- 官网没有 box 的下载链接,只有 box 详情页
- 详情页的地址为
https://app.vagrantup.com/centos/boxes/7/versions/1905.1
- box 的下载链接则为详情页地址拼接 /providers/供应商名字.box 而成
- 提供商就是创建虚拟机软件的名称如 vmware、virtualbox
- 一个完整的下载地址如下
https://app.vagrantup.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
-
创建虚拟时出现
mount: unknown filesystem type 'vboxsf'
?- 这个问题是在创建虚拟机和本机映射目录时会出现的一个问题
- 使用如下命令下载 vagrant-vbguest 插件即可解决问题
vagrant plugin install vagrant-vbguest