搭建HA的情况下,开启start-dfs.sh 服务的时候,
master和slave1两个NameNode服务总有一个挂掉,
原因:start-dfs.sh的时候,首先开启的是 master:NameNode
后是 slave1:NameNode
最后是 JournalNode
即是:namenode-->datanode-->journalnode-->zkfc,两个NameNode的服务冲突,必须的先开启
JournalNode服务才行(三个节点都要先开)
为防止这种情况,有两个解决方法:
方法1:服务开启顺序:
HA集群开启服务的过程---------------------------------------
step1:开启zookeeper服务:
$>zkServer.sh start
(略)step2:开启hdfs:
【$>start-dfs.sh //说明:namenode-->datanode-->journalnode-->zkfc】
step3:开启journalnode守护进程(在qjournal协议指定的节点上执行):
$>hadoop-daemon.sh start journalnode
step4:开启namenode守护进程(在nn1和nn2上执行)
$>hadoop-daemon.sh start namenode
step5:开启datanode守护进程(在namenode节点上执行hadoop-daemons.sh开启所有datanode节点)
$>hadoop-daemons.sh start datanode
step6:开启zkfc守护进程
$>hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs start zkfc
守护进程的说明:
5458 QuorumPeerMain 【zookeeper Server端】
7715 Jps 【java进程】
7626 DFSZKFailoverController 【ZKFC:zookeeper client客户端】
7324 JournalNode 【QJM:日志节点进程】
7405 NameNode 【名称节点】
6015 DataNode 【数据节点】
方法2:
在core-site.xml添加下述内容:
【core-site.xml 】,默认是内容,IPC协议
<property>
<name>ipc.client.connect.max.retries</name>
<value>20</value> //最大连接次数,修改大一点,为20,默认10
<description>Indicates the number of retries a client will make to establish
a server connection.
</description>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>1000</value> //重复连接的间隔1000ms=1s
<description>Indicates the number of milliseconds a client will wait for
before retrying to establish a server connection.
</description>
</property>
因为:NameNode连接不上JournalNode,超过一定的次数,就会挂掉,所以要增加连接的最大次数。