使用discovery的方式來搭建etcd集群方式有兩種:etcd discovery
和DNS discovery
。在 「基於已有集群動態發現方式部署etcd集群」一文中講解了etcd discovery
這種方式,今天我們就來講講DNS discovery
這種方式的實現。
etcd在基於DNS做服務發現時,實際上是利用DNS的SRV記錄不斷輪訓查詢實現的。DNS SRV
是DNS數據庫中支持的一種資源記錄的類型,它記錄了哪台計算機提供了哪個服務這么一個簡單信息。
本文采用dnsmasq
作為dns
服務器,關於dnsmasq
搭建可參考 「利用Dnsmasq部署DNS服務」。
創建DNS記錄
- 增加DNS SRV記錄
$ vim /etc/dnsmasq.conf
#增加內容如下
srv-host=_etcd-server._tcp.hi-linux.com,etcd1.hi-linux.com,2380,0,100
srv-host=_etcd-server._tcp.hi-linux.com,etcd2.hi-linux.com,2380,0,100
srv-host=_etcd-server._tcp.hi-linux.com,etcd3.hi-linux.com,2380,0,100
- 增加對應的域名解析
$ vim /etc/dnsmasq.hosts
#增加內容如下
192.168.2.210 etcd1.hi-linux.com
192.168.2.211 etcd2.hi-linux.com
192.168.2.212 etcd3.hi-linux.comxxxxxxxxxx7 1$ vim /etc/dnsmasq.hosts23#增加內容如下45192.168.2.210 etcd1.hi-linux.com6192.168.2.211 etcd2.hi-linux.com7192.168.2.212 etcd3.hi-linux.com$ vim /etc/dnsmasq.hosts#增加內容如下192.168.2.210 etcd1.hi-linux.com192.168.2.211 etcd2.hi-linux.com192.168.2.212 etcd3.hi-linux.com
- 重啟dnsmasq
$ systemctl restart dnsmasq
- 測試是否成功
# 查詢SRV記錄
$ dig @192.168.2.210 +noall +answer SRV _etcd-server._tcp.hi-linux.com
_etcd-server._tcp.hi-linux.com. 0 IN SRV 0 100 2380 etcd2.hi-linux.com.
_etcd-server._tcp.hi-linux.com. 0 IN SRV 0 100 2380 etcd1.hi-linux.com.
_etcd-server._tcp.hi-linux.com. 0 IN SRV 0 100 2380 etcd3.hi-linux.com.
# 查詢域名解析結果
$ dig @192.168.2.210 +noall +answer etcd1.hi-linux.com etcd2.hi-linux.com etcd3.hi-linux.com
etcd1.hi-linux.com. 0 IN A 192.168.2.210
etcd2.hi-linux.com. 0 IN A 192.168.2.211
etcd3.hi-linux.com. 0 IN A 192.168.2.212
- 修改DNS服務器
Linux系統默認從/etc/resolv.conf
配置文件讀取DNS服務器,為了讓etcd能夠從dnsmasq
服務器獲取自定義域名解析,要修改三台etcd服務器的/etc/resolv.conf
文件。
# 編輯resolv.conf文件
# 文件內容如下,保證我們自定義的dnsmasq服務器在第一位
$ vim /etc/resolv.conf
nameserver 192.168.2.210
配置etcd
- 修改etcd配置文件
開啟DNS服務發現,主要是刪除掉ETCD_INITIAL_CLUSTER
字段(用於靜態服務發現),並指定DNS SRV
域名(ETCD_DISCOVERY_SRV)
這里以etcd1節點為例(etcd2、etcd3同理):
$ vim /opt/etcd/config/etcd.conf
ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd/etcd1"
ETCD_LISTEN_PEER_URLS="http://etcd1.hi-linux.com:2380"
ETCD_LISTEN_CLIENT_URLS="http://etcd1.hi-linux.com:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd1.hi-linux.com:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="hilinux-etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd1.hi-linux.com:2379,http://etcd1.hi-linux.com:4001"
ETCD_DISCOVERY_SRV="hi-linux.com"
- 測試etcd集群
按上面配置好各集群節點后,分別在各節點啟動etcd。
$ systemctl start etcd
啟動完成后,執行以下命令查看集群成員:
$ etcdctl --endpoints "http://etcd1.hi-linux.com:2379" member list
1da4b0d74a9ecfff: name=etcd2 peerURLs=http://etcd2.hi-linux.com:2380 clientURLs=http://etcd2.hi-linux.com:2379,http://etcd2.hi-linux.com:4001 isLeader=false
7dd139e539054326: name=etcd1 peerURLs=http://etcd1.hi-linux.com:2380 clientURLs=http://etcd1.hi-linux.com:2379,http://etcd1.hi-linux.com:4001 isLeader=true
a12d567c7c7f2e2b: name=etcd3 peerURLs=http://etcd3.hi-linux.com:2380 clientURLs=http://etcd3.hi-linux.com:2379,http://etcd3.hi-linux.com:4001 isLeader=false
更多集群使用方法可參考「通過靜態發現方式部署etcd集群」一文。
參考文檔
http://www.google.com
http://t.cn/RXUCXYD
http://t.cn/RXUCoVR