分布式的基石 zookeeper

本文介绍ZooKeeper的基本概念,包括其作为一致性服务的作用原理、安装配置步骤及应用场景。ZooKeeper是一个分布式的协调服务,用于解决分布式环境中复杂的应用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.zookeeper是什么?

zookeeper是paxos算法的开源实现,zookeeper是好多台的机器共同对外服务,其中一台是leader,其余的是follower
leader由选举机制产生,当一台leader挂掉的时候,剩下的follower会选举一台机器作为leader
zookeeper可以看成是数据库,只不过zookeeper的数据主要存在于内存之中,不能存放太多的数据(硬盘辅助存储快照)
zookeeper里面都是节点,除了/节点,每个节点都会对应一份存储的数据,每个节点下面还可以有节点,就像树一样,
通过客户端可以创建节点,删除节点,修改节点上的数据
节点分为2种:
    1.PERSISTENT:创建之后一直存在
    2.EPHEMERAL:客户端断开连接就会消失
需要注意的是:
    ① zookeeper的集群机器数一般是奇数
    ② zookeeper的集群数如果少于(有机器挂掉)一开始集群数一半,便不能继续提供服务

    (zookeeper是paxos算法的实现,以上的这些注意项都是根据算法决定的,不需要刨根问底)


2.zookeeper的安装,配置,启动,监控?
下载zookeeper的安装包,上传,解压(步骤简单,不再详述)
需要启动4台linux,ip不同,但需要在一个网段,网关地址使用虚拟机生成的网卡的ip
(安装虚拟机会在本机装一块虚拟网卡,这里使用virtual box, 也可以使用其他的,使用host-only连接方式)
最终需要4台机器,上面都有zookeeper的安装包,都安装好了jdk,ip和网关都位于同一网段, 比如是下面4台:
zookeeper0:192.168.56.100
zookeeper1:192.168.56.101
zookeeper2:192.168.56.102
zookeeper3:192.168.56.103
(0、1、2三台会作为服务器集群,3会使用客户端对这个集群进行访问和操作【比如在集群中创建节点】)

注意:启动之后把防火墙都关闭:
systemctl stop firewalld.service
systemctl disable firewalld.service(重启之后不会再开启防火墙)

启动之前需要进行一些配置:
我这里解压的zookeeper位于我创建的other目录:
cd /usr/local/other/zookeeper
可以看到conf目录,进去:



如下图,把配置文件zoo_sample.cfg拷贝一份为zoo.cfg

编辑zoo.cfg,加入所有集群的IP地址如下:


这个配置文件里还会看到如下的一行:


这行的目录是zookeeper的数据在硬盘上存储的目录,正式环境自定义此目录,测试就没关系
现在目录还没有,都创建一个,然后在/tmp/zookeeper/目录下面都创建一个myid文件,在这个文件里
写上当前机器的代号,是1就写1,是2就写2,是3就写3,zookeeper会根据这个myid里的内容区分集群里的机器
(因为上面配置3个ip的时候,并不能区分哪台机器是哪个ip)


到这里,就配置完了,下面可以启动zookeeper的服务了
到bin目录下执行命令:
./zkServer.sh start

jps查看是否启动
./zkServer.sh status 命令可以看到当前机器是follower还是leader

这个时候就是启动成功了

下面使用第4台机器的客户端访问,使用命令连接到第一台:

(因为我这里主机名不能识别,所以直接用ip了,如果没问题,server后可以用主机名:端口号的形式)
上去之后命令:ls / 可以看到默认有一个节点:

在这里可以create节点,比如创建名为xx的节点,命令:
create /xx zzzzz
zzzzz在这里是字符串,数据在zookeeper里面是存的byte数组,所以其实可以存任何类型
其余的获取数据get,修改set,删除delete,可以使用help命令查看

zookeeper提供了编程相关的api,可以编写代码访问服务集群,具体实现不举例了,接口都比较通俗易懂,
有时间的可以自己试试

总结zookeeper:
zookeeper是一群机器集群提供对外服务,且这些机器上的数据具有一致性
zookeeper存储数据,数据是类似于树的结构,有很多节点,每个节点绑定一份数据
zookeeper集群有一个leader,很多的follower

zookeeper使用场景?
1. 生产环境多台机器上应用的配置文件一致
比如多台机器上跑着Hadoop,zookeeper上存着一个节点,节点上有一份配置文件,这些机器都往zookeeper上注册
一个监听器,当配置文件改变的时候,会通知这些机器
2. HA(高可用)
2台机器主备热切换,2台都连到zookeeper集群,都存储自己的ip,其中一台是master,一台slave,使用EPHEMERAL节点,
当一台宕机后,对应节点消失,并且另一台把节点状态改为master的节点,第一台恢复后,往zookeeper上创建slave节点,
对外的话,使用的ip都是主节点的ip
3.pub/sub模式
4.naming service
5.load balance
6.分布式锁
...很多

扩展:分布式系统CAP理论

Consistency、Partition tolerance,Availability 三者只能取其二,不能兼得


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值