ZooKeeper:分布式系统的心脏
引言
在当今的分布式计算环境中,协调和管理服务是一项关键任务。ZooKeeper,作为一个开源的分布式协调服务,已经成为许多分布式系统中的核心组件。本文将带你深入了解ZooKeeper的功能、架构以及它在分布式系统中的作用。
什么是ZooKeeper?
ZooKeeper是一个分布式服务框架,由雅虎开源,现在由Apache软件基金会维护。它提供了一系列简单的原语,用于构建分布式应用,并确保这些应用在大规模分布式系统中的协调一致性。
ZooKeeper的核心功能
1. 数据模型和层次命名空间
ZooKeeper有一个类似于文件系统的数据模型,以树形结构组织数据。这棵树中的每个节点被称为“znode”,每个znode可以存储数据,并且有子节点。
2. 状态同步
ZooKeeper确保所有客户端看到的服务视图是一致的。当发生任何变化(如节点创建、删除或数据更新)时,ZooKeeper会同步这些变化到所有客户端。
3. 原子操作
ZooKeeper支持一系列原子操作,如创建节点、删除节点、设置数据等。这些操作确保了在并发环境中的数据一致性。
4. 顺序访问
ZooKeeper为每个更新操作分配一个全局唯一的递增编号,这允许客户端通过这个编号来顺序访问数据。
5. 高可用性
ZooKeeper设计为高可用性系统。它可以在集群中运行,即使部分服务器发生故障,整个系统仍然可以继续工作。
ZooKeeper的架构
ZooKeeper运行在服务器集群上,这些服务器被称为“ZooKeeper集群”。集群中的服务器分为以下几种角色:
1. Leader
Leader负责处理所有写操作请求。它还负责同步集群中所有服务器的状态。
2. Follower
Follower负责处理读操作请求,并在写操作时转发给Leader。它们还参与Leader选举过程。
3. Observer
Observer是可选的角色,它们只处理读操作请求,不参与写操作的同步过程,也不参与Leader选举。它们用于扩展集群的读能力。
ZooKeeper命令行操作
服务端常用命令
-
启动 ZooKeeper 服务:
./zkServer.sh start
-
查看 ZooKeeper 服务状态:
./zkServer.sh status
-
停止 ZooKeeper 服务:
./zkServer.sh stop
-
重启 ZooKeeper 服务:
./zkServer.sh restart
Zookeeper客户端常用命令
-
连接ZooKeeper服务端:
./zkCli.sh –server ip:port
-
断开连接:
quit
-
显示指定目录下节点
ls 目录
-
创建持久化节点:
create /节点path # 创建持久化节点但不设置值 create /节点path value # 创建持久化节点并且设置值
-
获取节点值:
get /节点path
-
设置节点值:
set /节点path value
-
删除单个节点:
delete /节点path
-
删除包含子节点的节点:
deleteall /节点path
-
创建临时节点:
create -e /节点path value
-
创建顺序节点:
create -s /节点path value
-
查询节点详细信息:
ls -s /节点path
HBase:面向列的分布式数据库
引言
在当今的大数据时代,处理海量数据的需求日益增长。HBase,作为一个开源的、面向列的分布式数据库,已经成为大数据存储和处理的重要工具。本文将带你深入了解HBase的特点、架构以及它在实际应用中的作用。
什么是HBase?
HBase是基于Google的Bigtable模型构建的,是Apache Hadoop生态系统的一部分。它是一个分布式、可扩展、支持列存储的数据库,适用于非结构化和半结构化数据的大规模存储。
HBase的核心特点
1. 面向列的存储
与传统的行存储数据库不同,HBase采用面向列的存储方式。这意味着每个列族(column family)都存储在不同的文件中,可以独立访问,提高了读取效率。
2. 可扩展性
HBase可以轻松地水平扩展,只需添加更多的服务器到集群中即可。这使得HBase能够处理PB级别的数据。
3. 稳定性和可靠性
HBase构建在Hadoop和HDFS之上,继承了Hadoop的高可用性和可靠性。
4. 实时读写
HBase支持实时读写操作,适用于需要快速响应的应用场景。
5. 灵活的数据模型
HBase的数据模型非常灵活,可以存储任意类型的数据,包括结构化、半结构化和非结构化数据。
HBase的架构
HBase架构主要包括以下几个组件:
1. HMaster
HMaster负责管理集群中的RegionServer,如分配Region、负载均衡、元数据管理等。
2. RegionServer
RegionServer负责处理客户端的读写请求,并管理一组Region。每个Region包含一个表的一部分数据。
3. Region
Region是HBase表的水平分区,每个Region包含一个起始行键和一个终止行键之间的所有数据。
4. HDFS
HBase使用Hadoop分布式文件系统(HDFS)作为其底层存储系统,确保了数据的可靠性和高可用性。
HBase组件角色:
- HMaster
功能:
1.监控 RegionServer
2.处理 RegionServer 故障转移
3.处理元数据的变更
4.处理region 的分配或移除
5.在空闲时间进行数据的负载均衡
6.通过 Zookeeper 发布自己的位置给客户端
- HRegionServer
功能:
1.负责存储 HBase 的实际数据
2.处理分配给它的 Region
3.刷新缓存到 HDFS
4.维护WAL
5.执行压缩
6.负责处理 Region 分片
-
HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。
-
Store
HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个Column Family列族(列簇)。
-
MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在 WAL中之后,RegsionServer 会在内存中存储键值对。
HBase部署与启动
(1)下载、解压缩,在/etc/profile全局配置文件中添加
export HBASE_HOME=/export/servers/hbase-2.4.5
export PATH=$PATH:$HBASE_HOME/bin
(2)配置hbase-env.sh
export JAVA_HOME=/export/servers/jdk1.8.0_161
export HBASE_MANAGES_ZK=false # 使用外部的ZooKeeper
(3)配置hbase-site.xml
<configuration>
<!-- hbase数据存放的目录,若用本地目录,必须带上file://,否则hbase启动不起来 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://my2308-host:9000/hbase</value>
</property>
<!-- zk的位置 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
<description>my2308-host:2181</description>
</property>
<!--hbase.cluster.distributed表示是否分布式部署,指定为true-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- hbase主节点的位置 -->
<property>
<name>hbase.master</name>
<value>my2308-host:60000</value>
</property>
</configuration>
(3)拷贝zookeeper的conf/zoo.cfg到hbase的conf/下
(4)启动HBase
执行start-hbase.sh脚本
注意:为了方便启动,可在/etc/profile中添加环境变量
export HBASE_HOME=/export/servers/hbase-2.4.5
export PATH=$PATH:$HBASE_HOME/bin
HBase对ZooKeeper的依赖
HBase依赖于ZooKeeper来实现其高可用性和分布式特性。没有ZooKeeper,HBase将无法有效地管理其分布式环境中的各种操作和状态变化。
总结
简而言之,ZooKeeper对于HBase来说是一个关键组件,它提供了分布式环境中的协调服务,确保了HBase集群的稳定性和一致性。两者共同工作,使得HBase成为一个可靠、可扩展的分布式数据库系统。