首先,创建三台服务器
在一台电脑上安装VMWare Workstation。在VM上安装三台Linux,分别是1个主节点,2个从节点,如下图所示。
注意:这3个节点的IP地址在实际搭建时会有所不同。
第一步
- 在master上启动 Linux命令终端,创建目录mkdir /usr/zookeeper,执行命令cd
/usr/zookeeper,切换到该目录下,把zookeeper文件上传到该目录下 - Zookeeper压缩文件zookeeper -3.4.12.tar.gz进行解压缩
- 在/usr/zookeeper/zookeeper-3.4.12目录下新建data,logs两个文件夹
- 进入zookeeper -3.4.12/conf目录,把zoo_sample.cfg文件复制一份名字改成zoo.cfg
第二步
修改zoo.cfg文件,需要修改一下几个地方
dataDir=/usr/zookeeper/zookeeper-3.4.12/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.12/logs
同时在文件末尾添加:
server.1=IP地址1:2888:3888
server.2=IP地址2:2888:3888
server.3=IP地址3:2888:3888
在slave1和slave2上新建/usr/zookeeper文件夹,将配置好的zookeeper复制到另外两台服务器上
scp -r /usr/zookeeper/zookeeper-3.4.12 root@slave1:/usr/zookeeper/
scp -r /usr/zookeeper/zookeeper-3.4.12 root@slave2:/usr/zookeeper/
分别在三台服务器的/usr/zookeeper/zookeeper-3.4.12/data/目录下新建myid文件,内容分别为1, 2, 3,
创建方式如下,在192.168.86.150服务器上执行如下命令,另外两台服务器以此类推。
echo "1" > myid
把每台虚拟机上的zookeeper安装目录配置到环境变量中,执行命令vi /etc/profile,如图。
然后让配置文件生效,执行命令
source /etc/profile
启动服务,在每台虚拟机上执行zookeeper启动命令zkServer.sh(注意,zkServer.sh文件位于$ZOOKEEPER_HOME/bin)。然后用jps查看,如图所示。
执行命令
zkServer.sh start
master:
slave1:
slave2:
注意启动集群中节点时必须按myid的顺序执行启动
启动完成后,查看服务状态。
执行命令
zkServer.sh status
master:
slave1:
slave2:
Zookeeper客户端命令
zkCLi是Zookeeper安装之后自带的客户端命令行工具,运行zkCli.sh连接到本机端口2181,连接命令为
zkCli.sh -server 127.0.0.1:2181
若想连接到集群或者其他主机,可用以下命令
zkCli.sh -server host:post [host:post,host:post...]
连接成功后,系统会输出 Zookeeper的相关环境以及配置信息
客户端命令的常见操作如下。
- 显示根目录下文件:ls/。使用ls命令来查看当前zookeeper中所包含的内容。
- 显示根目录下文件:ls2/。查看当前节点数据并能看到更新次数等数据。
- 创建文件,并设置初始内容。create /zk “zkdata”。在当前目录下创建一个新的znode节点“zk”以及与它关联的字符串。
- 获取文件内容: get /zk。获取zk所包含的信息。
- 修改文件内容: set /zk “zknewdata”。 对zk所关联的字符串进行设置。
- 删除文件:delete /zk。删除节点zk。
- history:打印出最近执行的十个命令。
- 退出客户端:quit。
- 帮助命令:help。
在Zookeeper启动下,master上执行命令,命令目录是$ZOOKEEPER_HOME/bin。
./zkCli.sh -timeout 5000 -r -server master:2181
连接到ZooKeeper服务器,如图所示。
bin/zkCli.sh -timeout 5000 -r -server slave1:2181
bin/zkCli.sh -timeout 5000 -r -server slave2:2181
在Zookeeper客户端执行命令ls /,查看子节点个数
在Zookeeper客户端执行命令create /nodel test,创建节点nodel,数据是test。如图所示。
获取节点数据以及节点其他信息,执行命令
get /nodel
修改已存在的节点数据,执行命令
set /nodel tt
执行命令stat /,查看当前节点概况(不显示子节点),如图所示
ZooKeeper做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全。ZooKeeper通过ACL(Access Controll List)机制来解决访问权限问题。
总体来说,ZooKeeper的节点有5种操作权限:
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限。
身份的认证有4种方式:
- world:默认方式,相当于全世界都能访问
- auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
- digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
- ip:使用IP地址认证
Cli命令行下可以这样查看某个节点的权限。
通过getAcl命令可以发现,刚创建的节点,默认是 world,anyone的认证方式,具有cdrwa所有权限。
实现下面的案例,步骤如下:
-
创建zookeeper节点zklzp,数据是zklzp-data
[zk: 192.168.86.150:2181(CONNECTED) 9] create /zklzp
zklzp-data
Created /zklzp -
创建zookeeper认证用户lzp,密码为12345
[zk: 192.168.86.150:2181(CONNECTED) 10] addauth digest lzp:12345
-
设置zookeeper节点zklzp的ACL控制用户是认证用户lzp,拥有r权限
[zk: 192.168.86.150:2181(CONNECTED) 12] setAcl /zklzp auth:lzp:12345:r
cZxid = 0x500000012
ctime = Thu Mar 07 01:07:15 PST 2019
mZxid = 0x500000012
mtime = Thu Mar 07 01:07:15 PST 2019
pZxid = 0x500000012
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 15
numChildren = 0 -
查看zookeeper节点zklzp的ACL控制用户信息
[zk: 192.168.86.150:2181(CONNECTED) 13] getAcl /zklzp
'digest,'lzp:ASfK8BOXi0GRywlk+I3llVQw9lY=
: r