虚拟机集群分布的两三坑...


​ 配环境永远是世界性难题之一。最近开始踩大数据的坑,为了实现HDFS完全集群分布实验,我克隆了三台虚拟机作为我的实验对象。在经历了连接校园网虚拟机分不到内网IP的漫长难题之后,本以为终于可以顺顺利利实验,结果还是遇到了不少bug :sweat:

错误一

​ 第一个坑是在初始格式化namenode的时候,hdfs namenode format命令报域名解析暂时失败,报错log如下图所示。看了一遍林子雨老师的部署教程也没有相关的经历和解决办法。

错误日志

​ 因为报错之时忘了截图,所以我找了别人发生的类似错误图示来说明问题。错误日志上写的是Master.localdomain域名解析暂时失败。但我主机名都是以$Master$标注的,怎么会出现localdomain的后缀呢?查了一下/etc/hosts主机映射文件

hosts文件

​ 没有什么问题。再思考了一下,觉得可能是集群修改hadoop配置文件的时候出现了错误,但一番排查之后也否决了这个想法。

​ 再经历了Google各种错误排查失败之后,我终于发现了错误的根源地,即etc中的hostname文件。

hostname文件表示的是当前主机的名称,所有主机初始名称一般都是localhost,但在前期,我为了区分集群中Master和Slave虚拟机,把主节点虚拟机的主机名称、用户名、登录名都设置成了$Master$(同样地,从节点虚拟机也将相关参数设置为$Slave1$和$Slave2$等)

​ 但我在修改hostname文件的时候,没有默认文件的数据删除干净,所以主机名一直维持在Master.localname的状态。而Master.localname这个主机名在/etc/hosts文件中找不到映射的$ip$地址,所以才造成了这次bug……说到底还是自己的原因

错误二

​ 第二个坑是关于用ssh免密远程登录时报错Permission denied

​ 这个问题困扰了将近一天的时间,照着林子雨老师的部署教程走,但无论怎么实验,最后总是无法实现免密登录功能,无脑听信网上的解决办法也花费了不少时间,最后还越改越乱。

​ 无奈将这个问题暂且搁置了一天,在处理某次事项的过程中莫名找到了错误根源。

​ 子雨老师所配置的三台虚拟机,用户名都是hadoop。而我在一开始,就把三台虚拟机各自设置了不同的用户名,而在ssh免密登录的时候,默认是同名远程登录。即使主机B存储着主机$A$的公钥,但当$a$用户用主机$A$试着免密远程连接$B$主机的时候,仅仅ssh hostnameB的话,默认的完整命令是ssh a@hostnameB,对应不到主机$B$上的b@hostnameB,所以才会出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic)的报错。

​ 那对于普通用户不同用户名之间需要怎样ssh远程连接呢?

image-20201103205705209

根据网上定义,ssh对这种情况也有相应的解决办法,即另外配置一个config,映射好Hostnameusername,我的配置如下图所示:

image-20201103205814640

这样的话,当下次使用ssh Slave1的时候,$Master$本机会首先根据config中的配置需要对应的User,再请求连接,这样的话就能顺利解决不同用户名下的ssh远程连接任务了!

错误三

​ 第三个坑是配置完毕之后,$ssh$免密登录仍旧需要密码的问题。

​ 在解决了上述问题之后,$ssh$远程连接另一台服务器仍旧需要密码,我第一反应是可能依旧连接不上,但是ping了一下远程主机之后发现可以ping的通,这就说明连接没有问题,应该是目的主机设置的问题。那会是什么问题呢?初步断定可能是防火墙的锅,遂用sudo cat /var/log/secure检查了系统安全日志,如下:

系统安全日志

​ 网上查了查,原来是某些文件的权限配置不当,导致信任错误,$SSH$不希望home目录和~/.ssh目录对组有写权限,于是:对于用户主目录,用命令chmod g-w /home/hadoop修改权限;除此之外,对 .ssh 文件夹和 authorized_keys 文件同样也要限制,分别用以下两个命令:

chmod 700 /home/hadoop/.ssh
chmod 600 /home/hadoop/.ssh/authorized_keys

​ 最后,用 service sshd restart 命令重启了$SSH$服务。

尾声

最后,大家着手集群分布之前,为了避免不必要的麻烦和花费过多的时间,切记事先关掉防火墙!!!别问我怎么知道的。:smile:

附上$centos$关于防火墙命令的操作

systemctl stop firewalld.service #停止firewall

systemctl start firewalld.service #开启firewall

systemctl disable firewalld.service #禁止firewall开机启动

firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

文章作者: ray
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ray !
评论
 本篇
虚拟机集群分布的两三坑... 虚拟机集群分布的两三坑...
​ 配环境永远是世界性难题之一。最近开始踩大数据的坑,为了实现HDFS完全集群分布实验,我克隆了三台虚拟机作为我的实验对象。在经历了连接校园网虚拟机分不到内网IP的漫长难题之后,本以为终于可以顺顺利利实验,结果还是遇到了不少b
2020-11-03
下一篇 
算法15.对称的二叉树 算法15.对称的二叉树
题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 示例 1: 二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4
2020-10-27
  目录