zoukankan      html  css  js  c++  java
  • 【Linux】【Services】【SaaS】Docker+kubernetes(5. 安装和配置ETCD集群)

    1. 简介:

    1.1. ETCD是kubernetes和openstack都用到的组件,需要首先装好

    1.2. 官方网站:https://coreos.com/etcd/

    1.3. ETCD的作用:

    Etcd是Kubernetes的存储状态的数据库。虽然Kubernetes系统中有重要的内存缓存,但Etcd被认为是记录系统状态。

    Etcd的快速总结:它是一个集群分布式数据库,它可以提供分布式数据的一致性。这类的系统(如Zookeeper, Consul)是在    Google开发的chubby系统之后形成的,这些系统也称为"锁服务器",因为他们可以实现分布式锁。Etcd和chubby的数据模型是一个简单的层次化的Key,并存储了简单的非结构化value,这看起来像是一个文件系统。有意思的是,在Google, chubby 被频繁用于为实现访问本地文件和对象存储的功能的抽象文件接口。然而,分布式数据库的高度一致性,提供了数据的严格写入顺序并允许client原子性的对数据做更新操作。

    可靠的系统的状态管理是任何系统中非常困难的一件事情。在分布式系统中,它是更加困难的,因为它引入了一致性算法,如raft或paxos。通过使用etcd,Kubernetes可以专注系统的其他部分。

    Etcd的watch机制是Kubernetes工作的关键。系统允许client去执行轻量级的对于Key值变化事件的订阅。当要watch的数据发生变化时, client会立即得到通知。这可以用作分布式系统组件之间的协调机制。 一个组件一旦写入etcd,其他组件可以立即对该变化作出反应。
    Etcd的消息机制正好和PubSub消息队列机制相反。在许多消息队列系统系统中,topic不存储真正的用户数据,但发布到这些topic的消息含有丰富的数据。对于像Etcd这样的系统,Key(类似于主题)存储了真实的数据而消息(数据变化通知)不含独特的丰富消息。换句话说,对于消息队列来说,topic很简单,而像Etcd则正好相反。

    2. 环境:

    2.1. etcd: 3.2.9-3.el7

    2.2. 机器列表

    功能与组件 机器名 服务IP 管理IP Processor Cores RAM Storage 备注
    Mongo/Redis/RabbitMQ/Memorycached/Etcd HCTJOSCACHE01 10.30.2.45 172.16.0.45        
    Mongo/Redis/RabbitMQ/Memorycached/Etcd HCTJOSCACHE02 10.30.2.46 172.16.0.46        
    Mongo/Redis/RabbitMQ/Memorycached/Etcd HCTJOSCACHE03 10.30.2.47 172.16.0.47        

    3. 安装:

    3.1. 直接使用yum安装

    yum install etcd

    3.2. 再给ETCD创建一个独立的文件系统

    # lvcreate -n lv_etcd -L 10G vg_system
    # mkfs.xfs /dev/mapper/vg_system-lv_etcd
    # mkdir -p /data/etcd

    修改/etc/fstab

    #etcd
    /dev/mapper/vg_system-lv_etcd /data/etcd        xfs     defaults        0 0
    mount -a
    chown etcd:etcd /data/etcd

    4. 配置:

    4.1. 配置文件:/etc/etcd/etcd.conf

    hctjoscache01

    [root@hctjoscache01 ~]# grep -v "^#" /etc/etcd/etcd.conf
    [Member]
    ETCD_DATA_DIR="/data/etcd"
    ETCD_LISTEN_PEER_URLS="http://172.16.0.45:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.16.0.45:2379"
    ETCD_NAME="hctjoscache01"
    [Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.0.45:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.16.0.45:2379"
    ETCD_INITIAL_CLUSTER_TOKEN="k8s-cluster"
    ETCD_INITIAL_CLUSTER="hctjoscache01=http://172.16.0.45:2380,hctjoscache02=http://172.16.0.46:2380,hctjoscache03=http://172.16.0.47:2380"

    hctjoscache02

    [root@hctjoscache02 ~]# grep -v "^#" /etc/etcd/etcd.conf
    [Member]
    ETCD_DATA_DIR="/data/etcd"
    ETCD_LISTEN_PEER_URLS="http://172.16.0.46:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.16.0.46:2379"
    ETCD_NAME="hctjoscache02"
    [Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.0.46:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.16.0.46:2379"
    ETCD_INITIAL_CLUSTER_TOKEN="k8s-cluster"
    ETCD_INITIAL_CLUSTER="hctjoscache01=http://172.16.0.45:2380,hctjoscache02=http://172.16.0.46:2380,hctjoscache03=http://172.16.0.47:2380"

    hctjoscache03

    [root@hctjoscache03 ~]# grep -v "^#" /etc/etcd/etcd.conf
    [Member]
    ETCD_DATA_DIR="/data/etcd"
    ETCD_LISTEN_PEER_URLS="http://172.16.0.47:2380"
    ETCD_LISTEN_CLIENT_URLS="http://172.16.0.47:2379"
    ETCD_NAME="hctjoscache03"
    [Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.0.47:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.16.0.47:2379"
    ETCD_INITIAL_CLUSTER_TOKEN="k8s-cluster"
    ETCD_INITIAL_CLUSTER="hctjoscache01=http://172.16.0.45:2380,hctjoscache02=http://172.16.0.46:2380,hctjoscache03=http://172.16.0.47:2380"

    4.2. 编辑服务文件 /usr/lib/systemd/system/etcd.service

    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    WorkingDirectory=/data/etcd
    EnvironmentFile=-/etc/etcd/etcd.conf
    User=etcd
    # set GOMAXPROCS to number of processors
    ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd 
      --name="${ETCD_NAME}" 
      --data-dir="${ETCD_DATA_DIR}" 
      --listen-client-urls="${ETCD_LISTEN_CLIENT_URLS}, http://127.0.0.1:2379" 
      --initial-advertise-peer-urls ${ETCD_INITIAL_ADVERTISE_PEER_URLS} 
      --listen-peer-urls ${ETCD_LISTEN_PEER_URLS} 
      --advertise-client-urls ${ETCD_ADVERTISE_CLIENT_URLS} 
      --initial-cluster-token ${ETCD_INITIAL_CLUSTER_TOKEN} 
      --initial-cluster ${ETCD_INITIAL_CLUSTER} 
      --initial-cluster-state new"
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target

    4.3. 记得reload一下systemd

    systemctl daemon-reload

    4.4. 可以启动服务了

    systemctl start etcd

    注意:启动第一个节点时时间较长,因为etcd需要初始化集群,但是由于其他节点并没有启动,所以会超时,记得看一下日志

    4.5.查看集群状态,要看到is healthy才算是正常

    etcdctl cluster-health
  • 相关阅读:
    Django(60)Django内置User模型源码分析及自定义User
    Django(59)验证和授权
    Django(58)viewsets视图集详解
    Django(57)Generic类视图
    正则表达式
    JMeter之检查点(JSON断言)
    JMeter之检查点(响应断言)
    JMeter之参数化(一)
    JMeter之一个简单的性能测试
    JMeter基础
  • 原文地址:https://www.cnblogs.com/demonzk/p/8204292.html
Copyright © 2011-2022 走看看