最近在学习hadoop,自然要自己搭建一个hadoop集群,当然,hadoop集群也可以搞个为分布式集群,但是,咱有条件,搞个Vmware,启三个linux虚拟机,当然也可以装一个虚拟机 然后克隆2个,这个自己恶补一番,这里不详述。
完全分布式集群的搭建,涉及到集群中各个机器之间的互访,因为Hadoop集群中的各个机器间会相互地通过SSH访问,每次访问都输入密码是不现实的,所以要配置各个机器间的SSH是无密码登录的。
1. 准备三台机器,设置三台机器为静态ip地址
master:192.168.2.10, slave1:192.168.2.11, slave2:192.168.2.12
可以参考:https://www.linuxidc.com/Linux/2017-06/144401.htm?hmsr=toutiao.io
2. SSH免密码登陆思想
因为三个节点要相互访问,所以,三个节点都是客户端,也都是服务器端,我们分别在三个节点上创建一对密钥文件,密钥文件包括公钥文件(~/.ssh/id_rsa.pub)和私钥文件 (~/.ssh/id_rsa)。
客户端在使用ssh登录到其他节点上的时候,ssh会发送私钥去和其他节点上的公钥去匹配,如果匹配成功,那么就会自动登录,而不需要输入密码,这就实现了无密码登录。 所以,客户端要实现免密码登录到目标节点上的时候,就需要把公钥写入目标节点上的~/.ssh/authorized_keys中。
Linux下 生成秘钥的命令为:ssh-keygen
ssh-keygen的命令手册,通过”man ssh-keygen“命令
通过命令”ssh-keygen -t rsa“
生成之后会在用户的根目录也就是root目录下生成一个 “.ssh”的文件夹
进入“.ssh”会生成以下几个文件
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
如果希望ssh公钥生效需满足至少下面两个条件:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600
3.SSH免密码登陆实现方式
将公钥全部发送的master上,由master将各个客户端节点的公钥整合到~/.ssh/authorize_keys中,然后,用scp命令将 ~/.ssh/autorized_keys复制到其他两个节点中
4) 查看是否已安装ssh
ssh –version/ssh -V
5) 客户端创建秘钥
ssh-keygen -t rsa #用rsa算法产生秘钥
cd .ssh #进入.ssh目录中
ls #查看此目录下的文件:id_rsa id_rsa.pub
依次在其他的客户端上如法炮制
6) 将master的公钥写入master中
cp id_rsa.pub authorized_keys
修改权限 #root用户无需修改
ssh 主机名 #登录验证
7) 将slave的公钥写入master中
slave1:scp id_rsa.pub root@192.168.2.10:/home/hadoop/id_rsa_01.pub
slave2:scpid_rsa.pub root@192.168.2.10:/home/hadoop/id_rsa_02.pub
master: cat id_rsa_01.pub >>~/.ssh/authorized_keys #写入公钥
master: cat id_rsa_02.pub >> ~/.ssh/authorized_keys #写入公钥
8) 将master公钥复制到slave中
slave1: scp authorized_keys root@192.168.2.11:~/.ssh/authorized_keys
slave2: scp authorized_keys root@192.168.2.12:~/.ssh /authorized_keys
9) ip与主机名绑定配置同步到其他两台slave机器
scp /etc/hosts root@192.168.2.11:/etc/hosts
scp /etc/hosts root@192.168.2.12:/etc/hosts
SSH免密码登录原理:
这种方式你需要在客户端服务器上为自己创建一对密匙,并把公匙放在需要登录的服务器上。
当你要连接到服务器上时,客户端就会向服务器请求使用密匙进行安全验证。
服务器收到请求之后,会在该服务器上你所请求登录的用户的家目录下寻找你的公匙,
然后与你发送过来的公匙进行比较。
如果两个密匙一致,服务器就用该公匙加密“质询”并把它发送给客户端。
客户端收到“质询”之后用自己的私匙解密再把它发送给服务器。
可参考:https://blog.csdn.net/daidaineteasy/article/details/50948034