etcd 2.3.7启动流程分析

本文档分析了etcd 2.3.7作为KV存储的启动流程,从startEtcd入口开始,涉及peer和客户端的net.Listener创建,etcdserver对象初始化,以及EtcdServer的启动。接着,详细阐述了客户端和peer请求处理的handler,包括etcdhttp/client.go中NewClientHandler和rafthttp/transport.go中的NewPeerHandler,最后重点解读了rafthttp/http.go中处理HTTP请求的streamHandler代码段。
摘要由CSDN通过智能技术生成

etcd总共有两种模式。一种是proxy,一种是作为kvstore,这里主要记录了etcd作为kvstore的启动流程,etcd的启动入口在etcd.go/startEtcd,本章先粗略的描述下启动流程的重要环节,后面在详细描述没有重要环节里面的键步骤。

  1. 首先为各个peer建立net.Listener,用于后续监听各个peer的连接。

    // 存储peers net.Listener的数组
    plns := make([]net.Listener, 0)
    for _, u := range cfg.lpurls {
        if u.Scheme == "http" && !cfg.peerTLSInfo.Empty() {
            plog.Warningf("The scheme of peer url %s is http while peer key/cert files are presented. Ignored peer key/cert files.", u.String())
        }
        var l net.Listener
        l, err = rafthttp.NewListener(u, cfg.peerTLSInfo)
        if err != nil {
            return nil, err 
        }
    
        urlStr := u.String()
        plog.Info("listening for peers on ", urlStr)
        defer func() {
            if err != nil {
                l.Close()
                plog.Info("stopping listening for peers on ", urlStr)
            }
        }()
        // 把建立好的net.Listener放到数组里面
        plns = append(plns, l)
    }
  2. 为客户端建立net.Listener,用于监听客户端的连接。

    clns := make([]net.Listener, 0)
    for _, u := range cfg.lcurls {
        if u.Scheme == "http" && !cfg.clientTLSInfo.Empty() {
            plog.Warningf("The scheme of client url %s is http while client key/cert files are presented. Ignored client key/cert files.", u.String())
        }
        var l net.Listener
        l, err = net.Listen("tcp", u.Host)
        if err != nil {
            return nil, err
        }
    
        if fdLimit, err := runtimeutil.FDLimit(); err == nil {
            if fdLimit <= reservedInternalFDNum {
                plog.Fatalf("file descriptor limit[%d] of etcd process is too low, and should be set higher than %d to ensure internal usage", fdLimit, reservedInte
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值