ha (双机集群(HA)系统简称)
HA是High Available缩写,是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。
添加hosts 条目
vi /etc/hosts
添加如下条目
192.168.80.111 node1
192.168.80.112 node2
192.168.80.113 node3
192.168.80.114 node4
角色分布表
主机名 | NameNode | NameNode2 | JournalNode | DataNode | ZKFC | ZooKeeper |
---|---|---|---|---|---|---|
node1 | * | * | ||||
node2 | * | * | * | * | ||
node3 | * | * | ||||
node4 | * | * |
配置免密登录
先尝试下自己是否可以ssh登录自己,输入密码登录后退出。
[root@192 ~]# ssh localhost
root@localhost's password:
Last login: Fri Jul 24 20:58:41 2020 from 192.168.80.1
[root@192 ~]# exit
打开~/.ssh
目录,使用
ssh-keygen -t rsa
然后复制到四个主机的~/.ssh/id_rsa.pub
分发给其他主机,使用如下命令(以node1为例):
cd ~/.ssh
scp id_rsa.pub @node1:`pwd`/node1_rsa.pub
scp id_rsa.pub @node2:`pwd`/node2_rsa.pub
scp id_rsa.pub @node3:`pwd`/node3_rsa.pub
scp id_rsa.pub @node4:`pwd`/node4_rsa.pub
以上的命令都要输各个主机的密码。
在四个主机上执行以上命令,然后写入到~/.ssh/authorized_keys
cd ~/.ssh
cat node1_rsa.pub >> authorized_keys
cat node2_rsa.pub >> authorized_keys
cat node3_rsa.pub >> authorized_keys
cat node4_rsa.pub >> authorized_keys
到此免密登录配置结束。
安装zookeeper
将zookeeper的压缩包使用 tar -xf zookeeper-3.4.14.tar.gz
命令解压缩
tar -xf zookeeper-3.4.14.tar.gz
将解压的zookeeper-3.4.14文件夹移动到/opt/bigdata
目录下
mv -r zookeeper-3.4.14 /opt/bigdata
设置hadoop的环境变量(和jdk配置的过程一样),编辑etc/profile
文件 添加如下条目
export JAVA_HOME='/usr/java/default'
export HADOOP_HOME='/opt/bigdata/hadoop-2.7.3'
export ZK_HOME='/opt/bigdata/zookeeper-3.4.14'
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin
保存并退出后,重新载入一下,使用如下命令
source etc/profile
测试下 ,输入echo $ZK_HOME
如果输出/opt/bigdata/zookeeper-3.4.14
,表示配置成功。
修改zookeeper的配置文件
进入/opt/bigdata/zookeeper-3.4.14/conf/
,将zoo_sample.cfg
复制一份更改为zoo.cfg
,配置zookeeper的节点。
dataDir=/var/bigdata/hadoop/zk
server.1=node2:2888:3888
server.2=node3:2888:3888
server.3=node4:2888:3888
分发基础环境
1.在各个主机分发jdk,在jdk的目录下:
scp jdk-8u91-linux-x64.rpm @node2:`pwd`
scp jdk-8u91-linux-x64.rpm @node3:`pwd`
scp jdk-8u91-linux-x64.rpm @node4:`pwd`
分别在各个主机上安装jdk
rpm -i jdk-8u91-linux-x64.rpm
2.分发/etc/profile
文件
scp /etc/profile @node2:/etc/profile
scp /etc/profile @node3:/etc/profile
scp /etc/profile @node4:/etc/profile
配置hadoop
修改core-site.xml 文件
打开/opt/bigbata/hadoop-2.7.3/etc/hadoop/core-site.xml
文件,并在<configuration></configuration>
标签中添加:
<property>
<name>fs.defaultFS</name>
<!--配置默认的文件系统-->
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<!--配置 zookeeper 服务器地址-->
<value>node2:2181,node3:2181,node4:2181</value>
</property>
修改hdfs-site.xml
打开/opt/bigbata/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
文件,并在<configuration></configuration>
标签中添加:
<property>
<name>dfs.replication</name>
<!--配置文件副本数-->
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<!--配置服务器名称-->
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<!--配置namenode的服务器-->
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<!--配置nn1的服务地址-->
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<!--配置nn1的http服务地址-->
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<!--配置nn2的服务地址-->
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<!--配置nn2的http服务地址-->
<value>node2:50070</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.mycluster</name>
<!--开启故障转移-->
<value>true</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<!-- 配置edits共享地址,journalnode的地址。 -->
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<!-- 配置journalnode的目录。 -->
<value>/var/bigdata/hadoop/ha/dfs/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<!--不懂,求告知 -->
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverPro
xyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<!-- 免密登录的加密方式 -->
<value>/root/.ssh/id_rsa</value>
</property>
dfs.ha.fencing.methods配置有sshfence和shell两种方法:
sshfence:防止namenode脑裂,当脑裂时,会自动通过ssh到old-active将其杀掉,将standby切换为active。
但是只能在网络通畅时有效,一旦ipdown后fencing方法返回false,standby不会自动切换active,
只能手动执行 hdfs haadmin failover namenode1 namenode2 进行切;所以需要加配shell(/bin/true)。
想要kill掉namenode active后standby自动切换为active,需要安装psmisc(fuser);因为sshfence方式
是使用fuser通过ssh登录old-active进行诊断从而切换active/standby的。
shell(/bin/true):如果出现故障并且fencing方法返回false,则会继续执行shell(true),从而active/standby自动切换。
fencing方法返回true,则不会执行shell。
原文链接:https://blog.csdn.net/w892824196/article/details/100059674
修改slaves文件
将slaves文件做如下修改
node2
node3
node4
分发hadoop文件
进入目录/opt/bigdata
scp hadoop-2.7.3 @node2:`pwd`
scp hadoop-2.7.3 @node3:`pwd`
scp hadoop-2.7.3 @node4:`pwd`
格式化集群
在node2-node4上启动zookeeper
zkServer.sh start
在node1-node3 上启动journalnode
hadoop-daemon.sh start journalnode
在node1上格式化集群,使用命令
```bash
hdfs namenode -format
在node1初始化zkfc
hdfs zkfc -formatZK
在node1启动namenode
hadoop-daemon start namenode
在node2上同步集群
hdfs namenode -bootstrapStandby
回到node1 ,启动集群
start-dfs.sh
启动ZKFC
hadoop-daemon.sh start zkfc
到此配置结束。