学习计划 - zookeeper

学习目标

zk存在的意义是啥?

当前互联网等相关IT领域,单机性能不断提高,但是还是无法承载某些大型程序,所以这个时候就产生了分布式系统的概念(既然单机无法胜任,那么大家就合起来一起搞)。
与单机程序不同,分布式程序有许多新的问题需要克服,比如程序间如何调用,配置统一管理。前者可以通过对程序的前端部署Haproxy或者Nginx或者LVS进行负载均衡;后者配置管理中,我们可以把部署在每台服务器里面的配置内容拿出来,放到另外的一个系统里,比如redis、memcache、zk,但是redis和memcache总是键值对的形式出现,zk比他们就好多了,是个目录树的形式。

zk应该如何部署

zk可以单独使用,但是存在单点风险,所以有了一套自己的集群模式,一般部署的时候采用3台或者5台,zk服务器的数量必须是单数(为了防止脑裂,想象一个场景,一个zk一共6台服务器,3台在机房A,3台在机房B,如果A机房和B机房由于网络原因无法正常通信,那么who is the leader?)。

zk的程序部署不难,从官网下载相应的tar包,解压后,使用本地的java进程直接运行。配置方面,主要是在zoo.cfg中要指定当前集群中所有节点,以及data目录在哪里,而且要有一个myid的文件放在data目录中,用于结合zoo.cfg判断当前zk节点在集群中所处的位置。

zk的端口一共有3个。一个是面向普通客户的2181端口,一个是2888端口用于zk集群之间进行通信(Leader会打开,Follower会进行连接),一个是3888端口用于Leader选举,

问题集锦

zk由几个主要角色组成

clientserver、 observer

client > 客户连接zk服务
server > 提供zk服务
observer > server的一种,功能与follower类似,只是不参与竞选leader

zk的部署硬件要求如何

java环境, jdk7以上最好

yahoo会部署在真实硬件服务器里面,2GB内存,80GB硬盘

既然是个java进程,如何避免内存问题

设置一个靠谱的heap size, 保守估计,3GB - 4GB即可。也可以根据测试进行调整。

调整后, 会避免swapniess几率, 提高zk服务性能

简单配置文件解释

tickTime=2000 /
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888 // server.1的1是配置该zk在zk集群中的位置,本机会配置 myid文件用于找到我是属于哪个机器, 该值在1~255之间,
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

你可能感兴趣的:(zookeeper)