前言
应 用项目中都会有一些配置信息,这些配置信息数据量少,一般会保存到内存、文件或者数据库,有时候需要动态更新。当需要在多个应用服务器中修改这些配置文件 时,需要做到快速、简单、不停止应用服务器的方式修改并同步配置信息到所有应用中去。本篇文章就是介绍如何使用ZooKeeper来实现配置的动态同步。
ZooKeeper
在《hive Driver类运行过程》一文中可以看到hive为了支持并发访问引入了ZooKeeper来实现分布式锁。参考《ZooKeeper典型应用场景一览》一文,ZooKeeper还可以用作其他用途,例如:
- 数据发布与订阅(配置中心)
- 负载均衡
- 命名服务(Naming Service)
- 分布式通知/协调
- 集群管理与Master选举
- 分布式锁
- 分布式队列
一些在线系统在运行中,需要在不停止程序的情况下能够动态调整某一个变量的值并且能够及时生效。特别是当部署了多台应用服务器的时候,需要能够做到在一台机器上修改配置文件,然后在同步到所有应用服务器。这时候使用ZooKeeper来实现就很合适了。
数据发布与订阅
发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。
使 用ZooKeeper的发布与订阅模型,可以将应用中用到的一些配置信息放到ZK上进行集中管理。这类场景通常是这样:应用在启动的时候会主动来获取一次 配置,同时,在节点上注册一个Watcher,这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的。这样 的场景适合数据量很小,但是数据更新可能会比较快的需求。
配置存储方案
配置文件通常有如下几种保存方式:
-
将配置信息保存在程序代码中
这种方案简单,但每次修改配置都要重新编译、部署应用程序。显然这种方案很不方便,也不可靠,更无法做到修改的实时生效。 -
将配置信息保存在xml文件或者属性文件中
在参数信息保存 在xml或者属性文件中,当需要修改参数时,直接修改 xml 文件。这样无需重新编译,只需重新部署修改的文件即可。但然后对所有的应用进行重新部署。这样做的缺点显而易见,要往上百台机器上重新部署应用,简直是一 个噩梦。同时该方案还有一个缺点,就是配置修改无法做到实时生效。修改后往往过一段时间才能生效。 -
将配置信息保存在数据库中
当需要修改参数时,直接修改数据 库,然后重启分布式应用程序,或者刷新分布式应用的缓存。尽管这种做法比以上两种方案简单,但却面临着单点失效问题。如果数据库服务器停机,则分布式应用 程序的配置信息将无法更新。另外这种方案的配置修改生效实时性虽然比第二种方案好些,但仍然不能达到某些情况下的要求。
基于ZooKeeper的配置信息同步方案
如果使用ZooKeeper来实现,就可以直接把配置信息保存到ZooKeeper中,或者把属性文件内容保存到ZooKeeper中,当属性文件内容发生变化时,就通知监听者如应用程序去重新读取配置文件。
在网上搜索了一下,很能找到好用的现成的代码实现。有的基于ZooKeeper来扩张jdk的hashmap来存储配置参数,如:使用ZooKeeper实现静态数据中心化配置管理,也有人直接实现了一个基于java并发框架的工具包,如:menagerie。
注意
:以下部分文字和图来自:基于ZooKeeper的配置信息存储方案的设计与实现1.pdf
基于ZooKeeper的特性,借助ZooKeeper可以实现一个可靠的、简单的、修改配置能够实时生效的配置信息存储方案,整体的设计方案如图:
整个配置信息存储方案由三部分组成:ZooKeeper服务器集群、配置管理程序、分布式应用程序。
ZooKeeper 服务器集群存储配置信息,在服务器上创建一个保存数据的节点(创建节点操作);配置管理程序提供一个配置管理的UI界面或者命令行方式,用户通过配置界面 修改ZooKeeper服务器节点上配置信息(设置节点数据操作);分布式应用连接到ZooKeeper集群上(创建ZooKeeper客户端操作),监 听配置信息的变化(使用获取节点数据操作,并注册一个watcher)。
当配置信息发生变化时,分布式应用会更新程序中使用配置信息。
源代码
找到一个淘宝工程师写的实现方式, 代码见:zkpublisher
优点
借助 ZooKeeper我们实现的配置信息存储方案具有的优点如下:
- 简单。尽管前期搭建ZooKeeper服务器集群较为麻烦,但是实现该方案后,修改配置整个过程变得简单很多。用户只要修改配置,无需进行其他任何操作,配置自动生效。
- 可靠。ZooKeeper服务集群具有无单点失效的特性,使整个系统更加可靠。即使ZooKeeper 集群中的一台机器失效,也不会影响整体服务,更不会影响分布式应用配置信息的更新。
- 实时。ZooKeeper的数据更新通知机制,可以在数据发生变化后,立即通知给分布式应用程序,具有很强的变化响应能力。
总结
本文参考了网上的一些文章,给出了基于ZooKeeper的配置信息同步方案,解决了传统配置信息同步方案的缺点如实时性差、可靠性差、复杂等。
参考文章
相关推荐
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据...理解和熟练掌握 Zookeeper 的安装、配置和使用,对于构建和维护大规模分布式系统具有重要意义。
文章中提到,传统的配置信息存储方案存在不足,尤其是在面对大规模分布式应用时,如何实现配置信息的可靠、实时、简单更新是一大挑战。基于ZooKeeper的配置信息存储方案,能够很好地解决这个问题。ZooKeeper的配置...
当需要更新配置时,可以通过Zookeeper的发布/订阅机制实时推送配置变更到各个客户端,实现配置文件在管理中心和客票交易中间件之间的快速同步。这种方式避免了传统方法中需要重启服务才能使配置生效的问题,大大减少...
同时,`distribute-lock`这个文件可能包含了具体的实现代码或示例,通过学习和理解这个文件,我们可以更深入地掌握如何在实践中运用ZooKeeper实现分布式锁。 总之,ZooKeeper的分布式锁机制为解决分布式环境下的...
可以建⽴立在同步、配置管理、分组和命名等服务的更⾼高级别的实现的基础之上。 ZooKeeper 意欲设计⼀一个易于编程的环境,它的⽂文件系统使⽤用我们所熟悉的⽬目录树结构。 ZooKeeper 使⽤用 Java 所编写,但是⽀...
总结,本篇文章涵盖了 Zookeeper 的安装、配置、集群搭建,以及在 Dubbo 中使用 Zookeeper 作为服务注册中心的基本步骤。了解并掌握这些知识,对于构建和维护分布式系统具有重要意义。实际应用中,还需要注意监控、...
本文将详细介绍如何使用Mysql、Haproxy、Mycat、PXC、Zookeeper实现高可用集群,涵盖了整个架构图、应用程序的访问流程、数据的读写分离、负载均衡、数据库节点的搭建、Zookeeper的应用等多个方面。 整体架构图 在...
Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的、开放源码的分布式应用程序协调服务,是集群管理的基石,提供了诸如配置维护、命名服务、分布式同步、组服务等分布式基础服务。本教程将深入讲解在...
通过以上步骤,可以实现一个由5个节点组成的Zookeeper集群配置。值得注意的是,`zk.local.open`的值在集群中的Zookeeper节点上应设为`true`,而在非Zookeeper节点上则应设为`false`,以指示是否启动本地Zookeeper...
ZkConfig的主要作用是在系统集群中实现配置文件的实时同步。当集群中的任何一台服务器上的配置文件发生变化时,ZkConfig能够保证所有集群服务器上的配置文件同步更新。它还能在不启动web容器的情况下,实现内存中...
《ZooKeeper实现服务节点HA主备自动切换与高可用性》 在分布式系统中,服务的高可用性(High Availability, HA)是至关重要的,它确保即使在单个组件故障的情况下,系统仍能正常运行。ZooKeeper,作为Apache的一个...
在云原生环境中,Zookeeper因其强大的一致性、高可用性和可扩展性,成为了实现服务发现、配置管理、命名服务等关键任务的重要工具。 在Zookeeper中,配置文件起着至关重要的作用,它们定义了Zookeeper服务器的行为...
在本示例中,我们将探讨如何使用ZooKeeper作为配置中心实现配置的自动发现和更新。 1. **ZooKeeper的配置中心角色** ZooKeeper作为一个集中式的配置管理工具,可以存储和分发应用的配置信息,确保所有服务实例共享...
**Zookeeper**是一个高性能、分布式且开源的应用协调服务,作为Apache Hadoop的一个子项目,它提供了简单而强大的功能集,帮助分布式应用实现诸如同步服务、配置维护、命名服务以及分布式组服务等高级特性。...
同步功能主要指通过ZooKeeper实现节点之间的状态同步,确保所有节点能够保持一致的状态。这对于构建分布式锁、选主服务等高级应用至关重要。 **1.4 组服务(Group Services)** 组服务是指ZooKeeper支持的服务发现...
本项目基于Zookeeper实现了一个配置中心系统,充分体现了Zookeeper在分布式协调中的强大能力。 Zookeeper是一个开源的分布式协调服务,由Apache Hadoop项目开发,它提供了一种可靠的分布式数据一致性解决方案。...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中...如果你需要搭建更复杂的多节点集群,还需要配置`server.`项,指定其他节点的IP和端口,实现节点间的选举和数据同步。
理解并掌握这一过程,有助于在实际的分布式系统中更好地利用ZooKeeper实现服务的高效协调和管理。通过反复实践和深入理解配置选项,可以提升对ZooKeeper的运用能力,从而优化分布式系统的性能和稳定性。
所有节点应使用相同的操作系统版本(如CentOS 6.3),并配置相同的用户名、用户密码以及Hadoop、Hbase、Zookeeper的目录结构。 2. **主机名(Hostname)配置**:每个节点的hostname应分别设置为Master、node1和node...