【Linux】【Services】【SaaS】Docker+kubernetes(5. 安裝和配置ETCD集羣)

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
相關文章
相關標籤/搜索