zoukankan      html  css  js  c++  java
  • hadoop HA+kerberos HA集群搭建

    IP、主机名规划 

     hadoop集群规划:

    hostname IP hadoop 备注
    hadoop1 110.185.225.158 NameNode,ResourceManager,DFSZKFailoverController,JournalNode  
    hadoop2 110.185.225.166 NameNode,ResourceManager,DataNode,NodeManager,DFSZKFailoverController,JournalNode  
    hadoop3 110.185.225.167 DataNode,NodeManager,JournalNode hdfs client

     kerberos集群规划:

    hostname IP kerberos 备注
    krb1 10.112.29.9 server  
    krb2 10.112.29.10 slave  
    krb3 10.112.28.237 slave  

    用户权限规划:

    user:group daemons
    hdfs:hadoop NameNode, Second NameNode, JournalNode, DataNode
    yarn:hadoop ResourceManager, NodeManager
    mapred:hadoop MapReduce, JobHistory Server

    前提是hadoop集群和kerberos服务器都安装完毕:

    hadoop集群搭建:http://www.cnblogs.com/kisf/p/7460235.html

    kerberos服务器搭建:http://www.cnblogs.com/kisf/p/7473193.html

    注意:主机名,和host一定要配置正确。检验:hostname 

    为什么要使用kerberos:

    简单来说,没有做 kerberos 认证的 Hadoop,只要有 client 端就能够连接上。而且,通过一个有 root 的权限的内网机器,通过创建对应的 Linux 用户,就能够得到 Hadoop 集群上对应的权限。

    而实行 Kerberos 后,任意机器的任意用户都必须现在 Kerberos 的 KDC 中有记录,才允许和集群中其它的模块进行通信。

    kerberos认证:

    Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。

    使用 Kerberos 时,一个客户端需要经过三个步骤来获取服务:

    • 认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的 Ticket-Granting Ticket(TGT)。
    • 授权:客户端使用 TGT 向 Ticket-Granting Server(TGS)请求一个服务 Ticket。
    • 服务请求:客户端向服务器出示服务 Ticket ,以证实自己的合法性。

    为此,Kerberos 需要 The Key Distribution Centers(KDC)来进行认证。KDC 只有一个 Master,可以带多个 slaves 机器。slaves 机器仅进行普通验证。Mater 上做的修改需要自动同步到 slaves。

    另外,KDC 需要一个 admin,来进行日常的管理操作。这个 admin 可以通过远程或者本地方式登录。

    在 Kerberos 安全机制里,一个 principal 就是 realm 里的一个对象,一个 principal 总是和一个密钥(secret key)成对出现的。

    这个 principal 的对应物可以是 service,可以是 host,也可以是 user,对于 Kerberos 来说,都没有区别。

    Kdc(Key distribute center) 知道所有 principal 的 secret key,但每个 principal 对应的对象只知道自己的那个 secret key 。这也是“共享密钥“的由来。

    kerberos操作:

    1. 生成principal

    addprinc -randkey hdfs/hadoop1@JENKIN.COM
    addprinc -randkey hdfs/hadoop2@JENKIN.COM
    addprinc -randkey hdfs/hadoop3@JENKIN.COM
    addprinc -randkey yarn/hadoop1@JENKIN.COM
    addprinc -randkey yarn/hadoop2@JENKIN.COM
    addprinc -randkey yarn/hadoop3@JENKIN.COM
    addprinc -randkey mapred/hadoop1@JENKIN.COM
    addprinc -randkey mapred/hadoop2@JENKIN.COM
    addprinc -randkey mapred/hadoop3@JENKIN.COM
    
    addprinc -randkey HOST/hadoop1@JENKIN.COM
    addprinc -randkey HOST/hadoop2@JENKIN.COM
    addprinc -randkey HOST/hadoop3@JENKIN.COM
    

      

    2. 生成keytab(文件夹需要提前建好)

    xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/hadoop1@JENKIN.COM hdfs/hadoop2@JENKIN.COM hdfs/hadoop3@JENKIN.COM
    xst -norandkey -k /var/kerberos/krb5kdc/keytab/yarn.keytab yarn/hadoop1@JENKIN.COM yarn/hadoop2@JENKIN.COM yarn/hadoop3@JENKIN.COM
    xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab mapred/hadoop1@JENKIN.COM mapred/hadoop2@JENKIN.COM mapred/hadoop3@JENKIN.COM
    
    xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab HTTP/hadoop1@JENKIN.COM HTTP/hadoop2@JENKIN.COM HTTP/hadoop3@JENKIN.COM
    xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab HTTP/hadoop1@JENKIN.COM HTTP/hadoop2@JENKIN.COM HTTP/hadoop3@JENKIN.COM
    

      

    验证生成的keytab是否可用

    kinit -k -t /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/hadoop1@JENKIN.COM
    

    查看:

    klist -e -k -t /var/kerberos/krb5kdc/keytab/hdfs.keytab

      

      

    3. 将可用的keytab发至其他服务器:

    scp /var/kerberos/krb5kdc/keytab/hdfs.keytab hadoop2:/var/kerberos/krb5kdc/keytab/
    scp /var/kerberos/krb5kdc/keytab/hdfs.keytab hadoop3:/var/kerberos/krb5kdc/keytab/
    scp /var/kerberos/krb5kdc/keytab/yarn.keytab hadoop2:/var/kerberos/krb5kdc/keytab/
    scp /var/kerberos/krb5kdc/keytab/yarn.keytab hadoop3:/var/kerberos/krb5kdc/keytab/
    scp /var/kerberos/krb5kdc/keytab/mapred.keytab hadoop2:/var/kerberos/krb5kdc/keytab/
    scp /var/kerberos/krb5kdc/keytab/mapred.keytab hadoop3:/var/kerberos/krb5kdc/keytab/
    

      

    4. 安装jsvc  ( 2.6.x  版本以上不需要通过jsvc 启动 datanode了)

    但需要特别注意如下配置,hdfs-site.xml比须有:

    <property>
            <name>dfs.data.transfer.protection</name>
            <value>integrity</value>
      </property>
    

       

    5. 修改hadoop配置

      以hdfs用户为例

    core-site.xml 增加配置

            <!--kerberos config --> 
            <property> 
                    <name>hadoop.security.authorization</name> 
                    <value>true</value> 
            </property> 
            <property> 
                    <name>hadoop.security.authentication</name> 
                    <value>kerberos</value> 
            </property> 
            <!—默认使用authentication,可使用integrity ,privacy --> 
            <property> 
                    <name>hadoop.rpc.protection</name> 
                    <value>authentication</value> 
            </property>
            <property> 
                    <name>hadoop.security.auth_to_local</name> 
                    <value>DEFAULT</value> 
            </property>    
    

     hdfs-site.xml 增加配置

      <!-- General HDFS security config --> 
      <property> 
            <name>dfs.block.access.token.enable</name> 
            <value>true</value> 
      </property> 
    
      <!--NameNode security config --> 
      <property> 
            <name>dfs.encrypt.data.transfer</name> 
            <value>true</value> 
      </property> 
    
      <property> 
            <name>dfs.https.address</name> 
            <value>hadoop1:50470</value> 
      </property>
      <property> 
            <name>dfs.https.port</name> 
            <value>50470</value> 
      </property> 
      <property> 
            <name>dfs.namenode.keytab.file</name> 
            <value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value>
            <!-- path to the HDFS keytab -->  
      </property> 
      <property> 
            <name>dfs.namenode.kerberos.principal</name> 
            <value>root/_HOST@JENKIN.COM</value> 
      </property> 
      <property> 
            <name>dfs.namenode.kerberos.https.principal</name> 
            <value>HTTP/_HOST@JENKIN.COM</value> 
      </property> 
      <!-- journalnode secure  -->
      <property>
            <name>dfs.journalnode.keytab.file</name>
            <value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value>
      </property>
      <property>
            <name>dfs.journalnode.kerberos.principal</name>
            <value>hdfs/_HOST@JENKIN.COM</value>
      </property>
      <property>
            <name>dfs.journalnode.kerberos.internal.spnego.principal</name>
            <value>HTTP/_HOST@JENKIN.COM</value>
      </property>
      <!--DataNode security config --> 
      <property> 
            <name>dfs.datanode.data.dir.perm</name> 
            <value>700</value> 
      </property> 
      <property> 
            <name>dfs.datanode.address</name> 
            <value>0.0.0.0:1004</value> 
      </property>
      <property> 
            <name>dfs.datanode.http.address</name> 
            <value>0.0.0.0:1006</value> 
      </property>
    
      <property> 
            <name>dfs.datanode.keytab.file</name> 
            <value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value>
            <!-- path to the HDFS keytab --> 
      </property> 
      <property> 
            <name>dfs.datanode.kerberos.principal</name> 
            <value>hdfs/_HOST@JENKIN.COM</value> 
      </property> 
      <property> 
            <name>dfs.datanode.kerberos.https.principal</name> 
            <value>HTTP/_HOST@JENKIN.COM</value> 
      </property>  
      <!--web config--> 
      <property> 
            <name>dfs.web.authentication.kerberos.principal</name> 
            <value>HTTP/_HOST@JENKIN.COM</value> 
      </property> 
      <property> 
            <name>dfs.web.authentication.kerberos.keytab</name> 
            <value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value> 
            <description> 
                     The Kerberos keytab file with the credentials for the   HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint. 
            </description>
      </property>
    

    mapred-site.xml增加配置:

    <!--JobTracker security configs --> 
        <property> 
            <name>mapreduce.jobtracker.kerberos.principal</name> 
            <value>mapred/_HOST@JENKIN.COM</value> 
        </property> 
        <property> 
            <name>mapreduce.jobtracker.kerberos.https.principal</name> 
            <value>HTTP/_HOST@JENKIN.COM</value> 
        </property> 
        <property> 
            <name>mapreduce.jobtracker.keytab.file</name> 
            <value>/var/kerberos/krb5kdc/keytab/mapred.keytab</value>
            <!-- path to the MapReducekeytab --> 
        </property>  
        <!--TaskTracker security configs --> 
        <property> 
            <name>mapreduce.tasktracker.kerberos.principal</name> 
            <value>mapred/_HOST@JENKIN.COM</value> 
        </property> 
        <property> 
            <name>mapreduce.tasktracker.kerberos.https.principal</name> 
            <value>HTTP/_HOST@JENKIN.COM</value> 
        </property> 
        <property> 
            <name>mapreduce.tasktracker.keytab.file</name> 
            <value>/var/kerberos/krb5kdc/keytab/mapred.keytab</value>
            <!-- path to the MapReducekeytab --> 
        </property>  
        <!--jobhistory server security -->  
        <property> 
            <name>mapreduce.jobhistory.address</name> 
            <value>10020</value>
        </property>  
        <property> 
            <name>mapreduce.jobhistory.keytab</name> 
            <value>/var/kerberos/krb5kdc/keytab/mapred.keytab</value> 
        </property>
        <property> 
            <name>mapreduce.jobhistory.principal</name> 
            <value>mapred/_HOST@JENKIN.COM</value> 
        </property> 
    

    yarn-site.xml增加配置:

    <!-- yarn security -->  
        <property> 
            <name>yarn.resourcemanager.keytab</name> 
            <value>/var/kerberos/krb5kdc/keytab/yarn.keytab</value> 
        </property> 
        <property> 
            <name>yarn.resourcemanager.principal</name> 
            <value>yarn/_HOST@JENKIN.COM</value> 
        </property> 
        <property> 
            <name>yarn.nodemanager.keytab</name> 
            <value>/var/kerberos/krb5kdc/keytab/yarn.keytab</value> 
        </property> 
        <property> 
            <name>yarn.nodemanager.principal</name> 
            <value>yarn/_HOST@JENKIN.COM</value> 
        </property> 
    

    服务启动:

    ./sbin/start-all.sh 

    namenode,journalnode,dfszkfcfailovercontroller,datanode,nodemanager,及resourcemanager正常启动即可用安全模式启动。

     

    参考文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SecureMode.html  

      

  • 相关阅读:
    -Dmaven.test.skip=true 和 -DskipTests
    mysql 生成指定范围随机数
    Delphi 6 保存窗体设置
    Sql server left join,right join和inner join的比较
    Mysql配置文件my.ini详解
    网络游戏MMORPG服务器架构
    彻底删除SVN版本库中部分文件或文件夹
    高负载高并发应用 参考索引 地址
    Linux计划任务入门详解
    Linux下SVN的三种备份方式
  • 原文地址:https://www.cnblogs.com/kisf/p/7477440.html
Copyright © 2011-2022 走看看