zoukankan      html  css  js  c++  java
  • K8s之Etcd

    Etcd是一个开源的、高可用的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现。etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeeper的paxos简单。Etcd基于Go语言实现。

    • 简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。
    • 安全:可选SSL客户认证机制。
    • 快速:每个实例每秒支持一千次写操作。
    • 可信:使用Raft算法充分实现了分布式系统数据的可用性和一致性。

    Etcd架构图如下: 

     从etcd的架构图中我们可以看到,etcd主要分为四个部分。

    • HTTP Server: 用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。
    • Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
    • Raft:Raft强一致性算法的具体实现,是etcd的核心。
    • WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容。

    通常,一个用户的请求发送过来,会经由HTTP Server转发给Store进行具体的事务处理

    如果涉及到节点的修改,则交给Raft模块进行状态的变更、日志的记录,然后再同步给别的etcd节点以确认数据提交

    最后进行数据的提交,再次同步。

    ETCD参数说明:

    2379端口用于外部通信,2380用于内部通信

    --name
    etcd集群中的节点名,这里可以随意,可区分且不重复就行  
    --listen-peer-urls
    监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等)
    --initial-advertise-peer-urls 
    建议用于节点之间通信的url,节点间将以该值进行通信。
    --listen-client-urls
    监听的用于客户端通信的url,同样可以监听多个。
    --advertise-client-urls
    建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信。
    --initial-cluster-token etcd-cluster-1
    节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响。
    --initial-cluster
    也就是集群中所有的initial-advertise-peer-urls 的合集
    --initial-cluster-state new
    新建集群的标志
    --data-dir
    指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件

    集群模式配置示例:

    vim /etc/systemd/system/etcd.service
    
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    WorkingDirectory=/opt/etcd/
    User=etcd
    # set GOMAXPROCS to number of processors
    ExecStart=/usr/bin/etcd 
      --name=etcd1 
      --cert-file=/etc/kubernetes/ssl/etcd.pem 
      --key-file=/etc/kubernetes/ssl/etcd-key.pem 
      --peer-cert-file=/etc/kubernetes/ssl/etcd.pem 
      --peer-key-file=/etc/kubernetes/ssl/etcd-key.pem 
      --trusted-ca-file=/etc/kubernetes/ssl/ca.pem 
      --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem 
      --initial-advertise-peer-urls=https://172.16.1.64:2380 
      --listen-peer-urls=https://172.16.1.64:2380 
      --listen-client-urls=https://172.16.1.64:2379,http://127.0.0.1:2379 
      --advertise-client-urls=https://172.16.1.64:2379 
      --initial-cluster-token=k8s-etcd-cluster 
      --initial-cluster=etcd1=https://172.16.1.64:2380,etcd2=https://172.16.1.65:2380,etcd3=https://172.16.1.66:2380 
      --initial-cluster-state=new 
      --data-dir=/opt/etcd/
    Restart=on-failure
    RestartSec=5
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target

    分别启动所有etcd集群节点的服务
    systemctl daemon-reload
    systemctl enable etcd
    systemctl start etcd
    systemctl status etcd

    # 如果报错 请使用
    journalctl -f -t etcd 和 journalctl -u etcd 来定位问题

    验证etcd集群

    查看集群状态:

    etcdctl --endpoints=https://172.16.1.64:2379,https://172.16.1.65:2379,https://172.16.1.66:2379 
            --cert-file=/etc/kubernetes/ssl/etcd.pem 
            --ca-file=/etc/kubernetes/ssl/ca.pem 
            --key-file=/etc/kubernetes/ssl/etcd-key.pem 
            cluster-health
    member 35eefb8e7cc93b53 is healthy: got healthy result from https://172.16.1.66:2379
    member 4576ff5ed626a66b is healthy: got healthy result from https://172.16.1.64:2379
    member bf3bd651ec832339 is healthy: got healthy result from https://172.16.1.65:2379
    cluster is healthy

    查看集群成员:

    etcdctl --endpoints=https://172.16.1.64:2379,https://172.16.1.65:2379,https://172.16.1.66:2379
            --cert-file=/etc/kubernetes/ssl/etcd.pem 
            --ca-file=/etc/kubernetes/ssl/ca.pem 
            --key-file=/etc/kubernetes/ssl/etcd-key.pem 
            member list
    
    35eefb8e7cc93b53: name=etcd3 peerURLs=https://172.16.1.66:2380 clientURLs=https://172.16.1.66:2379 isLeader=false
    4576ff5ed626a66b: name=etcd1 peerURLs=https://172.16.1.64:2380 clientURLs=https://172.16.1.64:2379 isLeader=true
    bf3bd651ec832339: name=etcd2 peerURLs=https://172.16.1.65:2380 clientURLs=https://172.16.1.65:2379 isLeader=false
  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/9951523.html
Copyright © 2011-2022 走看看