修改服务器session时间,zookeeper设置客户端连接超时时间minSessionTimeout

我们在使用zookeeper时,往往会遇到客户端提示连接从ZOO_CONNECTION_STATE变为ZOO_EXPIRED_SEESION_STATE,然后应用失去与zookeeper集群的连接。

在使用过程中,我们一般会加大客户端的rec_timeout值,例如设置为30s,但对是否发生expired没有太大影响,仔细查看文档发现要在服务器端设置minSessionTimeout。

下面我们来仔细看看:

1)一般我们会设置连接超时时间,在客户端设置,其API为:

ZOOAPI zhandle_t *zookeeper_init(const char *host,

watcher_fn fn,

int recv_timeout,

const clientid_t * clientid,

void *context, int flags);

功能: 创建一个句柄(handle)和一个响应(response)这个句柄的会话(session)。

参数:

host:zookeeper主机列表,用逗号间隔。

fn:用于监视的回调函数。

clientid:客户端尝试重连的先前会话的ID,如果不需要重连先前的会话,则设置为0。客户端可以通过调用zoo_client_id来访问一个已经连接上的并且有效的会话ID,如果clientid对应的会话超时,或者由于某种原因clientid变为无效了,那么zookeeper_init将返回一个非法的zhandle_t,通过zhandle_t的状态可以获知zookeeper_init调用失败的原因。(通常为ZOO_EXPIRED_SESSION_STATE).

context:暂时用不到,忽略。(TODO)

flags:设置为0,zookeeper开发团队保留以后使用。

大量,包括代码里面的注释上都没有说recv_timeout的意思,按字面意思,肯定不是session_timeout,而是多长时间zk创建连接不成功的时间?

2)在服务器端zoo.conf中有相关设置:minSessionTimeout,最小的客户端超时时间,默认值为2个ticktime,单位是毫秒:

minSessionTimeout

最小的客户端session超时时间,默认值为2个tickTime,单位是毫秒

maxSessionTimeout

最大的客户端session超时时间,默认值为20个tickTime,单位是毫秒

3)于是我们最终修改的zoo.conf文件为:

tickTime=1000

dataDir=/opt/zookeeper/zkdata

dataLogDir=/opt/zookeeper/zklogs

clientPort=2181

initLimit=5

syncLimit=2

minSessionTimeout=16000

maxSessionTimeout=30000

server.1=xxxx:2888:3888

server.2=xxxx:2888:3888

server.3=xxxx:2888:3888

注意,在仅配置了minSessionTimeout参数时,zk会启动失败,提示该参数超过了maxSessionTimeout值,这个时候需要在配置文件把最大值也配上。

4)服务端配置详解:

(1)dataDir

用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里。

(2)dataLogDir

用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争。

(3)tickTime

心跳时间,为了确保client-server连接存在的,以毫秒为单位,最小超时时间为两个心跳时间。

(4)clientPort

客户端监听端口。

(5)globalOutstandingLimit

client请求队列的最大长度,防止内存溢出,默认值为1000。

(6)preAllocSize

预分配的Transaction log空间block为proAllocSize KB,默认block为64M,一般不需要更改,除非snapshot过于频繁。

(7)snapCount

在snapCount个snapshot后写一次transaction log,默认值是100,000。

(8)traceFile

用于记录请求的log,打开会影响性能,用于debug,最好不要定义。

(9)maxClientCnxns

最大并发客户端数,用于防止DOS的,默认值是10,设置为0是不加限制。

(11)clientPortBindAddress

可以设置指定的client ip以及端口,不设置的话等于ANY:clientPort

(12)minSessionTimeout

最小的客户端session超时时间,默认值为2个tickTime,单位是毫秒

(13)maxSessionTimeout

最大的客户端session超时时间,默认值为20个tickTime,单位是毫秒

(14)electionAlg

用于选举的实现的参数:

①0:为以原始的基于UDP的方式协作

②1:为不进行用户验证的基于UDP的快速选举

③2:为进行用户验证的基于UDP的快速选举

④3:为基于TCP的快速选举,默认值为3

(15)initLimit

多少个tickTime内,允许其他server连接并初始化数据,如果zooKeeper管理的数据较大,则应相应增大这个值。

(16)syncLimit

多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。

(17)leaderServes

leader是否接受客户端连接。默认值为yes。leader负责协调更新。当更新吞吐量远高于读取吞吐量时,可以设置为不接受客户端连接,以便leader可以专注于同步协调工作。

(18)server.x=[hostname]:nnnnn[:nnnnn]

配置集群里面的主机信息,其中:
  ①server.x:server.x的x要写在myid文件中,决定当前机器的id,
  ②第一个port用于连接leader,
  ③第二个用于leader选举。
  ④如果electionAlg为0,则不需要第二个port。
  ⑤hostname也可以填ip。
(19)group.x=nnnnn[:nnnnn]
        分组信息,表明哪个组有哪些节点,例如group.1=1:2:3 group.2=4:5:6 group.3=7:8:9。
(20)weight.x=nnnnn
   权重信息,表明哪个结点的权重是多少,例如weight.1=1 weight.2=1 weight.3=1。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值