1. 简介:算法
1.1. ETCD是kubernetes和openstack都用到的组件,须要首先装好数据库
1.2. 官方网站:https://coreos.com/etcd/缓存
1.3. ETCD的做用:bash
Etcd是Kubernetes的存储状态的数据库。虽然Kubernetes系统中有重要的内存缓存,但Etcd被认为是记录系统状态。服务器
Etcd的快速总结:它是一个集群分布式数据库,它能够提供分布式数据的一致性。这类的系统(如Zookeeper, Consul)是在 Google开发的chubby系统以后造成的,这些系统也称为"锁服务器",由于他们能够实现分布式锁。Etcd和chubby的数据模型是一个简单的层次化的Key,并存储了简单的非结构化value,这看起来像是一个文件系统。有意思的是,在Google, chubby 被频繁用于为实现访问本地文件和对象存储的功能的抽象文件接口。然而,分布式数据库的高度一致性,提供了数据的严格写入顺序并容许client原子性的对数据作更新操做。app
可靠的系统的状态管理是任何系统中很是困难的一件事情。在分布式系统中,它是更加困难的,由于它引入了一致性算法,如raft或paxos。经过使用etcd,Kubernetes能够专一系统的其余部分。分布式
Etcd的watch机制是Kubernetes工做的关键。系统容许client去执行轻量级的对于Key值变化事件的订阅。当要watch的数据发生变化时, client会当即获得通知。这能够用做分布式系统组件之间的协调机制。 一个组件一旦写入etcd,其余组件能够当即对该变化做出反应。
Etcd的消息机制正好和PubSub消息队列机制相反。在许多消息队列系统系统中,topic不存储真正的用户数据,但发布到这些topic的消息含有丰富的数据。对于像Etcd这样的系统,Key(相似于主题)存储了真实的数据而消息(数据变化通知)不含独特的丰富消息。换句话说,对于消息队列来讲,topic很简单,而像Etcd则正好相反。网站
2. 环境:url
2.1. etcd: 3.2.9-3.el7spa
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