Vagrant创建多节点虚拟机集群

使用Vagrant创建多节点虚拟机集群,可以作为HadoopSpark以及Storm等分布式系统的运行环境。
如图所示,我们需要创建很多虚拟机:
一、 集群创建
1. 安装VirtualBox
2. 安装Vagrant
3. 下载Box
4. 创建虚拟机
4.1 建立开发环境目录,把下载好的centos-7.0-x86_64.box放到cluster目录下。
$ mkdir vagrant/cluster
$ cd vagrant/cluster
4.2 创建虚拟机所依赖的box
$ vagrant box add cluster centos-7.0-x86_64.box
4.3 生成创建虚拟机的所依赖的Vagrantfile
$ vagrant init cluster
5. 编辑Vagrantfile
$ vim Vagrantfile
Vagrantfile如下,可以通过注释理解每个自定义配置的含义:注意:ip地址末位禁止使用 0,255,1(一般默认给网关了)
Vagrant.configure("2") do |config|
  (10..13).each do |i|
    config.vm.define "node#{i}" do |node|
      # 设置虚拟机的Box
      node.vm.box = "cluster"
      # 设置虚拟机的主机名
      node.vm.hostname="node#{i}"
      # 设置虚拟机的IP
      node.vm.network "private_network", ip: "192.168.100.#{i}"
      # 设置主机与虚拟机的共享目录(前面目录本地,后面目录虚拟机,如果是windows系统加上盘符)
      node.vm.synced_folder "/data/wwwroot/cluster", "/data/wwwroot/cluster"
      # VirtaulBox相关配置
      node.vm.provider "virtualbox" do |v|
      # 设置虚拟机的名称
      v.name = "node#{i}"
      # 设置虚拟机的内存大小 
      v.memory = 512
      # 设置虚拟机的CPU个数
      v.cpus = 1
      end
 
      # 使用shell脚本进行软件安装和配置
      #node.vm.provision "shell", inline: <<-SHELL
      # 安装docker 1.11.0
      #wget -qO- https://get.docker.com/ | sed 's/docker-engine/docker-engine=1.11.0-0~trusty/' | sh
      #usermod -aG docker vagrant
 
      #SHELL
      end
  end
end
与创建单个虚拟机相比,创建多个虚拟机时多了一层循环,而变量i可以用于设置节点的名称与IP,使用#{i}取值:
(10..13).each do |i|

end
可知,一共创建了4个虚拟机。
6. 在本地创建/data/wwwroot/cluster内容同步目录(windows系统加上盘符)
本地/data/wwwroot/cluster目录将与虚拟机内的/data/wwwroot/cluster目录内容实时同步
$ mkdir /data/wwwroot/cluster
7. 创建虚拟机
$ vagrant up
创建4个虚拟机大概需要十几分钟,当然这和机器性能还有网速相关。安装Docker可能会比较慢,不需要的话删除下面几行或者注释掉就可以了:
# 使用shell脚本进行软件安装和配置
node.vm.provision "shell", inline: <<-SHELL
  # 安装docker 1.11.0
  wget -qO- https://get.docker.com/ | sed 's/docker-engine/docker-engine=1.11.0-0~trusty/' | sh
  usermod -aG docker vagrant
SHELL
下面是Vagrant虚拟机的配置,可以根据需要进行更改:
• 用户/密码: vagrant/vagrant
• 共享目录: 桌面上的share目录将与虚拟机内的/home/vagrant/share目录内容实时同步
• 内存:512M
• CPU: 1
 
二、 集群管理
1. 常用命令
下面是一些常用的Vagrant管理命令,操作特定虚拟机时仅需指定虚拟机的名称。
vagrant ssh: SSH登陆虚拟机
vagrant halt: 关闭虚拟机
vagrant destroy: 删除虚拟机
vagrant ssh-config 查看虚拟机SSH配置
 
启动单个虚拟机:
vagrant up node1
启动多个虚拟机:
vagrant up node1 node2 ...
启动所有虚拟机:
vagrant up
2. SSH免密码登陆
使用vagrant ssh命令登陆虚拟机必须切换到Vagrantfile所在的目录,而直接使用虚拟机IP登陆虚拟机则更为方便:
ssh vagrant@192.168.100.10
此时SSH登陆需要输入虚拟机vagrant用户的密码,即vagrant
将主机的公钥复制到虚拟机的authorized_keys文件中即可实现SSH免密码登陆:
cat $HOME/.ssh/id_rsa.pub | ssh vagrant@192.168.100.10 'cat >> $HOME/.ssh/authorized_keys'
3. 重新安装软件
Vagrant中有下面一段内容:

# 使用shell脚本进行软件安装和配置
node.vm.provision "shell", inline: <<-SHELL
  # 安装docker 1.11.0
  wget -qO- https://get.docker.com/ | sed 's/docker-engine/docker-engine=1.11.0-0~trusty/' | sh
  usermod -aG docker vagrant
SHELL
其实就是嵌入了一段Shell脚本进行软件的安装和配置,这里我安装了Docker,当然也可以安装其他所需要的软件。修改此段内容之后,重新创建虚拟机需要使用”–provision”选项。
vagrant halt
vagrant up --provision
4. 共享目录挂载出错
VirtualBox设置共享目录时需要在虚拟机中安装VirtualBox Guest Additions,这个Vagrant会自动安装。但是,VirtualBox Guest Additions是内核模块,当虚拟机的内核升级之后,VirtualBox Guest Additions会失效,导致共享目录挂载失败,出错信息如下:
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:
mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant
The error output from the last command was:
stdin: is not a tty
/sbin/mount.vboxsf: mounting failed with the error: No such device
安装Vagrant插件vagrant-vbguest可以解决这个问题,因为该插件会在虚拟机内核升级之后重新安装VirtualBox Guest Additions。
vagrant plugin install vagrant-vbguest

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: