人,总免不了有心结,限制着自己,难以前行。对于ZooKeeper的理解,以及实践也拖了很久,今天用零散时间学习一下,补点干货。
一、简述
Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来选举Leader(基于Fast Paxos协议),配置信息维护等,在一个分布式的环境中,需要一个Master实例或存储一些配置信息,确保文件写入的一致性等。
ZooKeeper是一个分布式,开放源码的分布式应用程序协调服务,包含一个简单的原语集,是Hadoop和Hbase的重要组件,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
二、配置服务
我直接在ubuntu服务器上开搞了,跳过下载、安装等基本操作,直奔主题。
ZooKeeper建议使用hostname,而非ip。这需要对主机的/etc/hostname和/etc/hosts做host绑定。
ZooKeeper以Fast Paxos算法为基础,用于完成leader的选举工作,所以至少需要3个节点。
为此,我准备了以下3个节点:
192.168.158.135 ubuntu-zookeeper-01
192.168.158.151 ubuntu-zookeeper-02
192.168.158.152 ubuntu-zookeeper-03
192.168.158.151 ubuntu-zookeeper-02
192.168.158.152 ubuntu-zookeeper-03
首先,为各个主机配置自己的hostname:
sudo vim /etc/hostname
例如,在192.168.158.135机器上配置/etc/hostname为:
ubuntu-zookeeper-01
然后,为各个主机配置host绑定:
sudo vim /etc/hosts
例如:
在各主机上做好host绑定。
达到如下效果,说明配置ok
zlex@ubuntu-zookeeper-01:~$ ping ubuntu-zookeeper-02
PING ubuntu-zookeeper-02 (192.168.158.151) 56(84) bytes of data.
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=1 ttl=64 time=5.64 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=2 ttl=64 time=0.643 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=3 ttl=64 time=0.821 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=4 ttl=64 time=0.873 ms
^C
--- ubuntu-zookeeper-02 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 0.643/1.994/5.641/2.107 ms
PING ubuntu-zookeeper-02 (192.168.158.151) 56(84) bytes of data.
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=1 ttl=64 time=5.64 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=2 ttl=64 time=0.643 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=3 ttl=64 time=0.821 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=4 ttl=64 time=0.873 ms
^C
--- ubuntu-zookeeper-02 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 0.643/1.994/5.641/2.107 ms
接下来配置zookeeper的配置,让它快速跑起来。
把刚才准备好的hostname配置在这个文件中:
sudo vim /etc/zookeeper/conf/zoo.cfg
配置文件的说明:
-
- tickTime :基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
- dataDir :存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
- clientPort :这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
- initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 5 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
- syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
- server.A = B:C:D : A表示这个是第几号服务器,B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader
接着,使server.1~server.3 与各主机的 /etc/zookeeper/conf/myid 相对应:
sudo vim /etc/zookeeper/conf/myid
例如,ubuntu-zookeeper-01与server.1相对应,其myid的值就是1
$ cat /etc/zookeeper/conf/myid
1
1
如果出现类似错误:
zlex@ubuntu-zookeeper-01:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Error contacting service. It is probably not running.
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Error contacting service. It is probably not running.
说明myid文件中与hostname中对应的标示不一致,即ubuntu-zookeeper-01与server.1相对应,myid的值应为1。
现在,我们就可以启动服务了:
sudo /usr/share/zookeeper/bin/zkServer.sh start
具体可用的命令有:
{start|start-foreground|stop|restart|status|upgrade|print-cmd}
最后,观察启动日志:
tail -f /var/log/zookeeper/zookeeper.log
究竟哪台机器成为leader:
zlex@ubuntu-zookeeper-01:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: follower
zlex@ubuntu-zookeeper-02:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: follower
zlex@ubuntu-zookeeper-03:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: leader
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: follower
zlex@ubuntu-zookeeper-02:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: follower
zlex@ubuntu-zookeeper-03:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: leader
服务都启动了,ubuntu-zookeeper-03成为Leader节点了~
暂时就到这里,接下来补充服务验证。
相关推荐
- **配置管理**:Zookeeper 提供了一种中心化的配置管理方式,可以集中管理和分发应用的配置,使集群中的所有节点共享相同的配置信息。 - **名字服务**:Zookeeper 可以作为分布式系统中的命名服务,帮助客户端找到...
在实际工作中,掌握Zookeeper的安装配置和基本操作对于理解和管理分布式系统至关重要。通过实验,可以深入理解Zookeeper如何在集群环境中进行数据协调和管理,这对于大数据项目中的任务调度、服务发现和配置共享等...
总结,本篇文章涵盖了 Zookeeper 的安装、配置、集群搭建,以及在 Dubbo 中使用 Zookeeper 作为服务注册中心的基本步骤。了解并掌握这些知识,对于构建和维护分布式系统具有重要意义。实际应用中,还需要注意监控、...
ZooKeeper 集群安装配置 ZooKeeper 是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护...
《ZooKeeper组件安装配置详解》 ZooKeeper,作为分布式协调服务的基石,是Apache Hadoop项目的重要组成部分。在大型分布式系统中,ZooKeeper常用于管理命名服务、配置管理、集群同步、选举等核心功能。本章将详细...
总结一下,ZooKeeper单机集群配置主要包括下载与解压、环境变量配置、ZooKeeper配置文件修改、初始化数据目录、启动ZooKeeper服务以及测试服务。在Java Dubbo项目中,ZooKeeper发挥着关键的协调作用,使得服务之间的...
在Linux集群环境中搭建Zookeeper集群是一个涉及到多台服务器间协调工作的复杂过程,需要对Zookeeper的工作原理和配置有深入的了解。本篇详细阐述了从下载安装到集群配置的全过程。 首先,Zookeeper集群部署的前提...
zookeeper集群zoo.cfg配置文件,下载后将zookeeper地址改成实际地址,可以直接使用
Zookeeper集群是一个分布式协调服务,常用于管理大型分布式系统中的命名空间、配置管理、领导者选举等任务。在本文中,我们将深入探讨如何搭建一个由三个节点组成的Zookeeper集群,并了解其配置过程。 首先,...
Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的、开放源码的分布式应用程序协调服务,是集群管理的基石,提供了诸如配置维护、命名服务、分布式同步、组服务等分布式基础服务。本教程将深入讲解在...
zookeeper集群的配置文件示例,zoo.cfg,里面已经配置好了,一看就懂。只要把该文件放在zookeeper目录下的conf文件夹下即可
一款好用的zookeeper配置内容导入导出工具,适用平台是windows,但是也可以修改run.bat为shell脚本,适合linux。 带图形界面,修改config中的config.xml,添加需要管理的zookeeper地址信息,同时可以定义两个用户...
- ZooKeeper的基本操作,如创建节点、读取数据 - 自定义Spring Bean以扩展其功能 - Java编程,包括多线程和网络通信(ZooKeeper API的使用) - 分布式系统中的配置管理策略 通过这种方式,我们可以实现更灵活的配置...
Zookeeper 配置和集群操作 Zookeeper 是一个基于 Java 的分布式应用程序协调服务,提供了配置管理、命名、提供分布式同步和提供组服务等功能。下面将对 Zookeeper 的配置和集群操作进行详细说明。 Zookeeper 配置 ...
HBase 和 ZooKeeper 配置详解 HBase 和 ZooKeeper 是两个非常重要的分布式系统组件,分别用于分布式数据库和分布式协调服务。今天,我们将详细介绍如何配置 HBase 和 ZooKeeper,以便更好地理解它们之间的交互。 ...
ZooKeeper Linux 集群搭建流程可以分为四步:下载和解压 ZooKeeper、创建目录和 myid 文件、修改 ZooKeeper 启动配置文件、启动 ZooKeeper 节点。通过这些步骤,可以成功搭建 ZooKeeper Linux 集群,满足分布式系统...
zookeeper安装与配置
ZooKeeper 是一个广泛使用的分布式协调服务,它提供了许多有用的功能,如配置管理、名字服务、分布式锁等。然而,在 ZooKeeper 中存在一些安全漏洞,例如未经授权的访问、数据泄露等。为了解决这些问题,本文将介绍...
1. **基本配置**:包括Zookeeper的数据目录(dataDir)和日志目录(dataLogDir),用于存储事务日志和快照数据。例如: ```properties dataDir=/path/to/zookeeper/data dataLogDir=/path/to/zookeeper/logs ```...
2. `tickTime`: 设置Zookeeper服务器的基本时间单位,通常为2000毫秒。 3. `dataDir`: 指定每个Zookeeper服务器的数据存储路径。 HBase 1.0.0的配置涉及到与Hadoop HA的集成。在`hbase-site.xml`中,你需要: 1. `...