在生产环境中以最小配置运行Zookeeper服务器集群

作者: admin 分类: Zookeeper 发布时间: 2018-03-08 13:58  阅读: 284 views

在生产环境中,应当以复制模式运行zooKeeper。在安放Zookeeper所用的机器时,应当考虑尽量减少机器和网络故障可能带来的影响。实践过程中,一般是跨机架、电源和交换机来安放服务器。这样的话,设备中的任何一个出现故障都不会使集合体损失半数以上的服务器

对于那些需要低延时服务的应用来说,最好将所有的服务器都放在同一个数据中心的同一个集合体中。也有一些应用不需要低延迟服务,他们可以通过跨数据中心安放服务器来获得更好的可恢复性,领导者选举和分布式粗粒度锁是这类应用的代表。这两个应用中的状态改变都相对较少,因此相当于整个服务来说,数据中心之间传递状态改变消息所需的几十毫秒开销是可以承受的。

ZooKeeper是具有高可用性的系统,对它来说,最关键的是能够及时的旅行其职能。因此,Zookeeper应当运行在专用的机器上。如果有其他应用竞争资源,会导致Zookeeper的性能明显下降。

通过对ZooKeeper进行配置,可以使他的事务日志和数据快照分别保存在不同的磁盘驱动器上。默认情况下,两者都保存在dataDir属性所制定的目录中,但是通过dataLogDir属性设置一个值,便可以将事务日志写在制定的位置。通过制定一个专用的设备,一个ZooKeeper服务器可以以最大速率将日志记录写到磁盘,因为写日志是顺序写,并且没有寻址操作。由于所有的写操作都是通过领导者来完成的,增加服务器并不能提高写操作的吞吐量,所以提高性能的关键是写操作的速度。

如果写操作的进程被交换到磁盘上,则性能会受到不利的影响。这是可以避免的,将JAVA堆的大小设置为小于机器上空闲的物理内存即可。ZooKeeper脚本可以从它的配置目录中获取一个名为java.env的文件,这个文件被用来设置JVMFLAGS环境变量,包括设置Java堆的带下。

ZooKeeper服务器的集合体中,每个服务器都有一个数值型的ID,服务器id在集合体中是唯一的,并且取值范围在1到255之间。可以通过一个名为myid的纯文本文件设定服务器的id,这个文件保存在dataDir参数所制定的目录中。(zookeeper可能版本不同,我本地使用的zookeeper服务,将zookeeper/conf/zoo_sample.cfg文件复制保存为zoo.cfg进行配置即可。具体可以查看最新的zookeeper配置方式,大体是差不多的。)

为每台服务器设置ID只完成了工作的一般。我们还需要将集合体中其他服务器的ID和网络位置告诉所有的服务器。在ZooKeeper的配置文件中必须为每台服务器添加下面的这行配置

server.n = hostname:port:port

N是服务器的ID。这里有两个端口设置,一个是跟随者用来连接领导者的端口;另一个端口被用于领导者选举。下面是一个包含三台机器的复制模式下的ZooKeeper集合体的配置例子

tickTime=2000

dataDir = /disk1/zookeeper

dataLogDir= /disk2/zookeeper

clientPort=2182

initLimit=5

syncLimit=2

server.1=zookeeper1:2888:3888

server.2=zookeeper2:2888:3888

server.3=zookeeper3:2888:3888

 

服务器在3个端口上进行监听:2181端口被用于客户端连接;对于领导者来说,2888端口被用于跟随者连接;3888端口被用于领导者选举节点的其他服务器连接。当一个Zookeeper服务器启动时,它读取myid文件用于确定自己的服务器ID,然后通过读取配置文件来确定应当在哪个接口进行鉴定,同时确定集合体中其他服务器的网络地址

连接这个ZooKeeper集合体的客户端在ZooKeeper对象的构造函数中应当使用ZooKeeper1:2181,ZooKeeper2:2181,ZooKeeper3:2181作为主机字符串

在复制模式下,有两个强制参数,都是以滴答参数的倍数进行度量

initLimit参数设定了所有跟随者与领导者进行连接并同步的时间范围

syncLimit参数设定了允许一个跟随者与领导者进行同步的时间。

以上是运行一个ZooKeeper服务器集群所需要的最少配置。


   原创文章,转载请标明本文链接: 在生产环境中以最小配置运行Zookeeper服务器集群

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读