开源大数据集群部署(十五)Zookeeper集群部署

算法露台
• 阅读 83

作者:櫰木

1、集群规划

主机版本角色系统用户
hd1.dtstack.com3.7.1followerzookeeper
hd2.dtstack.com3.7.1leaderzookeeper
hd3.dtstack.com3.7.1followerzookeeper

2、zookeeper kerberos主体创建

在生产中zk服务端和客户端票据可以设置成不通名称或相同名称,本次设置成同一个票据名称zookeeper/HOST@DTSTACK.COM格式表示zk服务端和客户端票据。

票据名票据文件文件分布
zookeeper/hd1.dtstack.com@DTSTACK.COM/etc/security/keytab/zookeeper.keytabhd1.dtstack.com主机
zookeeper/hd2.dtstack.com@DTSTACK.COM/etc/security/keytab/zookeeper.keytabhd2.dtstack.com主机
zookeeper/hd3.dtstack.com@DTSTACK.COM/etc/security/keytab/zookeeper.keytabhd3.dtstack.com主机

在hd1.dtstack.com主机上root权限下创建kerberos主体,使用zookeeper系统用

在每台机器上执行生成脚本,执行此脚本可自动生成principal(在每个节点执行)

bash /root/bigdata/getkeytabs.sh /etc/security/keytab/zookeeper.keytab  zookeeper

3、zookeeper 安装

修改配置文件

root@hd2.dtstack.com ~]# cd /root/bigdata && tar -xzvf apache-zookeeper-3.7.1-bin.tar.gz -C /opt
[root@hd2.dtstack.com ~]# ln -s /opt/apache-zookeeper-3.7.1-bin/ /opt/zookeeper
[root@hd2.dtstack.com ~]#cd /opt/zookeeper
[root@hd2.dtstack.com conf]#cat >zoo.cfg<<EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data/
dataLogDir=/data/zookeeper/log/
clientPort=2181
maxCnxns=20000
maxClientCnxns=2000
minSessionTimeout=4000
maxSessionTimeout=60000
autopurge.purgeInterval=24
autopurge.snapRetainCount=5
quorum.cnxn.threads.size=20
#zk集群服务地址配置
server.1=hd1:2888:3888
server.2=hd2:2888:3888
server.3=hd3:2888:3888
#zk kerberos配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true
requireClientAuthScheme=sasl
quorum.auth.enableSasl=true
quorum.auth.learner.saslLoginContext=Learner
quorum.auth.server.saslLoginContext=Server
quorum.auth.kerberos.servicePrincipal=zookeeper/hd1.dtstack.com@DTSTACK.COM
4lw.commands.whitelist=mntr,conf,ruok,cons
EOF

说明:

  • 改配置文件中ssl配置(标红色部分)目的是解决ranger 配置hive等组件在连接测试过程出现无权限问题
  • 创建SSL认证文件zookeeper-jaas.conf、java.env
root@hd2.dtstack.com conf]# cat >zookeeper-jaas.conf<<EOF
Server {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/etc/security/keytab/zookeeper.keytab"
  storeKey=true
  useTicketCache=false
  principal="zookeeper/hd2.dtstack.com@DTSTACK.COM";
};
Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/etc/security/keytab/zookeeper.keytab"
  storeKey=true
  useTicketCache=false
  principal="zookeeper/hd2.dtstack.com@DTSTACK.COM";
};
Learner {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/etc/security/keytab/zookeeper.keytab"
  storeKey=true
  useTicketCache=false
  principal="zookeeper/hd2.dtstack.com@DTSTACK.COM";
};
EOF

说明:

  • principal用具体票据名,不能用hadoop/host_name@DTSTACK.COM或hadoop/_HOST@DTSTACK.COM,否则报错
  • zk服务端和客户端票据在kerberos中已经创建,此处省略,客户端和服务端票据是不一样的
root@hd2.dtstack.com conf]# cat >java.env<<EOF
export JVMFLAGS="-Djava.security.auth.login.config=/opt/zookeeper/conf/zookeeper-jaas.conf"
export JAVA_HOME="/opt/java"
EOF
 
[root@hd2.dtstack.com conf]# cat >/data/zookeeper/data/myid<<EOF
2
EOF

同步到其他机器

root@hd2.dtstack.com conf]# cd /opt/
[root@hd2.dtstack.com software]# scp -r apache-zookeeper-3.7.1-bin root@hd1.dtstack.com:/opt/
[root@hd2.dtstack.com software]# scp -r apache-zookeeper-3.7.1-bin root@hd3.dtstack.com:/opt/

在其他机器修改对应配置

hd1.dtstack.com主机root权限:

[root@hd1.dtstack.com conf]# cat >/data/zookeeper/data/myid<<EOF
1
EOF
[root@hd1.dtstack.com ~]# cd /opt/apache-zookeeper-3.7.1-bin/conf
[root@hd1.dtstack.com ~]# sed -i 's#hd2.dtstack.com#hd1.dtstack.com#g' zookeeper-jaas.conf
[root@hd1.dtstack.com ~]# sed -i 's#hd2.dtstack.com#hd1.dtstack.com#g' zoo.cfg

hd3.dtstack.com主机root权限:

[root@hd3.dtstack.com conf]# cat >/data/zookeeper/data/myid<<EOF
3
EOF
[root@hd3.dtstack.com ~]# cd /opt/apache-zookeeper-3.7.1-bin/conf
[root@hd3.dtstack.com ~]# sed -i 's#hd2.dtstack.com#hd3.dtstack.com#g' zookeeper-jaas.conf
[root@hd3.dtstack.com ~]# sed -i 's#hd2.dtstack.com#hd3.dtstack.com#g' zoo.cfg

4 zookeeper集群启停

zk集群启停脚本zk_cluster.sh内容如下:

[root@hd1.dtstack.com apache-zookeeper-3.7.1-bin]# cat >zk_cluster.sh<<EOF
#!/bin/bash
 case $1 in
"start"){
for i in hd1.dtstack.com hd2.dtstack.com hd3.dtstack.com
do
        echo ---------- zookeeper $i 启动 ------------
ssh $i "source /etc/profile;/opt/zookeeper/bin/zkServer.sh start"
done
};;
"stop"){
for i in hd1.dtstack.com hd2.dtstack.com hd3.dtstack.com
do
        echo ---------- zookeeper $i 停止 ------------    
ssh $i "source /etc/profile;/opt/zookeeper/bin/zkServer.sh stop"
done
};;
"status"){
for i in hd{1..3}
do
        echo ---------- zookeeper $i 状态 ------------    
ssh $i "source /etc/profile;/opt/zookeeper/bin/zkServer.sh status"
done
};;
esac
EOF

修改整体目录文件权限

[root@hd1.dtstack.com apache-zookeeper-3.6.3-bin]# chown -R zookeeper:zookeeper /opt/apache-zookeeper-3.7.1-bin

启动命令:

sh zk_cluster.sh start

停止命令:

sh zk_cluster.sh stop

查看状态命令:

sh zk_cluster.sh status

5 zookeeper集群验证

可通过执行sh zk_cluster.sh status查看
开源大数据集群部署(十五)Zookeeper集群部署

端口查看,命令netstat -an|grep 2181
开源大数据集群部署(十五)Zookeeper集群部署

进程查看,命令jps
开源大数据集群部署(十五)Zookeeper集群部署

至此,zk三节点集群搭建完成

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
thymeleaf在工作中遇到的问题及解决办法(四)
1、关于字符串拼接的问题       字符串拼接可以使用如下方式。<ahref""th:text"第${StartNo}页''共${countPage}页"       还有一种更优雅的方式,使用“||”减少了字符串的拼接,代码如下。<ahref""th:
Wesley13 Wesley13
3年前
java RSA算法的性能记录
环境JavaHotSpot(TM)64BitServerVM1.7.0\_05x86\_64加密<table<tr<td内容长度</td<tdkeySize</td<td耗时(微秒)</td</tr<tr<td32</td<td512</td<td87</td</tr<tr<td
Stella981 Stella981
3年前
Jira 使用手册
<tablestyle"width:100%;margin:200px0300px0;"<tr<thDate</th<thRevisionversion</th<thDescription</th<thauthor</th</tr<tr<td20180614</td<tdV1.0.0</td
Wesley13 Wesley13
3年前
2020软件工程作业03
<styletable{width:100%;/\表格宽度\/margin:auto;/\外边距\/emptycells:show;/\单元格无内容依旧绘制边框\/fontsize:18px;}table,th,td{border:2pxsolidpink;}li{fontsize:1
Stella981 Stella981
3年前
AQS (AbstractQueuedSynchronizer)源码导读:锁的获得与释放
AQS是什么?AbstractQueuedSynchronizer简称AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。Providesaframeworkforimplementingblockinglocksandrelatedsynchronizers(semaphores,events,etc)th
Wesley13 Wesley13
3年前
Java 日期与时间
Java的日期Java没有内置的日期类,但可以导入java.time包,这个包中包含了许多类,可用于处理日期和时间。例如:<table<tbody<tr<thstyle"width:25%"Java类</th<thstyle"width:75%"描述</th</tr<tr<td<code
Easter79 Easter79
3年前
Thrift
安装thriftmacbrewinstallthrift安装完成检查thriftversion新建maven项目pom.xml<dependencies<dependency<groupIdorg.apache.th
Stella981 Stella981
3年前
Ngrok搭建环境映射外网访问本地
!(http://static.oschina.net/uploads/space/2016/0105/151215_OnNg_1444646.png)!(http://static.oschina.net/uploads/space/2016/0112/144706_tH0X_1444646.jpg)在开发微信公众号、企业号等需要外
Wesley13 Wesley13
3年前
C# 线程基础
1 线程是进程中的一个执行流 2线程是一个可以单独操作的活动3线程创建和常用方法 a 创建    Thread thnewThread(Method); b常见方法 th.start()//启动线程 th.Abort()//终止线程 Thread.Sleep(n)//休眠线程(停止n毫秒后继续执
Stella981 Stella981
3年前
99th Packers and Movers Services
99th.co.inistheleadingsearchdirectoryforIndia.Hereonecanfindtheverifiedcompaniesinanyindustryliketransport,logistics,packers&moversservice,BusinessService
吴押狱 吴押狱
1年前
测试用
Inrecentyears,theOscarshavebeenwidelycriticized.Frombeingtoopoliticallycorrecttolackinginnovation,andwithplummetingviewership,th