zookeeper系列:单机模式部署

一、官方网站下载安装包

 

Index of /zookeeper

选择需要的版本,下载相关压缩包(例:apache-zookeeper-3.7.0-bin.tar.gz )

二、正式安装

1、解压目录,并且新建data目录

[root@i-slebi7x6 opt]# cd zookeeper/
[root@i-slebi7x6 zookeeper]# ls
apache-zookeeper-3.7.0.tar.gz
[root@i-slebi7x6 zookeeper]# tar -zxf  apache-zookeeper-3.7.0-bin.tar.gz
[root@i-slebi7x6 zookeeper]# ls
apache-zookeeper-3.7.0-bin  
[root@i-slebi7x6 zookeeper]# cd apache-zookeeper-3.7.0-bin
[root@i-slebi7x6 apache-zookeeper-3.7.0-bin]# ls
bin  conf  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.md
[root@i-slebi7x6 apache-zookeeper-3.7.0-bin]# mkdir data
[root@i-slebi7x6 apache-zookeeper-3.7.0-bin]# ls
bin  conf  data  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.md

2、复制conf目录下的zoo_sample.cfg为zoo.cfg。

[root@i-slebi7x6 conf]# cp zoo_sample.cfg zoo.cfg
[root@i-slebi7x6 conf]# ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg

3、修改相关属性,配置dataDir地址。

zoo_sample.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/zookeeper/apache-zookeeper-3.7.0-bin/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

4、执行bin/zkServer.sh,启动zookeeper。

[root@i-slebi7x6 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

停止zookeeper

./zkServer.sh stop

5、启动CLI

[root@i-slebi7x6 bin]# ./zkCli.sh
Connecting to localhost:2181
2022-01-19 16:16:37,390 [myid:] - INFO  [main:Environment@98] - Client environment:zookeeper.version=3.7.0-e3704b390a6697bfdf4b0bef79e3da7a4f6bac4b, built on 2021-03-17 09:46 UTC
2022-01-19 16:16:37,393 [myid:] - INFO  [main:Environment@98] - Client environment:host.name=i-slebi7x6
2022-01-19 16:16:37,394 [myid:] - INFO  [main:Environment@98] - Client environment:java.version=1.8.0_171
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:java.vendor=Oracle Corporation
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:java.home=/opt/jdk1.8.0_171/jre
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:java.class.path=/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../zookeeper-server/target/classes:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../build/classes:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../zookeeper-server/target/lib/*.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../build/lib/*.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/zookeeper-prometheus-metrics-3.7.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/zookeeper-jute-3.7.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/zookeeper-3.7.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/snappy-java-1.1.7.7.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/slf4j-log4j12-1.7.30.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/slf4j-api-1.7.30.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient_servlet-0.9.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient_hotspot-0.9.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient_common-0.9.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient-0.9.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-transport-native-unix-common-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-transport-native-epoll-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-transport-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-resolver-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-handler-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-common-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-codec-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/netty-buffer-4.1.59.Final.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/metrics-core-4.1.12.1.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/log4j-1.2.17.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jline-2.14.6.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-util-ajax-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-util-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-servlet-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-server-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-security-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-io-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-http-9.4.38.v20210224.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/javax.servlet-api-3.1.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jackson-databind-2.10.5.1.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jackson-core-2.10.5.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/jackson-annotations-2.10.5.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/commons-cli-1.4.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../lib/audience-annotations-0.12.0.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../zookeeper-*.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../zookeeper-server/src/main/resources/lib/*.jar:/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin/../conf:.:/opt/jdk1.8.0_171/lib/dt.jar:/opt/jdk1.8.0_171/lib/tools.jar
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:java.io.tmpdir=/tmp
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:java.compiler=<NA>
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:os.name=Linux
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:os.arch=amd64
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:os.version=4.18.0-240.el8.x86_64
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:user.name=root
2022-01-19 16:16:37,396 [myid:] - INFO  [main:Environment@98] - Client environment:user.home=/root
2022-01-19 16:16:37,397 [myid:] - INFO  [main:Environment@98] - Client environment:user.dir=/opt/zookeeper/apache-zookeeper-3.7.0-bin/bin
2022-01-19 16:16:37,397 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.free=52MB
2022-01-19 16:16:37,398 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.max=228MB
2022-01-19 16:16:37,398 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.total=59MB
2022-01-19 16:16:37,402 [myid:] - INFO  [main:ZooKeeper@637] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@24273305
2022-01-19 16:16:37,407 [myid:] - INFO  [main:X509Util@77] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2022-01-19 16:16:37,413 [myid:] - INFO  [main:ClientCnxnSocket@239] - jute.maxbuffer value is 1048575 Bytes
2022-01-19 16:16:37,424 [myid:] - INFO  [main:ClientCnxn@1726] - zookeeper.request.timeout value is 0. feature enabled=false
2022-01-19 16:16:37,438 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1171] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181.
2022-01-19 16:16:37,439 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1173] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
2022-01-19 16:16:37,447 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1005] - Socket connection established, initiating session, client: /0:0:0:0:0:0:0:1:44486, server: localhost/0:0:0:0:0:0:0:1:2181
JLine support is enabled
2022-01-19 16:16:37,501 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1438] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, session id = 0x10162cbf71a0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、Zookeeper是为别的分布式程序服务的 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等 4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata);  并为用户程序提供数据节点监听服务; Zookeeper集群机制 Zookeeper集群的角色: Leader 和 follower  只要集群中有半数以上节点存活,集群就能提供服务 Zookeeper特性 1、Zookeeper:一个leader,多个follower组成的集群 2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的 3、分布式读写,更新请求转发,由leader实施 4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行 5、数据更新原子性,一次数据更新要么成功,要么失败 6、实时性,在一定时间范围内,client能读到最新数据 Zookeeper数据结构 1、层次化的目录结构,命名符合常规文件系统规范(类似文件系统)    2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识  3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点) 节点类型  a、Znode有两种类型: 短暂(ephemeral)(create -e /app1/test1 “test1” 客户端断开连接zk删除ephemeral类型节点)  持久(persistent) (create -s /app1/test2 “test2” 客户端断开连接zk不删除persistent类型节点) b、Znode有四种形式的目录节点(默认是persistent ) PERSISTENT  PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )  EPHEMERAL  EPHEMERAL_SEQUENTIAL c、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护          d、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序 Zookeeper应用场景 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。 负载均衡 这里说的负载均衡是指软负载均衡。在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中的生产者,消费者负载均衡。 消息中间件中发布者和订阅者的负载均衡,linkedin开源的KafkaMQ和阿里开源的 metaq都是通过zookeeper来做到生产者、消费者的负载均衡。这里以metaq为例如讲下: 生产者负载均衡:metaq发送消息的时候,生产者在发送消息的时候必须选择一台broker上的一个分区来发送消息,因此metaq在运行过程中,会把所有broker和对应的分区信息全部注册到ZK指定节点上,默认的策略是一个依次轮询的过程,生产者在通过ZK获取分区列表之后,会按照brokerId和partition的顺序排列组织成一个有序的分区列表,发送的时候按照从头到尾循环往复的方式选择一个分区来发送消息。 消费负载均衡: 在消费过程中,一个消费者会消费一个或多个分区
### 回答1: Zookeeper模式分为三种:standalone(单机模式)、replicated(多机复制模式)和集群模式。 在standalone(单机模式)中,Zookeeper只运行在单台机器上。这种模式适用于一些小型项目或者用于测试和开发的环境。在单机模式下,Zookeeper可以提供可靠的服务,但是它不能提供高可用性和容错性。 如果你需要在生产环境下使用Zookeeper,建议使用replicated(多机复制模式)或者集群模式。在这些模式下,Zookeeper会在多台机器上运行,从而提高了可用性和容错性。 ### 回答2: zookeeper模式有三种:standalone、replicated、和集群模式。其中,standalone模式是最简单的一种模式,它比较适合于开发阶段或者小规模的生产环境,因为它只需要一个zookeeper实例即可。 在standalone模式下,zookeeper只运行在一个节点上,所有的数据都存储在该节点的内存中。即使在该节点宕机的情况下,由于数据只存储在内存中,因此数据会丢失。 当然,我们也可以将数据持久化到磁盘上,即使节点宕机,在节点重启之后,数据依旧可以恢复。在standalone模式下启动zookeeper时,需要指定一个数据目录,这个目录会被用于存储zookeeper的数据。 在standalone模式下,只有一个zk server,它同时也是leader和follower。因为在standalone模式下只有一个zookeeper实例,因此不需要进行选主操作,也不需要进行数据同步,这种方式简单明了,不需要太多的配置,因此比较适合于小型应用。 总之,在zookeeper的standalone模式下,只有一个zookeeper实例,它负责管理所有的数据,并且不需要进行数据同步和选主。它的工作方式较为简单,但是对于大规模的部署来说,standalone模式不适用。 ### 回答3: Zookeeper是一种分布式的开源协调服务,它用于管理和协调分布式集群中的服务。Zookeeper的主要功能是协调和管理分布式应用程序,并且可以使应用程序在复杂的集群环境中能够自动化的处理失败情况。 Zookeeper模式有三种,分别是Standalone模式单机模式)、集群模式和观察者模式。Standalone模式Zookeeper最简单的模式,也是最适合单机测试和开发的模式。在Standalone模式中,Zookeeper只运行在一台物理机上,不与其他的Zookeeper服务器创建连接形成集群。Standalone模式中只有一个Zookeeper实例,并且所有的客户端都与该实例进行交互。 Standalone模式下,对于单个Zookeeper服务器的应用程序来说,它具有以下优点: 1. 运行和管理方便:只需要一台物理机即可部署Zookeeper,不需要搭建集群,运行和管理相对简单。 2. 可以在单机上模拟多个Zookeeper实例:可以通过在不同端口上启动多个Zookeeper实例,来模拟多个Zookeeper集群上的实例进行测试。 3. 适合开发和测试环境:Standalone模式不需要大量的硬件和网络资源,所以非常适合作为开发和测试环境使用。 但是,Standalone模式在生产环境下并不太适用。因为在单机上运行的Zookeeper实例无法高可用,一旦该物理机出现故障,整个Zookeeper服务就会停止工作。在生产环境下,一般会采用集群模式或者观察者模式来提高Zookeeper的可用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值