7

zookeeper集群应对万级并发的调优

 2 years ago
source link: https://blog.csdn.net/lifetragedy/article/details/116641678
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

核心参数解说

  • tickTime,这个参数叫各节点前心跳保持的频率,你即不能太高也不能太低,太高了各zk节点间万一有一个挂了那么整个zk的master群来不及选举出来了就会影响到整人本业务。如果太低了,那么zk群间因为频繁心跳而导致网络开销过大;
  • initLimit,这个值是这样的,要看真实的并发连接的。类似这种initXXX值有一个通则,那就是理论上要把它设成和maxXXX一样,大家设想一下,一开始你设成1,然后整个connection pool发觉不够了开始+1,+1操作,这种“+1”操作是有系统开销的,它会影响整体系统的性能、吐吞、平均响应时间。但是这个通则也不是一成不变,如果你开了多会造成浪费,因此拿这边的案例来说,我们的pool有34个,每个启动都要去连zk,那么我们把这个最小值设成50是合理的,如果“弹性扩充了pool”后,那么再让它自增“1”;
  • syncLimit,该参数有默认值5,即表示是参数tickTime值的5倍,必须配置,且需要配置一个正整数,不支持系统属性方式配置。

    该参数用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间。在ZooKeeper集群运行过程中,Leader服务器会与所有的Follower进行心跳检测来确定该服务器是否存活。如果Leader服务器在syncLimit时间内无法获取到Follower的心跳检测响应,那么Leader就会认为该Follower已经脱离了和自己的同步。因此这边我们认为30秒没有反馈,那么我们认为Leader和Follower间已经“挂”了;

  • leaderServers=no,这个参数是相当有用的,在生产上是必开启的。它代表Leader的主机节点不接受连接,因为Leader是作为协调用的,而不是供对外服务它只是对内。它的设置会直接提升zk群的性能;
  • maxClientCnxns,在压测环境建议设为1000,生产上以压测实际结果为准再做调整或者也不调整;
  • forceSync=no,该参数有默认值:yes,可以不配置,可选配置项为“yes”和“no”,仅支持系统属性方式配置:zookeeper.forceSync。

    该参数用于配置ZooKeeper服务器是否在事务提交的时候,将日志写入操作强制刷入磁盘(即调用java.nio.channels.FileChannel.force接口),默认情况下是“yes”,即每次事务日志写入操作都会实时刷入磁盘。如果将其设置为“no”,则能一定程度的提高ZooKeeper的写性能,但同时也会存在类似于机器断电这样的安全风险。在此处我是建议设成no,它会直接带来zk群的性能提升。我们的zk目前看来暂无事无提交,有一些拿zk做“tcc或者是2pC提交”的global transaction一类的是会用到zk事务的,我们的环境暂无因此此值设成no,增加其读写速度;

附录:如果要在单机启动3个zk节点做在集群的解决方案

输入如下命令

这样在每个/data/zk1这样的目录下会有一个空的文件叫myid

接下来再输入以下命令

启动zk群

查看zk群

关闭zk群

zk群“四字”真言(linux命令非zk client端命令哦)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK