Zookeeper集群安裝(開啟kerberos)

安裝規劃

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=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

配置Zookeeper環境變量方便以后操作:

export ZOOKEEPER_HOME=:~/zookeeper-3.5.1-alpha
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$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安裝到zdh41上面,單機模式10.43.159.41 zdh41 ZDH.COM 安...
    木木與呆呆閱讀 1,640評論 0 4
  • 搭建Hadoop的HDFS HA及YARN HA集群,基于2.7.1版本安裝。 安裝規劃 角色規劃IP/機器名安裝...
    木木與呆呆閱讀 1,014評論 0 7
  • 一、zookeeper集群簡介 Zookeeper集群中只要有過半的節點是正常的情況下,那么整個集群對外就是可用的...
    會跳舞的機器人閱讀 3,152評論 3 19
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 今年多大了,生活的怎么樣?快樂嗎?有期待嗎?滿意嗎?十多年光陰老大不小了,也沒活出個滿意的自己來,在工作的時間寫下...
    forwarder閱讀 258評論 0 0