HA、zookeeper高可用集群搭建配置流程

hadoop完全分布式配置
新建虚拟机
修改时间为亚洲 上海时区
修改密码越简单越好

1、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
永久关闭防护墙修改配置文件
vi /etc/selinux/config
修改SELINUX=disabled

2、修改网络配置

vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改静态IP
BOOTPROTO=static
修改启动时激活网卡
ONBOOT=yes
增加IP
IPADDR=192.168.136.222
NETMASK=255.255.255.0
GATEWAY=192.168.136.2
DNS1=114.114.114.114
DNS2=8.8.8.8
修改完成后记得使网络配置生效
systemctl restart network
检查是否生效,拼测外网是否可以拼通
ping baidu.com

3、修改主机名称

hostnamectl set-hostname master
修改完成后,切换主机名称su命令

4、配置主机名与IP的映射关系

vi  /etc/hosts
 增加映射关系
192.168.136.222 master
192.168.136.223 slave1
192.168.136.224 slave2

5、配置免密登录

cd ~
ssh-keygen -t rsa   一路回车 (-t是制定秘钥的类型,一般有2种rsa和dsa)
cd .ssh
ssh-copy-id -i id_rsa.pub root@master
输入yes后输入密码
验证:
ssh loacalhost
ssh master
ssh 0.0.0.0

6、配置时间同步
yum install chrony

启用

systemctl start chronyd
systemctl enable chronyd

设置亚洲时区

timedatectl set-timezone Asia/Shanghai

启用NTP同步

timedatectl set-ntp yes
防止重启不生效,写入磁盘:hwclock --systohc
验证是否生效:timedatectl

7、上传安装文件
利用finalshell

cd /opt

创建上传位置

mkdir software

创建解压缩位置

mkdri apps

解压缩

tar -zxvf 文件名 -C /opt/apps/

修改文件名

cd /opt/apps     //切换到apps目录下
mv 文件名 新文件名    //修改文件名 例: mv hadoop3.2.1.jar hadoop

8、配置环境
添加以下内容

vi /etc/profile
export JAVA_HOME=/opt/apps/jdk
export HADOOP_HOME=/opt/apps/hadoop
export ZOOKEEPER_HOME=/opt/apps/zookeeper
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH

配置完成后记得生效

source /etc/profile

验证:
输入java -version
输入hadoop version

9、修改hadoop四个配置文件

切换目录 cd /opt/apps/hadoop/etc/hadoop
需要修改以下四个配置文件

1、core-site.xml

2、hdfs-site.xml

3、yarn-site.xml

4、mapred-site.xml.template

第四个需要拷贝一份为mapred-site.xml再修改 :cp -rf mapredu-site.xml.template mapreduce-site.xml

core-site.xml文件如下:

<configuration>
     <!-- hdfs的地址名称:schame,ip,port-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property>
     <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/apps/hadoop/tmp</value>
    </property>
</configuration>

hdfs-site.xml文件如下:

<configuration>
    <!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property>
    <!-- 块的副本数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 块的大小-->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave1:50090</value>
    </property>
</configuration>

mapred-site.xml文件如下:

<configuration>
    <!-- 指定mapreduce使用yarn资源管理器-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置作业历史服务器的地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <!-- 配置作业历史服务器的http地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
</configuration>

yarn-site.xml文件如下:

<configuration>
    <!-- 指定yarn的shuffle技术-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定resourcemanager的主机名-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property> 
</configuration>

10、修改hadoop-env.sh脚本文件 此处是修改

export JAVA_HOME=/opt/apps/jdk

11、配置slaves文件
vi etc/hadoop/slaves
删除localhost
增加
master
slave1
slave2

12、配置yarn-env.sh文件 此处是修改

export JAVA_HOME=/opt/apps/jdk
注意将前面的注释符号#去掉

13、使用克隆技术克隆另外2台从机

进入从机修改ip 
vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络
修改主机名
hostnamectl set-hostname 主机名
su切换用户名

14、进入master测试另外2台免密登录是否正常
由master到slave1 1到2 2到1 由master到slave2
记得切换回来master

ssh slave1

ssh slave2

ssh master

15、格式化namenode

[root@master ~]# hdfs namenode -format

zookeeper完全分布式配置

1、修改zookeeper配置文件

1、cd /opt/apps/zookeeper/conf

2、cp zoo_sample.cfg zoo.cfg #复制出zoo.cfg文件

3、vi zoo.cfg

修改zookeeper存储路径

dataDir=/opt/apps/zookeeper/zkData
添加三个服务器节点
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

[root@master conf]# vi zoo.cfg
tickTime=2000				#  定义的时间单元(单位毫秒),下面的两个值都是tickTime的倍数。
initLimit=10				#follower连接并同步leader的初始化连接时间。
syncLimit=5					#心跳机制的时间(正常情况下的请求和应答的时间)
dataDir=/opt/apps/zookeeper/zkData       #修改zookeeper的存储路径,zkData目录一会要创建出来
clientPort=2181							 #客户端连接服务器的port
server.1=master:2888:3888    			 # 添加三个服务器节点
server.2=slave1:2888:3888
server.3=slave2:2888:3888

解析Server.id=ip:port1:port2
id:		服务器的id号,对应zkData/myid文件内的数字
ip: 	服务器的ip地址
port1:	follower与leader交互的port
port2:	选举期间使用的port

2、创建zookeeper存储路径

1、cd /opt/apps/zookeeper
2、mkdir zkData

3、指定服务器id号

cd zkData
echo "1" >> myid(此处为master服务器的id号,slave1和2对应的id分别为2,3)

3、将zookeeper目录复制到另外2台从机上

cd /opt/apps
scp -r zookeeper slave1:/opt/apps/
scp -r zookeeper slave2:/opt/apps/

4、进入对应主机的zookeeper目录中修改myid文件id号

cd /opt/apps/zookeeper/zkData
vi myid

5、启动zookeeper

zkServer.sh start

jps查看进程是否起来
查看各个主机状态是否正常

zkServer.sh status

ha高可用搭建

1、修改hdfs-site.xml里的配置信息
1.1 配置名称服务的逻辑名称:

1.2 配置两个namenode的唯一标识符

<property>
	<name>dfs.ha.namenodes.supercluster</name>
	<value>nn1,nn2</value>
</property>

1.3 针对于每一个唯一标识符的namenode,设置完整的rpc地址和端口。

<property>
	<name>dfs.namenode.rpc-address.supercluster.nn1</name>
	<value>master:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.supercluster.nn2</name>
	<value>slave1:8020</value>
</property>

1.4 针对于每一个唯一标识符的namenode,配置http协议的地址和端口。

<property>
    <name>dfs.namenode.http-address.supercluster.nn1</name>
    <value>master:50070</value>
</property>
<property>
    <name>dfs.namenode.http-address.supercluster.nn2</name>
    <value>slave1:50070</value>
</property>

1.5 配置journalnode的服务器地址和存储目录(数目为奇数个)

<!-- 服务器地址使用分号“;”作为分隔符-->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master:8485;slave1:8485;slave2:8485/journalData</value>
</property>

1.6 指定客户端连接Active的namenode节点的java类型

<property>
    <name>dfs.client.failover.proxy.provider.supercluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

1.7 配置防护机制、免密登陆、免密超时时间

<!--为了保证系统的正确性,在任何时间只有一个NameNode处于Active状态,需要配置一个防护机制 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!--为了使该防护选项起作用,它必须能够在不提供密码的情况下SSH到目标节点。因此,还必须配置以下属性-->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>
<!-- 免密登陆超时时间,超过此时间未连接上,则登陆失败,此配置可选-->
<property> 
    <name>dfs.ha.fencing.ssh.connect-timeout</name> 
    <value>30000</value> 
</property>

1.8 修改支持动容灾属性

<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

2、在core-site.xml文件里修改部分属性
2.1 修改fs.defaultFS的属性值为名称服务的逻辑名称

<!--注意:是修改,修改,修改原属性的值不是追加,亲-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://supercluster</value>
</property>

2.2 定义journalnode进程的数据存储的父路径(目录在上面已经定义好了的:journalData)

<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/apps/hadoop/tmp</value>
</property>

2.3 添加zookeeper服务器

<property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
</property>

3、将配置信息分发到其他节点上

[root@master ~]# scp /opt/apps/hadoop/etc/hadoop/* slave1:/opt/apps/hadoop/etc/hadoop/	
[root@master ~]# scp /opt/apps/hadoop/etc/hadoop/* slave2:/opt/apps/hadoop/etc/hadoop/	

4、启动HA
4.1. 启动三个节点上的journalnode服务,(请注意,如果集群启动了,先把集群stop掉)

	[root@master ~]# hadoop-daemon.sh start journalnode
	[root@slave1 ~]# hadoop-daemon.sh start journalnode
	[root@slave2 ~]# hadoop-daemon.sh start journalnode

4.2. 启动以前节点上的namenode进程

	[root@master ~]# hadoop-daemon.sh start namenode

4.3. 在新的namenode节点上拉取镜像文件

	[root@slave1 ~]# hdfs namenode -bootstrapStandby

4.4. 同步日志到journalnode集群
–先关namenode

	[root@master ~]# hadoop-daemon.sh stop namenode
	--再同步日志
	[root@master ~]# hdfs namenode -initializeSharedEdits

4.5. 格式化zkfc

  • 1、前提QuorumPeerMain服务必须处于开启状态,客户端zkfc才能格式化成功
    zkServer.sh start 开启

        [root@master ~]# zkServer.sh start
        [root@slave1 ~]# zkServer.sh start
        [root@slave2 ~]# zkServer.sh start
    	- 2、选择其中一个namenode节点进行格式化zkfc
        [root@master ~]# hdfs zkfc -formatZK
    

4.6. 你就可以快乐的开启HA集群进行测试了

	[root@master ~]# start-all.sh

4.7自动容灾测试

    1. kill掉Active的namenode,模拟宕机
      kill 进程ID

      jps 查看进程 namenode前面的号码
      kill 8462
      
    1. 查看另一个Standby的namenode,你会发现已经转为Active了

      hdfs haadmin -getServiceState nn1
      

#注意如果不能切换到active状态,请检查zkfc的日志文件,如果出现warn:PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8090 via ssh: bash: fuser: 未找到命令
一般是因为centos采取的是最小安装并没有fuser这个东西,使用yum install psmisc安装在有那么namenode的机器上下载,后重启ha集群,再测试成功。

注意!!:以后开HA集群时,要先开zookeeper服务,再开HDFS。

有任何问题可关注我与我交流哦!🙂

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值