1. zookeeper分布式协调者

一、zookeeper介绍

作用:分布式系统中,用于协调者、集群管理、配置管理、命名服务, 解决分布式系统中一致性的问题
开源、Apache组件

1、软件设计架构

1.1 单体架构

所有的业务模块集成在一起的,不利于项目更新、维护、扩展

1.2 SOA架构/分布式

根据业务的功能模块将完整的项目划分成多个独立模块,便于扩展、更新
需要提供集中式的服务管理、配置管理、集群管理、数据一致性功能
拆分粒度粗

1.3 微服务架构

相对于SOA架构来,拆分粒度细

二、zookeeper角色

1、角色

  • leader
    主角色
    处理数据
    维持与follower的心跳,接收处理follower的消息
  • follower

在这里插入图片描述

2、选举机制

目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
服务器5启动,后面的逻辑同服务器4成为小弟。

3、znode类型

zookeeper的节点统一叫做znode

根据节点的生命周期,znode可以分为4种类型,分别是持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)

三、zookeeper集群部署

1、环境规划

192.168.140.10 node01 jdk/zookeeper
192.168.140.11 node02 jdk/zookeeper
192.168.140.12 node03 jdk/zookeeper

2、安装jdk

[root@node01 ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/

[root@node01 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export PATH=$PATH:$JAVA_HOME/bin

[root@node01 ~]# source /etc/profile

[root@node01 ~]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

3、安装配置zookeeper

3.1 安装zookeeper

[root@node01 ~]# tar xf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local/
[root@node01 ~]# mv /usr/local/apache-zookeeper-3.7.1-bin/ /usr/local/zookeeper37

[root@node01 ~]# cp /usr/local/zookeeper37/conf/zoo_sample.cfg /usr/local/zookeeper37/conf/zoo.cfg

3.2 编辑配置文件

[root@node01 ~]# mkdir /usr/local/zookeeper37/data
[root@node01 ~]# mkdir /usr/local/zookeeper37/log

[root@node01 ~]# vim /usr/local/zookeeper37/conf/zoo.cfg
dataDir=/usr/local/zookeeper37/data
dataLogDir=/usr/local/zookeeper37/log

clientPort=2181

server.1=192.168.140.10:2888:3888
server.2=192.168.140.11:2888:3888
server.3=192.168.140.12:2888:3888

2888: 心跳端口
3888:数据同步端口

3.3 创建myid文件

[root@node01 ~]# echo 1 > /usr/local/zookeeper37/data/myid

另外两台主机参考上述配置,注意修改myid文件

4、启动zookeeper,验证状态

第一台主机启动:

[root@node01 bin]# ./zkServer.sh start 
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node01 bin]# 
[root@node01 bin]# ./zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.

// 待第二台主机启动后,再次查看状态
[root@node01 bin]# ./zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

第二台主机启动:

[root@node02 ~]# cd /usr/local/zookeeper37/bin/
[root@node02 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[root@node02 bin]# ./zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

第三台主机启动:

[root@node03 ~]# cd /usr/local/zookeeper37/bin/

[root@node03 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[root@node03 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZooKeeper本身并不提供分布式事务的支持,因为它是一个分布式协调服务,而不是一个关系型数据库。然而,你可以使用ZooKeeper来实现一些基本的分布式事务功能。 在分布式系统中,事务管理涉及多个节点之间的协调和一致性保证。以下是一些使用ZooKeeper实现分布式事务的常见方法: 1. 两阶段提交(Two-Phase Commit,2PC):2PC是一种经典的分布式事务协议,它通过协调器(Coordinator)和参与者(Participant)之间的消息交换来确保事务的一致性。在ZooKeeper中,你可以使用临时节点来记录参与者的状态,并使用节点的监听机制来实现消息的交换和协调器的决策。 2. 分布式锁:在分布式系统中,使用分布式锁可以确保对共享资源的互斥访问,从而实现事务的隔离性。ZooKeeper提供了有序临时节点的特性,你可以利用这个特性来实现分布式锁。参与者可以创建临时节点并获取锁,其他参与者需要等待该节点释放锁后才能获取。 3. 分布式队列:在一些场景中,你可能需要保证消息的有序处理或者实现任务的分发。使用ZooKeeper的有序节点可以实现分布式队列的功能。参与者可以按顺序创建有序节点,消费者可以监听这些节点,并按照顺序处理消息或者获取任务。 需要注意的是,使用ZooKeeper实现分布式事务需要谨慎处理异常情况和数据的一致性。你可能需要考虑一些特殊情况,比如网络分区、节点故障等,以确保事务的正确性和可靠性。 此外,还有一些开源的分布式事务管理框架,如Atomikos、Bitronix等,它们可以与ZooKeeper集成来提供更强大的分布式事务支持。这些框架通常会处理更复杂的事务场景,并提供更高级的功能,如回滚、故障恢复等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值