使用vagrant快速创建虚拟机集群
1.下载并安装vagrant
你好,首先我们需要下载和安装一套快速化搭建服务器集群的软件 vagrant
下载地址:https://www.vagrantup.com
安装直接下一步就可以。
2. 下载并安装virtualbox
vagrant 依赖于virtualbox 所以必须两个软件结合着使用
下载地址:https://www.virtualbox.org/wiki/Downloads
下载完成后也是直接下一步直到安装完成为止。
3. 下载镜像并加载到系统中
系统镜像:https://app.vagrantup.com/boxes/search
系统镜像里有很多其他公司或个人集成好的系统镜像,我们这里选择centos/7
这里大家可以使用我创建好的镜像:
链接:https://pan.baidu.com/s/19QP3Zf2d_JeRCdZGimMlYg
提取码:3grs
下载完成后,在本地加载这个镜像,需要给镜像起一个名字,通过命令
vagrant box add --name 镜像名称 centos7.box(下载的镜像) 就可以把镜像加载到vagrant容器里
查看是否加入成功:
vagrant box list
例如我们在本地目录下加载一个名为james的镜像使用的是centos7.box镜像 命令为:
vagrant box add --name james centos7.box
4. 编写vagrant 脚本
我们 新建一个Hadoop的文件目录
打开控制端程序,输入vagrant init 这个时候文件目录下会出现一个 Vagrantfile的文件。
我们打开这个文件进行编辑
Vagrant.configure("2") do |config|
(1..3).each do |i|
#定义节点变量
config.vm.define "node#{i}" do |node|
# box配置
node.vm.box = "centos7"
# 设置虚拟机的主机名
node.vm.hostname = "node#{i}"
# 设置虚拟机的IP
node.vm.network "private_network", ip: "192.168.60.#{10+i}"
# 设置主机与虚拟机的共享目录
#node.vm.synced_folder "/Users/meetmax", "/home/vagrant/code"
node.vm.synced_folder "e:/vagrant/data", "/share", create:true, owner: "root", group: "root"
# VirtaulBox相关配置
node.vm.provider "virtualbox" do |v|
# 设置虚拟机的名称
v.name = "node#{i}"
# 设置虚拟机的内存大小
v.memory = 2048
# 设置虚拟机的CPU个数
v.cpus = 2
end
end
end
end
然后点击保存这个时候虚拟机的脚本就完成了
4. vagrant 命令
1.启动命令:
vagrant up
2.启动某个虚拟机的命令:
vagrant up node1 …
3.进入系统内部命令:
vagrant ssh node1 …
其他命令请大家自行参考vagrant 官方文档。
5. IP映射和主机映射
对每台机器执行同样的操作
执行命令: vi /etc/hosts 修改主机和域名的映射
192.168.60.11 node1
192.168.60.12 node2
192.168.60.13 node3
互ping 看看主机是否能正长通信。
6.设置免密码登录
集群间的文件传输或者跨节点登录等,都需要进行密码的验证,每次输入密码很麻烦,可以设置为免密码登录。
6.1 三台机器生成公钥和私钥
执行命令
ssh-keygen -t rsa
执行该命令之后,按下三个回车即可(三台机器执行同样的操作)
6.2 拷贝公钥到其他机器(包含自身)
将公钥拷贝到其他机器,所以机器执行同样的操作
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
遇到的问题:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
解决方案:
sudo vim /etc/ssh/sshd_config
增加如下修改 no 改为 yes
PasswordAuthentication yes
sudo systemctl restart sshd
或者:
sudo ~/ssh/authorized_keys
添加你本机的公钥到该文件中
如果是root用户
/etc/ssh/sshd_config
# no gai为yes
PermitRootLogin yes
sudo systemctl restart sshd
这样集群间就可以免密传文件了。