摘要: 在前一篇博客中,我介绍了使用Vagrant快速创建虚拟机,但是所创建的只是单个虚拟机。这篇博客将介绍使用Vagrant创建多节点虚拟机集群,可以作为HadoopSpark以及Storm等分布式系统的运行环境。

本文所有操作是在MacBook上进行的,Windows上的操作大部分一致,但是可能会有一些小问题。

一. 集群创建

1. 安装VirtualBox

2. 安装Vagrant

3. 下载Box

vagrant box add ubuntu/trusty64

Box相当于虚拟机所依赖的镜像文件。

4. 编辑Vagrantfile

mkdir vagrant-cluster
cd vagrant-cluster
vim Vagrantfile

Vagrantfile如下,可以通过注释理解每个自定义配置的含义:

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

	(1..3).each do |i|

		config.vm.define "node#{i}" do |node|

		# 设置虚拟机的Box
node.vm.box = "ubuntu/trusty64" # 设置虚拟机的主机名
node.vm.hostname="node#{i}" # 设置虚拟机的IP
node.vm.network "private_network", ip: "192.168.59.#{i}" # 设置主机与虚拟机的共享目录
node.vm.synced_folder "~/Desktop/share", "/home/vagrant/share" # VirtaulBox相关配置
node.vm.provider "virtualbox" do |v| # 设置虚拟机的名称
v.name = "node#{i}" # 设置虚拟机的内存大小
v.memory = 2048 # 设置虚拟机的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}取值:

(1..3).each do |i|

end

可知,一共创建了3个虚拟机。

5. 在桌面上创建share目录

桌面上的share目录将与虚拟机内的/home/vagrant/share目录内容实时同步

mkdir ~/Desktop/share

6. 创建虚拟机

vagrant up

创建3个虚拟机大概需要15分钟,当然这和机器性能还有网速相关。安装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目录内容实时同步
  • 内存:2GB
  • CPU: 1

二. 集群管理

1. 常用命令

下面是一些常用的Vagrant管理命令,操作特定虚拟机时仅需指定虚拟机的名称。

  • vagrant ssh: SSH登陆虚拟机
  • vagrant halt: 关闭虚拟机
  • vagrant destroy: 删除虚拟机
  • vagrant ssh-config 查看虚拟机SSH配置

启动单个虚拟机:

vagrant up node1

启动多个虚拟机:

vagrant up node1 node3

启动所有虚拟机:

vagrant up

2. SSH免密码登陆

使用vagrant ssh命令登陆虚拟机必须切换到Vagrantfile所在的目录,而直接使用虚拟机IP登陆虚拟机则更为方便:

ssh vagrant@192.168.59.2

此时SSH登陆需要输入虚拟机vagrant用户的密码,即vagrant

将主机的公钥复制到虚拟机的authorized_keys文件中即可实现SSH免密码登陆:

cat $HOME/.ssh/id_rsa.pub | ssh vagrant@192.168.59.2 '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

版权声明:
转载时请注明作者KiwenLau以及本文地址:
https://kiwenlau.com/2016/07/03/vagrant-vm-cluster/

使用Vagrant创建多节点虚拟机集群的更多相关文章

  1. 图文详解如何使用VMWare创建一套虚拟机“集群”

    开篇废话 在学习各种高大上的大数据产品也好,模拟部署我们的程序到PRD环境也好,总离不开需要一个机器集群.然而通常我们都没有那么多银子去购买多台云服务器,更没钱购买物理机.所以对于技术研究来说,最经济 ...

  2. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

  3. 实战weblogic集群之创建节点和集群

    一.启动weblogic,访问控制台 weblogic的domain创建完成后,接下来就可以启动它,步骤如下: $ cd /app/sinova/domains/base_domain/bin $ . ...

  4. 创建多个节点的集群 - Elastic Stack 8.0

    文章转载自:https://mp.weixin.qq.com/s/k6u9Q2nebW9qgZMghQwJng 详述如何安装3个节点的 Elasticsearch 集群.我将使用 Docker 来进行 ...

  5. 部署CentOS虚拟机集群

    1.在虚拟机中安装CentOS (1)使用CentOS-6.5-i386-minimal.iso.(2)创建虚拟机:打开Virtual Box,点击“新建”按钮,点击“下一步”,输入虚拟机名称为esh ...

  6. 基于Docker快速搭建多节点Hadoop集群--已验证

    Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...

  7. 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  8. kubadm创建k8s v1.10集群

    kubadm创建k8s集群 1:服务器信息以及节点介绍 主机名 ip 备注 k8s-master 192.168.0.104 master etcd keepalived k8s-client1 19 ...

  9. docker swarm英文文档学习-6-添加节点到集群

    Join nodes to a swarm添加节点到集群 当你第一次创建集群时,你将单个Docker引擎置于集群模式中.为了充分利用群体模式,可以在集群中添加节点: 添加工作节点可以增加容量.当你将服 ...

随机推荐

  1. 一个关于PCA的疑问

    我们知道PCA干的事情是把n维的样本投影到k维,同时丢失的信息能够达到最少. 为什么说principal component是covariance matrix的特征值中最大的前k个对应的特征向量上的 ...

  2. 数位DP新识

    简单题:HDU2089    HDU3652  HDU4734   HDU3555  POJ3252  HigoCoder1033(需要前导0,或者用方法4) 总结: 1,dfs(pos,state, ...

  3. CF1130E Wrong Answer

    E Wrong Answer 注意到 \(n\geq 2\) 时才可能有解,可以按如下方式构造一个 \(a_{1,2\dots n}\): 令 \(a_1=-1\) ,而后面的数都为正.记 \(s=\ ...

  4. Codeforces 311B Cats Transport【斜率优化DP】

    LINK 题目大意 有一些猫,放在一些位置,人一步移动一个位置 给出每个猫出现的时间,每个人可以自由安排其出发时间,沿途已经出现的猫捡起,猫等待的时间是被减去的时间减去出现的时间 猫可以等人,人不能等 ...

  5. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  6. WebLogic11g-创建域(Domain)及基本配置

    转:http://www.codeweblog.com/weblogic11g-%e5%88%9b%e5%bb%ba%e5%9f%9f-domain-%e5%8f%8a%e5%9f%ba%e6%9c% ...

  7. java和c++中的DES\3DES\Base64

    首先来看一段java中对字符串加解密的代码: //密钥 private String key = "123456789012345678901234"; //解密过程,先用Base ...

  8. HashMap,LinkedHashMap,TreeMap之间的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap . Map 主要用于存储键( ...

  9. 【angularJS】简介

    简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑 ...

  10. 【mysql】VS2017 EF使用 mysql

    要在vs2017中能打开mysql的连接,需要安装以下扩展 mysql-connector-net-6.9.9+.msi [这里注意不要下载最新8.x.y版本,有坑]mysql-for-visuals ...