ETCD集羣安裝實驗


目錄


【1、下載二進制程序】
【2、安裝etcd集羣】
【3、查詢集羣狀態】
【4、存入讀取數據】
【5、注意事項】
【6、參考鏈接】


簡介:
     Etcd的官網文檔及其在GitHub上的文檔,已經非常全了,而且簡潔明瞭,無論是二進制安裝、還是Docker下運行、命令操作,都有詳細的說明。但直接複製安裝還是會出錯的,只有親手做一遍,才能發現有哪些問題。


【1、下載二進制程序】

#分別在三臺主機上下載並安裝etcd和etcdctl程序
#設定ETCD的版本

ETCD_VER=v3.3.8

# 設置下載地址URL
GITHUB_URL=
https://github.com/coreos/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}

#清除之前的臨時文件和目錄,創建新的目錄
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

#使用curl下載etcd二進制文件
#地址爲
https://github.com/coreos/etcd/releases/download/v3.3.8/etcd-v3.3.8-linux-amd64.tar.gz
#解包後刪除壓縮包
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

#將etcd 和 etcdctl可執行程序移動到系統路徑中,方便直接運行程序
sudo mv /tmp/etcd-download-test/etcd* /usr/local/bin

#查詢etcd和etcdctl版本,
#檢查是否能正常運行程序。

etcd --version
ETCDCTL_API=3 etcdctl version


【2、安裝etcd集羣】

#在節點node1上執行

TOKEN=token-01
CLUSTER_STATE=new
NAME_1=node1
NAME_2=node2
NAME_3=node3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
CLUSTER=${NAME_1}=
http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls
http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls
http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

#此處注意,直接複製github網站上的代碼,執行時會報錯
#2018-06-29 16:57:54.048863 E | etcdmain: error verifying flags, '.--initial-advertise-peer-urls' is not a valid flag. See 'etcd --help'.
#
https://github.com/coreos/etcd/blob/master/Documentation/demo.md
#需要清除掉--短橫線之前的空格字符


#在節點node2上執行

TOKEN=token-01
CLUSTER_STATE=new
NAME_1=node1
NAME_2=node2
NAME_3=node3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
CLUSTER=${NAME_1}=
http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls
http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls
http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}


#在節點node3上執行

TOKEN=token-01
CLUSTER_STATE=new
NAME_1=node1
NAME_2=node2
NAME_3=node3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
CLUSTER=${NAME_1}=
http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls
http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls
http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}


【3、查詢集羣狀態】
export ETCDCTL_API=3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379

etcdctl --endpoints=$ENDPOINTS --write-out=table member list
etcdctl --endpoints=$ENDPOINTS --write-out=table endpoint status
etcdctl --endpoints=$ENDPOINTS --write-out=table endpoint health

圖1查詢集羣的狀態

圖1查詢集羣的狀態


【4、存入讀取數據】
#在同一網段的其他機器上,下載並解包etcdctl,
#使用etcdctl命令訪問etcd的集羣

export ETCDCTL_API=3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379

etcdctl --endpoints=$ENDPOINTS put myurl www.sina.com.cn
etcdctl --endpoints=$ENDPOINTS get myurl

圖2使用etcdctl 存入和讀取數據

圖2-使用etcdctl存入和讀取數據


#或者使用curl 訪問etcd集羣,
#通過集羣中的任何一個節點,都可以訪問到數據

HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
curl -X PUT
http://${HOST_1}:2379/v2/keys/myurl -d value=www.china.com
curl -X GET
http://${HOST_1}:2379/v2/keys/myurl
curl -X GET http://${HOST_2}:2379/v2/keys/myurl
curl -X GET http://${HOST_3}:2379/v2/keys/myurl
curl http://192.168.3.161:2379/v2/keys

圖3使用curl 存入和讀取數據

圖3-使用curl 存入和讀取數據


【5、注意事項】
1、直接複製粘貼github上的代碼會出錯,需要清除etcd命令中--短橫線之前的空格
2018-06-29 16:57:54.048863 E | etcdmain: error verifying flags, '.--initial-advertise-peer-urls' is not a valid flag. See 'etcd --help'.
2、主機的時間應該同步,可以安裝NTP服務,否則會告警:
2018-06-29 18:04:29.328082 W | rafthttp: the clock difference against peer 5d5a6e579c03726b is too high [3.777632896s > 1s]


【6、參考鏈接】
etcd官方網址
https://coreos.com/etcd/docs/latest/demo.html
https://github.com/coreos/etcd/releases/
https://github.com/coreos/etcd/blob/master/Documentation/demo.md

etcd rest API基本操作
https://segmentfault.com/a/1190000005649865

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章