安装规划

zookeeper集群模式,安装到如下三台机器

10.43.159.237 zdh-237

10.43.159.238 zdh-238

10.43.159.239 zdh-239

Kerberos服务器

10.43.159.240 zdh-240

Kerberos客户端

zdh-237,zdh-238,zdh-239

安装用户

zookeeper/zdh1234

useradd -g hadoop -s /bin/bash -md /home/zookeeper zookeeper

安装zookeeper集群,并且开启kerberos认证

1.

获取并解压Zookeeper安装包

scp garrison@zdh-237:/home/garrison/backup/zookeeper-3.5.1-alpha.tar.gz .

解压zookeeper包

tar -zxvf zookeeper-3.5.1-alpha.tar.gz

在zookeeper-3.5.1-alpha/conf/目录执行

mv zoo_sample.cfg zoo.cfg

修改zoo.cfg文件:

dataDir=/home/zookeeper/zookeeper-3.5.1-alpha/dataDir

clientPort=12181

文件最后添加,配置zookeeper集群通信端口:

server.1=zdh-237:12888:13888

server.2=zdh-238:12888:13888

server.3=zdh-239:12888:13888

创建一个dataDir文件夹:

mkdir ~/zookeeper-3.5.1-alpha/dataDir

再创建一个空文件:

touch /dataDir/myid

最后向该文件写入ID:

echo 1 > /dataDir/myid

配置Java环境变量:

export JAVA_HOME=/usr/java/jdk1.7.0_80

export PATH=JAVA_HOME/bin

export CLASSPATH=.:JAVA_HOME/lib/dt.jar:PATH:ZOOKEEPER_HOME/conf

增加别名,快速进入文件夹:

alias conf='cd ~/zookeeper-3.5.1-alpha/conf'

alias logs='cd ~/zookeeper-3.5.1-alpha/logs'

2.在kerberos服务器zdh-240上,使用root用户,在/root/keytabs目录下,创建Zookeeper的principal

kadmin.local
addprinc -randkey zookeeper/zdh-237@ZDH.COM
addprinc -randkey zookeeper/zdh-238@ZDH.COM
addprinc -randkey zookeeper/zdh-239@ZDH.COM
xst -k zookeeper.keytab zookeeper/zdh-237@ZDH.COM
xst -k zookeeper.keytab zookeeper/zdh-238@ZDH.COM
xst -k zookeeper.keytab zookeeper/zdh-239@ZDH.COM
exit
scp zookeeper.keytab zookeeper@zdh-237:/home/zookeeper/zookeeper-3.5.1-alpha/conf

3.修改zoo.cfg,添加以下安全相关的配置

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true

4.在conf目录创建java.env文件,添加以下内容

export JVMFLAGS="-Djava.security.auth.login.config=/home/zookeeper/zookeeper-3.5.1-alpha/conf/jaas.conf"

5.在conf目录创建jaas.conf文件

Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/home/zookeeper/zookeeper-3.5.1-alpha/conf/zookeeper.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/zdh-237@ZDH.COM";
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/home/zookeeper/zookeeper-3.5.1-alpha/conf/zookeeper.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/zdh-237@ZDH.COM";
};

注意:如果修改jaas.conf配置,则一定要重启zkServer,否则会导致zkClient连不上,

可能是因为zkClinet和zkServer使用同一个jaas配置,实际zkClient应该配置自己的keytab用于访问,

而不是配置成和Server一样,可以在其他机器上面新建一个用户作为访问的客户端。

6.将zookeeper拷贝到其他节点

scp -r zookeeper-3.5.1-alpha zookeeper@zdh-238:/home/zookeeper

然后登陆到zdh-238的zookeeper,修改jaas.conf文件principal

修改zookeeper/zdh-237@ZDH.COM为zookeeper/zdh-238@ZDH.COM

修改myid文件的值为集群对应的值,每个节点的值都必须唯一不能相同:

echo 2 > dataDir/myid

zdh-239等其他节点做同样操作;

同样注意环境变量的设置。

7.启动zookeeper

进入到 bin目录

./zkServer.sh start

查看状态:

./zkServer.sh status

停止zookeeper:

./zkServer.sh stop

8.客户端登陆验证

客户端能够登陆开启Kerberos的zkServer

zkCli.sh -server zdh-237:12181

注意不能使用zkCli.sh -server 10.43.159.237:12181登陆,

会导致鉴权失败,zdh41和10.43.159.237在Kerberos服务器看来是不一样的principle

客户端登陆失败时,报时间过大导致鉴权失败,

需要把集群机器的时间进行统一,kerberos鉴权对时间差有一定要求。

9.登陆AdminServer管理页面查看zookeeper的状态

http://10.43.159.237:8080/commands/

管理端口默认为8080,可以在zoo.cfg修改配置项。

admin.serverPort=18080

其他参考:

1.常用命令

kinit -kt zookeeper.keytab zookeeper/zdh-237@ZDH.COM

deleteall /storm

create /znode1

getAcl /znode1

setAcl /znode1 sasl:zookeeper/zdh-7@ZDH.COM:cdwra

delete /test

ls /

2.zookeeper打印debug日志方法

查看zkClient.sh发现需要在zkEnv.sh中配置ZOO_LOG4J_PROP参数,

ZOO_LOG4J_PROP="DEBUG,CONSOLE"

打开远程debug端口,在zkEnv.sh增加如下配置:

CLIENT_JVMFLAGS=" ${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=1077,server=y,suspend=y "

服务端的类似

3.使用zkClient.sh访问开启kerberos的服务端

当zookeeper的服务端的用户名不为zookeeper,例如是zookeeperkrb,

则需要在zkEnv.sh增加如下配置,指明客户端需要访问的服务端的名称:

CLIENT_JVMFLAGS=" -Dzookeeper.sasl.client.username=zookeeperkrb $CLIENT_JVMFLAGS"

客户端访问的服务端名称是在如下代码中进行的初始化,默认值为zookeeper:

org.apache.zookeeper.ClientCnxn.SendThread.startConnect()

String principalUserName = System.getProperty("zookeeper.sasl.client.username", "zookeeper");

Zookeeper集群安装(开启kerberos)的更多相关文章

  1. 1、zookeeper集群安装

    前提准备3台centos7.0虚拟机 c7003:192.168.70.103 c7004:192.168.70.104 c7005:192.168.70.105 并在三台虚拟机上配置hosts为 1 ...

  2. 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例

    centos7.1下 ZooKeeper 集群安装配置+Python实战范例 下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeepe ...

  3. hbase和ZooKeeper集群安装配置

    一:ZooKeeper集群安装配置 1:解压zookeeper-3.3.2.tar.gz并重命名为zookeeper. 2:进入~/zookeeper/conf目录: 拷贝zoo_sample.cfg ...

  4. Zookeeper集群安装Version3.5.1

    Zookeeper集群安装,基于版本3.5.1, 使用zookeeper-3.5.1-alpha.tar.gz安装包. 1.安装规划 zookeeper集群模式,安装到如下三台机器 10.43.159 ...

  5. zookeeper 集群安装与配置

    Zookeeper安装和配置 准备工作 安装 JDK,此步略. 下载 zookeeper wget http://archive.apache.org/dist/zookeeper/zookeeper ...

  6. zookeeper:一.zookeeper集群安装

    1.zookeeper简介2.安装zookeeper2.1 安装环境准备2.2 安装zookeeper2.2.1.解压zookeeper压缩包到/opt/zookeeper2.2.2.编辑zookee ...

  7. Zookeeper集群安装详解

    Zookeeper的角色   Zookeeper集群搭建 要求:服务器集群规模不小于3个节点,各服务器之间系统时间要保持一致! 安装步骤 1.在h1节点解压,目录改名. tar –zxvf zooke ...

  8. ZooKeeper集群安装

    ZooKeeper是Apache提供的.分布式服务协调系统,应用比較广泛. 由于项目中使用Kafka MQ,而Kafka全然使用ZooKeeper实现Kafka各组件的服务协调,包含Broker.Co ...

  9. Zookeeper 集群安装配置,超详细,速度收藏!

    今天,栈长分享下 Zookeeper 的集群安装及配置. 下载 下载地址:http://zookeeper.apache.org/ 下载过程就不说了,我们下载了最新的zookeeper-3.4.11. ...

随机推荐

  1. android知识点duplicateParentState

    android知识点duplicateParentState 今天要做一个效果,组件RelativeLayout上有两个TextView,这两个TextView具有不同的颜色值,现在要的效果是,当Re ...

  2. spring 事务处理中,同一个类中:A方法(无事务)调B方法(有事务),事务不生效问题

    public class MyEntry implements IBaseService{ public String A(String jsonStr) throws Exception{ User ...

  3. 软件测试人员必备的linux命令

    1 目录与文件操作1.1 ls(初级)使用权限:所有人功能 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录). 参数 : -a 显示所有档案及目录 (ls内定将档案名或目录名称开头为 ...

  4. velocity示例

    创建maven项目 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...

  5. Oracle带输入输出参数的存储过程

    (一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60. 创建存储过程: create or rep ...

  6. springmvc中的异常处理方法

    //1.自定义异常处理类       2.编写异常处理器    3.配置异常处理器 package com.hope.exception;/** * 异常处理类 * @author newcityma ...

  7. 使用beanFactory工厂实例化容器的方式实现单例模式

    //配置文件bean.properties(注意书写顺序) accountService=com.itheima.service.impl.AccountServiceImplaccountDao=c ...

  8. 【C/C++】小红的字符串 / 中兴捧月

    考试的时候想复杂了,其实直接一边写放进set里去重就可以了 很有意思 自己的理解就是cpp的map+set或者就是set可以完成大多数java的hashset操作 链接:https://ac.nowc ...

  9. 面渣逆袭:Java集合连环三十问

    大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...

  10. 【C++】使用VS2022开发可以在线远程编译部署的C++程序

    前言: 今天没有前言. 一.先来一点C++的资源分享,意思一下. 1.c++类库源码以及其他有关资源.站点是英文的,英文不好的话可以谷歌浏览器在线翻译.http://www.cplusplus.com ...