安装规划

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. docker创建tomcat容器无法正常访问

    记一次创建tomcat docker容器后访问是404,进入到tomcat docker容器后发现webapps是空的 1.挂载 docker run -v localConfigFile:/cont ...

  2. SpringAOP简单例子

    这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象.写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东.目标对象的接口:IStudent.ja ...

  3. ClassLoader.loadClass()与Class.forName()的区别《 转》

    ClassLoader.loadClass()与Class.forName()区别: ClassLoader.loadClass()与Class.forName()大家都知道是反射用来构造类的方法,但 ...

  4. [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap

    [V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...

  5. 在【自定义列】中编辑简单运算公式(Power Query 之 M 语言)

    数据源: "品名"."数量"."单价"三列 目标: 计算销售单价(单价*1.2) 解决方案: 在[自定义列]中使用乘法四则运算 步骤: 打开 ...

  6. Linux中find命令与三剑客之grep和正则

    昨日内容回顾 1.每个月的3号.5号和15号,且这天时周六时 执行 00 00 3,5,15 * 6 2.每天的3点到15点,每隔3分钟执行一次 */3 3-15 * * * 3.每周六早上2点半执行 ...

  7. C# 脚本

    有些情况下,需要在程序运行期间动态执行C#代码,比如,将某些经常改变的算法保存在配置文件中,在运行期间从配置文件中读取并执行运算.这时可以使用C#脚本来完成这些工作. 使用C#脚本需要引用库Micro ...

  8. SQL:大表多表更新的两种方法

    #标记不参与计算的明细(跨平台的或is_end=2)#跨平台订单:暂不处理 说明:大表即order_list_wx,几十万,需要根据小表(order_list_zfb ,几万)来做更新,查出两个平台都 ...

  9. summernote富文本图片上传,增加视频上传功能、批量上传方法

    Summernote 是一个简单灵活的所见即所得的 HTML 在线编辑器,基于 jQuery 和 Bootstrap 构建,支持快捷键操作,提供大量可定制的选项. 但是却只有图片上传功能,没有视频上传 ...

  10. c++内存分布之虚函数(单一继承)

    系列 c++内存分布之虚函数(单一继承) [本文] c++内存分布之虚函数(多继承) 结论 1.虚函数表指针 和 虚函数表 1.1 影响虚函数表指针个数的因素只和派生类的父类个数有关.多一个父类,派生 ...