这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战
因想要练习搭建WEB集群和Mysql主从复制等,需要在本地模拟出几台虚拟机。这里使用VirtualBox和Vagrant搭建虚拟机,使用Vagrant能够方便的管理虚拟机,不用对底层的VirtualBox做什么操作,利用Vagrant box镜像能够快速的创建虚拟机。这样创建多个虚拟机后,每次练习时都要一个一个start、halt,这样很繁琐,所以想要统一启动、关闭、挂起、恢复。经过资料查找,可以在一个VagrantFile配置文件中配置多台虚拟机,具体步骤如下:
创建VagrantFile
$ vagrant box add centos65 /path/to/centos65.box
$ mkdir cluster ; cd cluster
$ vagrant init centos65
这样会在cluster目录下生成配置文件Vagrantfile
修改配置文件
这里暂且创建主机名为web、redis、master、slave的四个虚拟机,Vagrantfile配置如下:
Vagrant.configure("2") do |config|
config.vm.define :web do |web|
web.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
end
web.vm.box = "centos65"
web.vm.hostname = "web"
web.vm.network :private_network, ip: "192.168.33.11"
web.vm.synced_folder "/Users/xxx/Code/cluster", "/data/www"
web.vm.network "forwarded_port", guest: 80, host: 8080
end
config.vm.define :redis do |redis|
redis.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "redis", "--memory", "512"]
end
redis.vm.box = "centos65"
redis.vm.hostname = "redis"
redis.vm.network :private_network, ip: "192.168.33.12"
end
config.vm.define :master do |master|
master.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "master", "--memory", "512"]
end
master.vm.box = "centos65"
master.vm.hostname = "master"
master.vm.network :private_network, ip: "192.168.33.13"
end
config.vm.define :slave do |slave|
slave.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "slave", "--memory", "512"]
end
slave.vm.box = "centos65"
slave.vm.hostname = "slave"
slave.vm.network :private_network, ip: "192.168.33.14"
end
end
其中web虚拟机将Nginx的网站目录同步到本机目录,80端口转发到本机8080端口,方便调试。这样再添加虚拟机时只需复制粘贴一段,修改主机名和IP即可。
启动连接虚拟机
配置好Vagrantfile后即可使用vagrant up同时启动四个虚拟机,并且使用vagrant ssh 主机名进入系统。
$ cd cluster
$ vagrant up
$ vagrant ssh web
常用命令
启动虚拟机
$ vagrant up
关闭虚拟机
$ vagrant halt
挂起虚拟机
$ vagrant suspend
恢复虚拟机
$ vagrant resume
查看状态
$ vagrant status