6.7 ZooKeeper

优质
小牛编辑
137浏览
2023-12-01

稳定版本

当前稳定分支是3.4,最新版本是3.4.9。

Operationalizing ZooKeeper

在操作上,我们有一下符合规范的ZooKeeper安装方式:

  • 在物理/硬件/网络上的冗余:尽量不要把他们放在同一个机架上,合适的硬件配置(但不要过分),尽量保持电源,网络等。一个典型的ZooKeeper集群有5或7台服务器,分别允许宕机2台和3台服务器。如果你想部署一个小型集群,3台服务器也可以部署,但是要记住,在这种情况下你只能宕机1台服务器。
  • I/O隔离:如果你有大量的写入操作流入,你几乎肯定会把事务日志放在一组特定的磁盘上。写入事物日志是同步的(但为了性能会分批写入),因此并发写入会明显影响性能。数据快照是异步落盘,因此通常可以与操作系统和消息日志文件共享磁盘性能。你可以配置dataLogDir参数单独为服务器配置磁盘组。
  • 应用隔离:除非你真的了解其他应用的运行模式,否则不要和ZooKeeper安装在一起,最好是单独部署运行ZooKeeper(尽管ZooKeeper可以均衡的利用硬件资源)。
  • 谨慎使用虚拟化:他的运行状况取决于你的集群架构,读写模式和SLA,即便是由虚拟化层引入的微小开销也可能造成ZooKeeper的中断,毕竟ZooKeeper对此十分敏感。
  • ZooKeeper配置: 他是java运行的,首先确保你给他分配足够的堆空间(我们通常配置3-5G,但这是根据我们现有数据实际情况来定的)。不幸的是,我们没有一个好的固定公式来确定他的值,但是要记住分配个ZooKeeper的堆空间越大,快照也就越大,从而会影响快照的恢复时间。实际上,如果快照变得太大(几个G),那你能需要增加initlimit参数的值,以便为服务器提供足够的时间来恢复并加入集群。
  • 监控:JMX和4个字母的命令(ZooKeeper提供的一系列命令,如:conf,cons,dump等)非常有用,他们在某些功能上重复了(这种情况下我们更喜欢4lw命令,他们似乎更容易预测情况,至少,他们和基础设施监控兼容性更好)
  • 不要过度构建集群:大型集群,尤其是大量写入的情况下,意味着大量的集群内部通信(集群成员节点的写入和后续的仲裁更新),但是过小的将集群将承担不必要的风险。添加更多的服务器可以增加集群的读取能力。

总体来看,我们应尽量保持zookeeper尽可能小的处理负载(标准增长容量规划) 并尽可能的简单。与官方版本相比,我们尽量对配置和应用布局不做什么更改,尽可能保持官方原版。基于这些原因,我们倾向于跳过操作系统打包的版本。因为为了有更好的表现,它倾向于把关注点放在可能“混乱”的标准系统层上。