HA集群配置

HA集群配置,第1张

HA集群配置

本次配置是使用centos7版本

1.1、Linux基础环境配置 1.查看ip地址

并记录三台机子的ip地址

ip a
2.修改主机名
1) hostnamectl set-hostname master
2) hostnamectl set-hostname slave1
3) hostnamectl set-hostname slave2
//注:改完主机名之后记得要bash生效
3.主机映射
vi /etc/hosts
 
//hosts文件内容:
    格式:主机ip 主机名
    	例如:192.168.90.126 master
            192.168.90.88 slave1
            192.168.90.228 slave2
//注意:hosts文件三台机子都要改
1.2、时钟同步 1.修改配置文件
vi /etc/sysconfig/ntpd

//在文件中加:
    YS_HWLOCK=yes
    
//注意:三台机子都要加上
2.同步时间
systemctl start ntpd

date ----> 查看时间的命令
    
//注意:三台机子都要执行这个命令

注意:如果这种同步时间的命令无法同步三台机子的时间,请按照下面 *** 作步骤来做:

//语法格式:date -s 字符串

//观察三台机子的系统时间,然后执行命令同步时间。date命令验证是否同步成功

例如:
date -s "2021-04-29 15:51:50"

//注意:三台机子都要执行
1.3、关闭防火墙
systemctl disable firewalld.service  -----> 关闭防火墙自启
    
//验证防火墙是否关闭
systemctl status firewalld.service
    
//注意:三台自己都要关闭
1.4、SSH免密

1.注意:进行免密配置之前要进入hadoop用户下,如果没有请执行:useradd hadoop添加用户

2.这里的免密配置使用的是之前学习的命令,并不是该平台的命令,因为这种方法要比平台上的命令要简单

1.生成秘钥
ssh-keygen -t rsa
    
//在三台机子上分别执行,期间不用输入任何命令,直接回车就可以
2.分享秘钥
//分享秘钥给其他两台机子和自己:如果在master上生成的秘钥,要把秘钥发给其他两台机子和自己
    
//这里以 master slave1 slave2举例    
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
    
//执行完上述命令后,验证
ssh master
ssh slave1
.....
1.5、ZooKeeper安装部署 1、Jdk的安装和配置 1) 解压缩
tar -zxvf 所要解压的文件的位置 -C 解压到的位置
    例如:tar -zxvf /opt/software/jdk-8.. -C /usr/local/src
2) 改名字
mv 原文件名字 改后名字
    例如:mv jdk-8u... java   -----> 这里这个命令是进到了解压缩后文件的目录下
2、配置Java环境变量
vi /etc/profile   -------> 配置环境变量的文件

命令行模式下 输入G 直接跳到最后一行 ,为了省时间 
      
//profile文件中增加的内容:
    export JAVA_HOME=/usr/local/src/java    ------> 这里的路径是你安装java的目录
    export PATH=$PATH:$JAVA_HOME/bin		------> 将JAVA安装目录加入PATH路径
        
//注意:改完之后一定要执行  source /etc/profile
3、分发Java
scp -r /usr/local/src/java/ root@slave1:/usr/local/src
scp -r /usr/local/src/java/ root@slave2:/usr/local/src
3、安装ZooKeeper 1) 解压缩

和上面解压缩类似,就废话不多说了 🙏

2) 改名字

和上面解压缩类似,就废话不多说了 🙏

3) 创建ZooKeeper数据目录
//其实就是创建两个目录  data(传输数据的)  logs(记录日志)

//两个目录都是在zookeeper文件目录下创建的,注意自己的路径
mkdir /usr/local/src/zookeeper/data
mkdir /usr/local/src/zookeeper/logs
4)配置ZooKeeper环境变量
vi /etc/profile   -------> 配置环境变量的文件

命令行模式下 输入G 直接跳到最后一行 ,为了省时间 
      
//profile文件中增加的内容:
    export ZK_HOME=/usr/local/src/zookeeper ------> 这里的路径是你安装zookeeper的目录
    export PATH=$PATH:$ZK_HOME/bin ------> 将JAVA安装目录加入PATH路径
        
//注意:改完之后一定要执行  source /etc/profile
5) 修改zoo.cfg
进入zookeeper 的 conf
    
cp zoo_sample.cfg zoo.cfg

vi zoo.cfg
  //zoo.cfg文件内容:
    修改:dataDir=/usr/local/src/zookeeper/data  ---->路径问题一定要注意
    
    增加: dataLogDir=/usr/local/src/zookeeper/logs
         server.1=master:2888:3888
         server.2=slave1:2888:3888
         server.3=slave2:2888:3888
             
         //注意上面的主机名:这里是以 master slave1 slave2 为例
6)myid文件
进入到zookeeper 的 data 目录后
创建myid文本文件
最安全的方法是vi myid  后 自己手动 输入数字 1
7)分发ZooKeeper
scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src
scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src

//注意:分发过去后记得改一下myid文件,slave1的myid文件里面输入1,slave2的myid文件里面输入2
8)Zookeeper的用户切换
//切换zookeeper属于hadoop用户
chown -R hadoop:hadoop /usr/local/src/zookeeper
8) 启动ZooKeeper
su hadoop 切换用户为hadoop用户

source /etc/profile  ----> 防止之前配置的环境变量为生效    
    
zkServer.sh start   //三台机子都要启动
zkServer.sh status  //查看zookeeper的状态信息  状态有leader follower follower
1.6、HA参数配置

切换为root,不是普通用户hadoop了,注意!!! 因为:hadoop权限不够

1.解压缩hadoop 并改名为hadoop

这里再不会,我也木有办法 😜

2.配置hadoop环境
vi /etc/profile   -------> 配置环境变量的文件

命令行模式下 输入G 直接跳到最后一行 ,为了省时间 
      
//profile文件中增加的内容:
    export HADOOP_PREFIX=$HADOOP_HOME
	export HADOOP_MAPRED_HOME=$HADOOP_HOME
	export HADOOP_COMMON_HOME=$HADOOP_HOME
	export HADOOP_HDFS_HOME=$HADOOP_HOME
	export YARN_HOME=$HADOOP_HOME
	export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
	export HADOOP_INSTALL=$HADOOP_HOME
	export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
	export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
        
//注意:改完之后一定要执行  source /etc/profile
3.配置hadoop-env.sh
这个文件在hadoop 目录下的 hadoop 下的 etc 下

修改JAVA_HOME的目录  JAVA_HOME=/usr/local/src/java
4.core-site.xml
	<!-- 指定hdfs的nameservice为mycluster -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/src/hadoop/tmp</value>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    <!-- hadoop链接zookeeper的超时时长设置 -->
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>30000</value>
        <description>ms</description>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
5.hdfs-site.xml
<!-- journalnode集群之间通信的超时时间 -->
    <property>
        <name>dfs.qjournal.start-segment.timeout.ms</name>
        <value>60000</value>
    </property>
    <!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致        dfs.ha.namenodes.			[nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。配置一个逗号分隔的NameNode ID列表。这将是被	DataNode识别为所有的NameNode。如果使用"mycluster"作为nameservice ID,并且使用"master""slave1"作为		NameNodes标示符 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
        <!-- mycluster下面有两个NameNode,分别是master,slave1 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>master,slave1</value>
    </property>
    <!-- master的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.master</name>
        <value>master:8020</value>
    </property>
    <!-- slave1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.slave1</name>
        <value>slave1:8020</value>
    </property>
     <!-- master的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.master</name>
        <value>master:50070</value>
    </property>
    <!-- slave1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.slave1</name>
        <value>slave1:50070</value>
    </property>
    <!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表
         该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
        journalId推荐使用nameservice,默认端口号是:8485 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>       		<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
    </property>
    <!-- 配置失败自动切换实现方式 -->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name> 				   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
        shell(/bin/true)
        </value>
    </property>
    <property>
       <name>dfs.permissions.enabled</name>
       <value>false</value>
    </property>
    <property>
        <name>dfs.support.append</name>
        <value>true</value>
    </property>
    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <!-- 指定副本数 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/src/hadoop/tmp/hdfs/nn</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/src/hadoop/tmp/hdfs/dn</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/src/hadoop/tmp/hdfs/jn</value>
    </property>
    <!-- 开启NameNode失败自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 启用webhdfs -->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    <!-- 配置sshfence隔离机制超时时间 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
    <property>
        <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
        <value>60000</value>
    </property>
6) mapred-site.xml
<!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
	</property>
    <!-- 指定mapreduce jobhistory地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <!-- 任务历史服务器的web地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
  </property>
7) yarn-site.xml
<!-- Site specific YARN configuration properties -->
    <!-- 开启RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分别指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave1</value>
    </property>
    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
    <!-- 启用自动恢复 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
    <property>
        <name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
8) slaves
master
slave1
slave2
9) 创建目录
mkdir -p /usr/local/src/hadoop/tmp/hdfs/nn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/dn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/jn
mkdir -p /usr/local/src/hadoop/tmp/logs

    目录结构图:
--------hadoop
--------tmp
------------hdfs
----------------nn
----------------dn
----------------jn
------------logs
10) 分发文件
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
scp -r /usr/local/src/hadoop root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop root@slave2:/usr/local/src/
11) 修改目录所有者和所有者组
//master
chown -R hadoop:hadoop /usr/local/src/hadoop
ll /usr/local/src/
//slave1
chown -R hadoop:hadoop /usr/local/src/hadoop/ 
//slave2
chown -R hadoop:hadoop /usr/local/src/hadoop/ 
12) 生效环境变量
su hadoop
source /etc/profile
    
//注意:三台机子都要执行
1.7,HA的启动 1)启动守护进程
//在master上启动
hadoop-daemons.sh start journalnode
2)初始化namenode
hdfs namenode -format

如果格式化失败

//删除hadoop中的tmp和data目录里面的东西,然后重新格式化
3) 注册ZNode
//在master上启动
hdfs zkfc -formatZK
4)启动hdfs
//在master上启动
start-dfs.sh
5)启动yarn
//在master上启动
start-yarn.sh
6) 同步master数据
[hadoop@master ~]$ scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* 			slave1:/usr/local/src/hadoop/tmp/hdfs/nn/

[hadoop@master ~]$ scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave2:/usr/local/src/hadoop/tmp/hdfs/nn/
7)resourcemanager和namenode
//salve1节点上
yarn-daemon.sh start resourcemanager
hadoop-daemon.sh start namenode
8) MapReduce任务历史服务器
//master节点上
yarn-daemon.sh start proxyserver
mr-jobhistory-daemon.sh start historyserver
9) 节点进程 (9 8 5)
masterslave1slave2
DFSZKFailoverControllerJpsDataNode
NameNodeResourceManagerJps
DataNodeNameNodeQuorumPeerMain
JpsDFSZKFailoverControllerNodeManager
QuorumPeerMainNodeManagerJournalNode
JobHistoryServerJournalNode
JournalNodeDataNode
ResourceManagerQuorumPeerMain
NodeManager
1.8 HA的测试 1) 创建测试文件
vi a.txt  //可以在任意目录下创建
2)在hdfs创建文件夹
hadoop fs -mkdir /input
3)将创好的a.txt上传hdfs上
hadoop fs -put 目标文件 集群上的目录位置
    //例如:
    	hadoop fs -put ~/a.txt /input
4) 测试
//进入到mapreduce后(在hadoop安装目录下)
hadoop jar hadoop-mapreduce-examples-2.7.1.jar wordcount /input/a.txt /output
5) 查看结果
hadoop fs -lsr /output

hadoop fs -cat /output/part-r-00000
    
//注:也可以直接在集群上打开
1.9 高可用验证 1) 自动切换服务状态
//在master上
hdfs haadmin -failover --forcefence --forceactive slave1 master
//查看状态
hdfs haadmin -getServiceState slave1 
hdfs haadmin -getServiceState master
2)手动切换服务状态
//在master上停止并启动namenode
hadoop-daemon.sh stop namenode
//查看状态
[hadoop@master ~]$ hdfs haadmin -getServiceState master
[hadoop@master ~]$ hdfs haadmin -getServiceState slave1    

    
[hadoop@master ~]$  hadoop-daemon.sh start namenode
//查看状态
[hadoop@master ~]$ hdfs haadmin -getServiceState slave1
[hadoop@master ~]$ hdfs haadmin -getServiceState master

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/927219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存