虚拟机搭建zookeeper集群服务(Center OS 7)

it2022-05-05  154

操作系统:center os 7

软件:jdk8、zookeepe-3.5.5

jdk安装、关闭防火墙:https://blog.csdn.net/DavidSoCool/article/details/93491850

zookeeper下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/

设置虚拟机静态ip:https://blog.csdn.net/DavidSoCool/article/details/93616279

准备开始部署 

# 进入到安装目录 cd /usr/local #上传压缩包 rz #然后选中下载的压缩包 #解压 tar zxvf apache-zookeeper-3.5.5-bin.tar.gz

 查看

开始配置集群服务

#进入配置文件夹目录 cd apache-zookeeper-3.5.5-bin/conf/ #复制一份自带的配置文件,改名为zoo.cfg,启动默认使用这个配置文件 cp zoo_sample.cfg zoo.cfg

查看

 

#编辑文件zoo.cfg vi zoo.cfg

红框中都是新增或修改的地方,需要在dataDir所指向的位置修改为加压的zookeeper路径,在创建一个data文件夹,若不创建就以zookeeper文件夹为data;还有DataLogDir所指向的地方创建一个logs文件夹,这个文件夹不创建也可以,启动后会自动创建;

其中server.1、2、3所指的是集群所在的服务器地址,包括本机有3台,server. 后面的数字标识只要不重复就行,所对应的数字要在data中创建一个名叫myid的文件把数字写到里面(dataDir不创建的在zookeeper问价夹下创建myid文件)。本机的ip是192.168.50.132 所对应的是server.1,所以myid中需要输入1;

ip后面的2888是zk同步数据的端口号,3888是选举出leader的通信端口号,

在dataDir所指向的位置创建一个 myid的文件

#进入文件夹 cd /usr/local/apache-zookeeper-3.5.5-bin/ #创建data文件夹和logs文件夹 mkdir data mkdir logs

查看 

启动后进入logs可以查看日志输出和报错信息,命令如下

#查看日志 tail -f zookeeper-root-server-localhost.localdomain.out #进入data文件夹创建myid文件,并编辑内容 cd data vi myid #在文件中输入1然后保存退出

查看myid内容

 :

.pid 文件是启动后生成的 

配置环境变量,否则无法直接用 zkServer.sh start 启动服务:

vi /etc/profile

#加入java和zookeeper的 # java export JAVA_HOME=/usr/lib/jvm/java export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin # zookeeper export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.5.5-bin export PATH=$PATH:$ZOOKEEPER_HOME/bin

让配置文件生效

source /etc/profile

 第一台zk服务就配置好了,其他2台同理;

第二台机器就把myid改为2,机器端口就对应server.2=当前机器ip:2888:3888

第三台机器就把myid改为3,机器端口就对应server.3=当前机器ip:2888:3888

进入bin目录,分别启动三台机器

#启动命令 zkServer.sh start

 进入logs目录,查看日志输出

第一个红框中的myid=1就是我们配的第一台机器data文件夹中的myid文件对应内容;

第二个红框是报错信息,原因是防火墙没有关闭,关闭防火墙:https://blog.csdn.net/DavidSoCool/article/details/93491850

官网参考文档:http://zookeeper.apache.org/doc/r3.5.5/ 

 

当第二台机器启动后就会开始leader选举,集群服务会通过socket进行通信,服务之间会把自己的epoch、zxid、myid发送到其他服务,当其他服务收到票据后会进行对比,根据定好的规则选举出leader;leader选举出来机器会负责事务操作(比如create,set,delete)和非事务操作(get),非leader机器负责非事务操作(get),如果非leader机器收到了事务操作就会转发给leader,比如第一台机器当选了leader,就会负责增删改事务操作,还有查非事务操作,非leader负责查非事务操作,同时leader还会把事务操作的数据同步到非leader,比如现在有3台机器,leader收到事务操作后会把数据在本机器上执行,然后在发送到其他2台非leader机器,只有过半的机器把数据保存同步成功就算这个事务操作成功了,过半的机器是包含leader机器的,也就是leader保存成功后在发送到第二胎机器,第二胎机器也保存成功就算这个事务操作执行成功了,3台机器有2台就算成功。

选举获胜的条件为:

1、先去比较epoch

2、比较zxid,zxid大的为leader

3、比较myid,最大的为leader

不管选举是否成功,epoch会更新自增,每一轮选举都会改变。

 

启动客户端

# 进入bin目录,连接客户端 后面是目标ip地址 zkCli.sh -server 127.0.0.1:2181

打开参考文档的快速入门,开始创建节点,提示需要以右斜杠开头

查看目录,zookeeper是默认存在的

如果想在register下面创建一个叫note的节点,路径比需是完整的,例如:/register/note

在创建register提示已存在,同一个路径下的节点名字不能重复

创建一个节点note2,后面加个 -e 就是临时节点,当创建这个临时节点的服务断开时,临时节点就会被删除。

设置/register/note节点值为666666

重新设置值为123456

*************** get 监听节点 *************

先在2号机上监听/register/note节点 get 加-w是监听节点,监听的节点有修改、删除都会触发回调通知,不过回调只会触发一次,若想继续获取需要再次设置监听。

 然后在1号机上修改节点的值为888

 2号机输出,节点改变

2号机重新监听note,1号机执行删除note

2号机输出,提示节点删除

重新创建note节点,2号机继续设置监听,然后1号机在该节点下创建一个noteCli、修改、删除

2号机无输出,说明get监听不能监听该节点的子节点变化

*************** ls 监听节点 ***************

这次在2号机的/register下创建一个note2,并用ls命令监听,同样回调只会触发一次,若想继续获取需要再次设置监听

 在1号机上set /register/note2 值为333

查看2号机无输出

在1号机上delete/register/note2

查看2号机输出节点删除

再次创建note2并监听,然后去1号机在note2节点下新增一个noteCli

2号机输出监听节点的子节点发生改变

 

重新设置监听note2,并尝试set /register/note2/noteCli 值为123

查看2号机无输出

尝试delete /register/note2/noteCli 节点

查看2号机输出监听节点的子节点发生改变,

 

 ***************** 现在总结一下get和ls监听的不同 ********************

首先要确定的:监听的节点必须存在

get -w:监听当前节点的set和delete,对子节点变化无法触发回调通知

ls -w:监听当前节点的delete,对子节点的create、delete变化有回调通知

 

 

用ls -s查看2个节点的详细信息

临时节点与非临时节点的区别在于多了一个ephemeraOwner连接会话信息,当创建这个临时节点的服务断开时,临时节点就会被删除。利用这个特性我们可以用来做分布式服务管理,当多个服务启动并同时连接到zk服务,以服务的ip端口为节点名创建临时节点,若是服务挂了节点就会自动删除,我们再监听当前节点的变化,通过回调事件去动态的获取服务列表。

 

 ***************** 设置zookeeper开机启动  *****************

#进入目录 cd /etc/rc.d/init.d #创建zookeeper文件 touch zookeeper #文件授权 chmod +x zookeeper #编辑文件 vim zookeeper #粘贴下面代码到文件中,注意!!粘贴进去的内容是否完整!!本人粘贴了几次开头都是有缺失!! #!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64 case $1 in start) su root /usr/local/apache-zookeeper-3.5.5-bin/bin/zkServer.sh start;; stop) su root /usr/local/apache-zookeeper-3.5.5-bin/bin/zkServer.sh stop;; status) su root /usr/local/apache-zookeeper-3.5.5-bin/bin/zkServer.sh status;; restart) su /usr/local/apache-zookeeper-3.5.5-bin/bin/zkServer.sh restart;; *) echo "require start|stop|status|restart";; esac #保存退出后把文件加入到启动列表 chkconfig --add zookeeper #查看启动列表 chkconfig --list

配置完后可以重启虚拟机,然后输入命令查看zookeeper是否成功启动

ps -ef|grep zookeeper


最新回复(0)