Linux 从零开始部署zookeeper集群遇到的问题

安装JDK环境

ZooKeeper是用Java编写的,运行在Java环境上,因此,在部署zk的机器上需要安装Java运行环境

下面是JDK8的压缩包
链接:https://pan.baidu.com/s/1oeEFRXHNCB8uHOB1mc86EQ
提取码:64u0

下载好后,使用Xshell进行传递文件给虚拟机,主机就是ifconfig里面的ens33里面的IP地址,选择SFTP安全文件传输协议,端口号22,连接后会问你虚拟机的用户和密码,就是你虚拟机登录的用户名和密码,连接好后将上面下好的压缩包拖到黑色的命令行,就会自动帮你把文件传进去了
请添加图片描述下面就是传输成功了,不使用拖文件的方式也可以直接输入命令
Uploading jdk-8u141-linux-x64.tar.gz to remote:/root/jdk-8u141-linux-x64.tar.gz
可以看到remote就是指的远程主机,后面的路径就是上传的路径

请添加图片描述

tar -zxf jdk-8u141-linux-x64.tar.gz
mv jdk1.8.0_141/ /usr/local/

解压压缩包,并移到/usr/local/用户的程序目录,配置环境

vim /etc/profile

修改配置为如下,关于export PATH那里的配置如果本来就有只需在后面加上:${JAVA_PATH}即可,注意前面有个冒号

export JAVA_HOME=/usr/local/jdk1.8.0_141
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${PATH}:${JAVA_PATH}

让配置文件生效,javac是测试jdk配置成功没有,没有成功记得检测版本号要和自己的jdk一致,因为版本号就是文件夹的名字

source /etc/profile
javac

出现如下则配置java环境成功
在这里插入图片描述

安装Zookeeper

下载Zookeeper

注意版本很重要,博主原先使用zookeeper-3.7.0版本,无法搭建成功

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz --no-check-certificate

解压

tar -zxvf zookeeper-3.3.3.tar.gz
mv zookeeper-3.3.3 /opt/zookeeper
cd /opt/zookeeper

修改配置

需要将conf目录下的zoo_sample.cfg名称修改为zoo.cfg

mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg 
vi /opt/zookeeper/conf/zoo.cfg 

可以看到clientPort=2181,即zookeeper服务启动的端口为2181

启动服务器

以下命令可以看到命令台日志打印,不是后台运行

/opt/zookeeper/bin/zkServer.sh start

出现如下情况即是启动成功
在这里插入图片描述

使用zookeeper客户端连接服务器

/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

出现如下,则是连接够从
在这里插入图片描述

搭建集群

在集群模式下至少部署三个zookeeper服务器,所以我们先复制zookeeper两次

cp -r /opt/zookeeper /opt/zookeeper1
cp -r /opt/zookeeper /opt/zookeeper2

修改配置

修改三个zookeeper文件夹下的配置,其他配置不变

/opt/zookeeper/conf/zoo.cfg

vi /opt/zookeeper/conf/zoo.cfg
tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181
server.1=127.0.0.1:2886:3886
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

/opt/zookeeper1/conf/zoo.cfg

vi /opt/zookeeper1/conf/zoo.cfg
tickTime=2000
dataDir=/tmp/zookeeper1
clientPort=2281
server.1=127.0.0.1:2886:3886
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

/opt/zookeeper2/conf/zoo.cfg

vi /opt/zookeeper2/conf/zoo.cfg
tickTime=2000
dataDir=/tmp/zookeeper2
clientPort=2381
server.1=127.0.0.1:2886:3886
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

修改完配置还需要创建myid文件,对应server.1、server.2、server.3配置,myid文件必须dataDir配置的目录下

mkdir  /tmp/zookeeper
mkdir  /tmp/zookeeper1
mkdir  /tmp/zookeeper2

touch /tmp/zookeeper/myid
touch /tmp/zookeeper1/myid
touch /tmp/zookeeper2/myid

然后将myid文件内容分别改为1、2、3

vi /tmp/zookeeper/myid
vi /tmp/zookeeper1/myid
vi /tmp/zookeeper2/myid

使用netstat检查要开启的九个端口有没有被占用

netstat -anp | grep 2181
netstat -anp | grep 2281
netstat -anp | grep 2381
netstat -anp | grep 2886
netstat -anp | grep 3886
netstat -anp | grep 2888
netstat -anp | grep 3888
netstat -anp | grep 2889
netstat -anp | grep 3889

启动三个Zookeeper进程

启动之前必须切换到root才有权限,或者赋权

chmod a+wxr /opt/zookeeper/
chmod a+wxr /opt/zookeeper1/
chmod a+wxr /opt/zookeeper2/

启动服务器

/opt/zookeeper/bin/zkServer.sh start 
/opt/zookeeper1/bin/zkServer.sh start 
/opt/zookeeper2/bin/zkServer.sh start 

开启第三个服务器出现了如下问题,可以看到是/tmp/zookeeper2/myid文件里不是3,而是333,修改后就好了
在这里插入图片描述

使用如下命令将Zookeepr客户端连接集群

/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381

出现如下界面则搭建成功
在这里插入图片描述

Zookeepr客户端的使用

刚刚使用客户端成功连接了集群,现在我们来使用一下客户端

创建znode

/znode1 是路径,可以通过路径可以访问到数据 “znode-persistent” ,注意,创建时路径和数据之间只能隔着一个空格,否则传入的数据就是空,使用get时是取不到的,后面的所有命令之间都只能有一个空格

create /znode1 "znode-persistent" 	#创建持久节点
create /znode2 "znode-temp" -e   		#创建临时节点,重启后数据消失
create /znode3 "znode-sequence" -s   	#创建顺序节点,会自动向路径填充10位序列号,序号是递增的

创建临时节点和顺序节点需要ACL权限,否则运行后zookeeper客户端会直接退出,可以使用
scheme:id :perm 来标识一个有效的ACL信息,分别对应权限模式(Scheme)、授权对象(ID)和权限(Permission)

create -e /znode2 "znode-temp" digest:user1:XDkd2dsEuhc9ImU3q8pa8UOdtpI=:cwrdaCreated /znode2
create -s /znode3 "znode-sequence" digest:user1:XDkd2dsEuhc9ImU3q8pa8UOdtpI=:cwrdaCreated /znode3

使用ls2 就可以看见我们创建的节点是否成功了

ls2 /

可以看到下面出现了我们刚刚创建的znode1、znode2、znode30000000018,这个znode30000000018每个人都可能不一样,因为是一个系统生成的递增的序列号
在这里插入图片描述

获取数据

获取刚刚存入的znode节点中数据,

get /znode1
get /znode2
get /znode30000000018 #每个人可能不一样

出现了如下问题,原因是get 和 /znode1之间多了一个空格
在这里插入图片描述

检查状态

stat /znode1
stat /znode2
stat /znode30000000018

出现如下信息
在这里插入图片描述

cZxid = 0x200000014   #zone节点的Id
ctime = Wed Feb 23 01:49:22 PST 2022 #节点创建时间
mZxid = 0x200000014 #zone节点修改后的id
mtime = Wed Feb 23 01:49:22 PST 2022 #节点修改时间
pZxid = 0x200000014 #子zone节点的id
cversion = 0 #节点所拥有的子节点被修改的版本号
dataVersion = 0 #当前节点数据的版本号
aclVersion = 0 #节点的ACL被修改的版本号
ephemeralOwner = 0x0  #如果节点为临时节点,那么它的值为这个节点拥有者的session ID,否则为0x0
dataLength = 18 #数据长度
numChildren = 0 #子节点个数

设置数据

set /znode1 "znode-persistent-set" 
set /znode2 "znode-temp-set" 
set /znode30000000018 "znode-sequence-set"

查看是否修改成功

get /znode1
get /znode2
get /znode30000000018 #每个人可能不一样

监视znode的变化

get /znode1 -w
set /znode1 "znode-persistent-set" 

出现如下情况则说明监视成功,每次添加监听器,只会监听一次事件,之后会失效
在这里插入图片描述

创建znode的子节点

只需要在父路径下再加路径就可以创建子节点

create /znode1/znode-children1 "znode-children1"
create /znode1/znode-children2 "znode-children2"
create /znode1/znode-children3 "znode-children3"

列出znode的子节点

ls /znode1

删除znode

delete /znode1/znode-children1
ls /znode1

出现如下情况则删除成功
在这里插入图片描述

查看Zookeepr命令

ls

出现如下信息
在这里插入图片描述

stat path [watch] #查看路径节点状态,-w添加监视器
set path data [version] #修改已经存在的节点的数据
ls path [watch] #列出该路径下的子结点,path为/时列出所有节点
delquota [-n|-b] path #删除quota节点,删除/zookeeper/quota下的子结点
ls2 path [watch] #列出该路径下的子结点,path为/时列出所有节点,同时会显示一些状态信息
setAcl path acl #设置acl权限
setquota -n|-b val path #设置quota节点 所以path都保存在/zookeeper/quota下作为其子结点
history #查看最近使用的命令历史记录
redo cmdno #重复执行之前执行过的命令 cmdno是命令行显示的那个数字,表示第几条命令。最开始为0
printwatches on|off # on表示输出watch事件,off表示关闭输出watch事件
delete path [version] # 删除节点
sync path #强制客户端所连接的服务器与leader进行数据同步,这样在读取path的值就是最新的值
listquota path #列出quota节点,列出/zookeeper/quota下的子结点
get path [watch] #获取路径节点的数据,-w添加监视器
create [-s] [-e] path data acl #创建znode节点 -s有序 -e临时 path路径 data事件 acl权限
addauth scheme auth #添加认证用户 
quit  #退出连接
getAcl path #读取ACL权限
close  #关闭连接
connect host:port #打开连接
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lolxxs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值