【Zookeeper centos8 + zookeeper 3.7.0 环境安装】
准备环境centos8 +jdk8 (linux环境已经提前搭建好了)zookeeper使用版本版本: zookeeper-3.7.0下载zkhttp://zookeeper.apache.orgApache ZooKeeperApache Downloads下载链接: https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookee
准备环境
centos8 + jdk8 (linux环境已经提前搭建好了)
zookeeper使用版本版本: zookeeper-3.7.0
下载zk
http://zookeeper.apache.org
下载链接: https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
准备三台虚拟机
192.168.71.134
192.168.71.128
192.168.71.135
安装位置: ~
开始安装
上传文件
rz -E
解压
# 解压
tar -xzvf apache-zookeeper-3.7.0-bin.tar.gz
# 重命名
mv apache-zookeeper-3.7.0-bin zookeeper-3.7.0-bin
命令积累:
ctrl+u ctrl+k 分别代表光标处往前和光标处往后删除
ctrl+a ctrl+e 分别代表把管标移动到最前和最后
ctrl+ c : Linux 快速删除已输入的命令 (xshell 无效)
xshell清理屏幕: ctrl+l或ctrl+shift+l(还留有历史记录)
ctrl+shift+a(删除了历史缓冲区记录)
配置
zoo.cfg配置
[root@localhost ~]# cd zookeeper-3.7.0-bin/conf/
[root@localhost conf]# ls
configuration.xsl log4j.properties zoo_sample.cfg
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/root/zookeeper-3.7.0-bin/data
dataLogDir=/root/zookeeper-3.7.0-bin/log
server.1=192.168.71.134:2888:3888
server.2=192.168.71.128:2888:3888
server.3=192.168.71.135:2888:3888
: wq
配置如下
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/root/zookeeper-3.7.0-bin/data
dataLogDir=/root/zookeeper-3.7.0-bin/log
server.1=192.168.71.134:2888:3888
server.2=192.168.71.128:2888:3888
server.3=192.168.71.135:2888:3888
说明:
2181: 是zookeeper对外服务的端口
2888: 是各个节点的通信端口
3888: 是leader崩溃后的选举端口
myid配置
[root@localhost conf]# cd ../
[root@localhost zookeeper-3.7.0-bin]# ls
bin conf docs lib LICENSE.txt NOTICE.txt README.md README_packaging.md
root@localhost zookeeper-3.7.0-bin]# mkdir data log
[root@localhost zookeeper-3.7.0-bin]# ls
bin conf data docs lib LICENSE.txt log NOTICE.txt README.md README_packaging.md
[root@localhost zookeeper-3.7.0-bin]# vim ./data/myid
[root@localhost zookeeper-3.7.0-bin]#
192.168.71.134 该主机输入1保存
其他主机重复zoo.cfg和myid配置操作, 只不过myid配置一次是2,3
192.168.71.128 该主机输入2保存
192.168.71.135 该主机输入3保存
启动集群
配置zk环境变量(方便敲命令,非必须)
vim ~/.bashrc
...
export ZK_HOME=/root/zookeeper-3.7.0-bin/bin
export PATH=$ZK_HOME:$PATH
: wq
# 使其生效
source .bashrc
[root@localhost ~]# echo $ZK_HOME
/root/zookeeper-3.7.0-bin/bin
[root@localhost ~]# echo $PATH
/root/zookeeper-3.7.0-bin/bin:/usr/local/jdk1.8.0_211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
启动
分别启动三台
[root@localhost ~]# zkServer.sh start /root/zookeeper-3.7.0-bin/conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.7.0-bin/conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost ~]# jps
3712 Jps
3677 QuorumPeerMain
[root@localhost ~]#
使用客户端连接
zkCli.sh -server localhost:2181
报错如下:
empting reconnect except it is a SessionExpiredException.
EndOfStreamException: Unable to read additional data from server sessionid 0x0, likely server has closed socket
报错意思是好像客户server已经关闭
可能是端口防火墙导致不能通讯
开通防火墙
[root@localhost ~]# firewall-cmd --list-ports
[root@localhost ~]# firewall-cmd --list-ports --permanent
[root@localhost ~]# firewall-cmd --add-port=2181/tcp --add-port=2888/tcp --add-port=3888/tcp --permanent
success
[root@localhost ~]# firewall-cmd --list-ports --permanent
2181/tcp 2888/tcp 3888/tcp
[root@localhost ~]# firewall-cmd --reload
success
开通防火墙还是不行
jsp发现192.168.71.128的java进程竟然没有启动起来
在这台机器上发现myid是22(无语,自己太粗心了)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdcOyyAu-1640181602688)(img/zookeeper%E9%9B%86%E7%BE%A4%E6%A8%A1%E5%BC%8F%E9%83%A8%E7%BD%B2/image-20211222210207668.png)]
[root@localhost zookeeper-3.7.0-bin]# jps
3536 ZooKeeperMain
3409 QuorumPeerMain
3595 Jps
多了一个ZooKeeperMain进程,这个是我们客户端的连接进程
注意: 防火墙开通那一步还是必须的
练习客户端命令
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 9] create /zk
Created /zk
[zk: localhost:2181(CONNECTED) 10] create -es /zk/test
Created /zk/test0000000000
[zk: localhost:2181(CONNECTED) 11]
[zk: localhost:2181(CONNECTED) 11] get /zk/test0000000000
null
[zk: localhost:2181(CONNECTED) 12]
[zk: localhost:2181(CONNECTED) 12] create /zk/test
Created /zk/test 覆盖了临时有序节点
[zk: localhost:2181(CONNECTED) 13] create -es /zk/test
Created /zk/test0000000002
[zk: localhost:2181(CONNECTED) 14] create -es /zk/test
Created /zk/test0000000003
[zk: localhost:2181(CONNECTED) 15] create -es /zk/test data1
Created /zk/test0000000004
[zk: localhost:2181(CONNECTED) 16] get /zk/test0000000004
data1
[zk: localhost:2181(CONNECTED) 17]
[zk: localhost:2181(CONNECTED) 17] delete /zk/test0000000004
[zk: localhost:2181(CONNECTED) 18] deleteall /zk
[zk: localhost:2181(CONNECTED) 19] ls -s /
[zookeeper]
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x10000000a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 20]
# acl
acl命令
Zookeeper 的 ACL(Access Control List),分为三个维度:scheme、id、permission
通常表示为:scheme:id:permission
- schema:代表授权策略
- id:代表用户
- permission:代表权限
Scheme
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(可以通过 addauth digest user:pwd 来添加授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用 ip 地址认证
id
id 是验证模式,不同的 scheme,id 的值也不一样。
scheme 为 auth 时:username:password
scheme 为 digest 时 : username:BASE64(SHA1(password))
scheme 为 ip 时: 客户端的 ip 地址。
scheme 为 world 时 anyone。
Permission
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这 5 种权限简写为 crwda(即:每个单词的首字符缩写)
CREATE©:创建子节点的权限
DELETE(d):删除节点的权限
READ®:读取节点数据的权限
WRITE(w):修改节点数据的权限
ADMIN(a):设置子节点权限的权限
getAcl
[zk: localhost:2181(CONNECTED) 9] create /acl
Created /acl
[zk: localhost:2181(CONNECTED) 10] create -c /acl/test 'test acl'
Created /acl/test
[zk: localhost:2181(CONNECTED) 11] getAcl /acl/test
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 12]
setAcl
[zk: localhost:2181(CONNECTED) 12] setAcl /acl/test world:anyone:crwa
[zk: localhost:2181(CONNECTED) 13] getAcl /acl/test
'world,'anyone
: crwa
[zk: localhost:2181(CONNECTED) 14] delete /acl/test # 可以删除
addauth
[zk: localhost:2181(CONNECTED) 24] addauth digest user1:12345
[zk: localhost:2181(CONNECTED) 25] setAcl /acl/test auth:user1:12345:crwa
Insufficient permission : /acl/test # 权限不足
[zk: localhost:2181(CONNECTED) 28] create /acl/test2 # 重新创建一个节点,因为之前那个节点创建时候,这个用户还没有添加
Created /acl/test2
[zk: localhost:2181(CONNECTED) 29] setAcl /acl/test2 auth:user1:12345:crwa
[zk: localhost:2181(CONNECTED) 30] getAcl /acl/test2
'digest,'user1:+owfoSBn/am19roBPzR1/MfCblE=
: crwa
[zk: localhost:2181(CONNECTED) 31] delete /acl/test2 # 可以删除,旧版好像不能删除
[zk: localhost:2181(CONNECTED) 34] create /acl/test2 data2
Created /acl/test2
[zk: localhost:2181(CONNECTED) 35] setAcl /acl/test2 auth:user1:12345:crw
[zk: localhost:2181(CONNECTED) 36] delete /acl/test2 # what? 依然可以删除
[zk: localhost:2181(CONNECTED) 39] setAcl /acl/test2 auth:user1:12345:r
[zk: localhost:2181(CONNECTED) 40] delete /acl/test2 # 还是可以删除
help,发现有个whoami, 可能新版需要切换用户吧,以后有时间再研究
Digest
auth 与 digest 的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录
create /testDir/testDigest data addauth digest user1:123456
setAcl /testDir/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa # 使用 digest
来设置权限
注意:这里如果使用明文,会导致该 znode 不可访问通过明文获得密文
shell>
java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456
deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=
更多推荐
所有评论(0)