1 zookeeper介绍
Apache ZooKeeper是一个开源的分布式协调服务,用于管理大型分布式系统的节点配置信息和状态。它提供了一种简单且高效的方式来协调和管理分布式应用程序的配置信息、命名注册、同步和群体服务。
Apache ZooKeeper是分布式系统中的关键组件,它通过简单有效的方式解决了分布式环境中的数据一致性、配置管理、命名服务等关键问题。作为一个成熟的项目,ZooKeeper持续在性能、可靠性和易用性方面进行创新,为构建可扩展、高可用的分布式系统提供了强有力的支持。随着分布式计算的日益普及,ZooKeeper在现代云计算和大数据领域的重要性将持续增长。
1.1 核心特性
-
高可靠性: ZooKeeper通过在其服务器节点之间复制数据存储来提供高可靠性。如果一个节点失败,其他节点可以接管,确保系统的持续运行。
-
数据模型: ZooKeeper维护一个类似文件系统的层次数据结构,允许用户在树中的节点上存储数据。
-
数据变更通知: 客户端可以在ZooKeeper节点上设置监视点(watcher),当节点数据变更时,会通知这些客户端。
-
顺序一致性: ZooKeeper保证了来自客户端的请求将按照其发送的顺序来处理。
-
原子性: 操作要么全部成功,要么全部失败,不会出现中间状态。
-
实时性: ZooKeeper保证了系统状态的最终一致性,但并不保证强实时性。
1.2 架构和组件
-
集群模式: ZooKeeper可以运行在单个服务器上,也可以运行在一个由领导者和若干跟随者组成的集群模式中。
-
节点(ZNode): ZooKeeper中的数据单元称为ZNode,它既可以像目录一样存储数据,也可以有子节点。
-
会话: 客户端与ZooKeeper集群之间的交互是通过建立会话来进行的,每个会话都有唯一的会话ID。
-
监视点(Watcher): Watcher机制允许客户端在指定的节点上设置监视点,以便在节点发生变化时获得通知。
-
领导者选举: ZooKeeper集群通过内部的领导者选举机制来处理新加入的节点或现有节点的失效。
1.3 使用ZooKeeper
-
配置管理: ZooKeeper可以存储和管理分布式应用中的配置信息。
-
命名服务: 提供了一种为分布式系统中的资源和服务命名的方式。
-
分布式锁: ZooKeeper可以用来实现分布式锁,以控制分布式系统中资源的访问。
-
队列管理: 通过ZooKeeper实现分布式队列,支持任务的分发和协调。
-
集群管理: 用于监控集群状态,实现集群中服务的自动恢复和负载均衡。
1.4 性能优化
-
读写分离: 读操作可以在任何一个服务器节点上完成,而写操作会在领导者节点上进行,然后复制到其他节点。
-
内存存储: ZooKeeper将所有数据存储在内存中,以提高数据访问速度。
-
日志和快照: 使用事务日志和数据快照来保证数据的一致性和恢复能力。
1.5 安全性和管理
-
访问控制: ZooKeeper支持基于ACL(Access Control Lists)的权限控制机制。
-
安全通信: 支持使用SASL和SSL/TLS来保证数据传输的安全性。
-
监控和诊断: 提供了多种工具和API来监控ZooKeeper集群的状态和性能。
1.6 社区和生态系统
-
活跃的社区: ZooKeeper有一个活跃的开源社区,为用户提供支持、文档和资源。
-
生态系统集成: 与Hadoop、Kafka、HBase等大数据技术栈紧密集成,是许多大数据平台的关键组件。
-
扩展性: 提供了扩展接口,允许开发者根据需求扩展ZooKeeper的功能。
2 zookeeper集群搭建
2.1 zookeeper3.4.9下载
sudo wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
tar -xvf zookeeper-3.4.9.tar.gz //解压zookeeper
2.2 更改zookeeper的配置文件
sudo cd zookeeper-3.4.9/
sudo cp conf/zoo_sample.cfg conf/zoo.cfg //拷贝实例配置文件
sudo vi conf/zoo.cfg //编辑配置文件,三台zookeeper,三台主机host分别zoo1,zoo2,zoo3,编号为server.1,server.2,server.3
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/data/zookeeper
clientPort=2181
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
2.3 配置host文件
sudo vi /etc/hosts
将zoo1,zoo2,zoo3对应的ip配置到hosts文件
2.4 配置zookeeper工作目录
根据2中的配置,创建工作目录
sudo mkdir -p /var/data/zookeeper
sudo cd /var/data/zookeeper
sudo vi myid //创建id文件
将本机对应的编号写入文件中,配置操作需要在集群中每台节点执行一遍
2.5 启动集群
分别进入集群主机的zookeeper3.4.9目录,执行
sudo bin/zkServer.sh start
所有机器执行完成后,查看每天机器的集群状态
sudo bin/zkServer.sh status
显示信息如下:(leader主机)
ZooKeeper JMX enabled by default
Using config: /home/li/workspace/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
2.6 解决zookeeper只监听了ipv6地址的问题
(1)关闭ipv6
sudo vi /etc/modprobe.d/dist.conf
添加如下内容:
alias net-pf-10 off
alias ipv6 off
(2)设置ipv6开机不启动
sudo chkconfig ip6tables off
(3)修改network配置
sudo vi /etc/sysconfig/network
添加如下内容
NETWORKING_IPV6=no
(4)重启机器
sudo reboot
(5)通过netstat -ntlp 查看启动的端口