在Linux上部署etcd叢集
前言
1.1 etcd簡介
etcd是CoreOS團隊於2013年6月發起的開源專案,它的目標是構建一個高可用的分散式鍵值(key-value)資料庫。etcd內部採用raft協議作為一致性演算法,etcd基於Go語言實現。
etcd作為服務發現系統,有以下的特點:
- 簡單:安裝配置簡單,而且提供了HTTP API進行互動,使用也很簡單
- 安全:支援SSL證書驗證
- 快速:根據官方提供的benchmark資料,單例項支援每秒2k+讀操作
- 可靠:採用raft演算法,實現分散式系統資料的可用性和一致性
1.2 安裝環境
本實驗需要兩臺伺服器,如下表所示。
作業系統 |
記憶體 |
CPU |
IP地址 |
主機名 |
|
伺服器1 |
Centos 7.5 |
32G |
雙核四執行緒CPU * 2 |
10.40.239.234 |
node234 |
伺服器2 |
Centos 7.5 |
32G |
雙核四執行緒CPU * 2 |
10.40.239.235 |
node235 |
2 操作流程
2.1 對伺服器校時
這裡我們使用國家授時中心NTP(Network Time Protocol)服務對兩臺伺服器校時:
ntpdate ntp.ntsc.ac.cn
2.2 安裝etcd
在兩臺伺服器上執行下面的命令,安裝etcd:
yum -y installetcd
執行下面的命令,檢視etcd:
yum list installed |grep-i etcd
如果出現如下結果,表示安裝成功:
etcd.x86_64 3.3.11-2.el7.centos @extras
2.3 配置etcd
2.3.1 node234 上的配置
1. 備份原先的etcd配置檔案。
cp
/etc/etcd/etcd.conf/etc/etcd/etcd.conf.bak
2
.編輯配置檔案:
vi /etc/etcd/etcd.conf
配置如下內容:
ETCD_DATA_DIR="/var/lib/etcd/node234.etcd"
ETCD_LISTEN_PEER_URLS="http://10.40.239.234:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.40.239.234:2379,http://localhost:2379"
ETCD_NAME="node234"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.40.239.234:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.40.239.234:2379"
ETCD_INITIAL_CLUSTER="node234=http://10.40.239.234:2380, node235=http://10.40.239.235:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
這裡解釋一下這些引數的含義:
ETCD_DATA_DIR:資料儲存目錄。由etcd自動建立。
ETCD_LISTEN_PEER_URLS:監聽在對等節點流量上的URL列表,該引數告訴etcd在指定的 “協議://IP:埠”組合上接收來自其對等方的傳入請求。協議可以是http或者https。或者,使用unix://<file-path>或者unixs://<file-path>到unix sockets。如果將0.0.0.0作為IP,etcd將監聽在所有的介面上的給定埠。如果給定了IP和埠,etcd將監聽指定的介面和埠。可以使用多個URL指定要監聽的地址和埠的數量。 etcd將響應來自任何列出的地址和埠的請求。
ETCD_LISTEN_CLIENT_URLS:監聽在客戶端流量上的URL列表,該引數告訴etcd在指定的“協議://IP:埠”組合上接受來自客戶端的傳入請求。協議可以是http或者https。或者,使用unix://<file-path>或者unixs://<file-path>到unix sockets。如果將0.0.0.0作為IP,etcd將監聽在所有的介面上的給定埠。如果給定了Ip和埠,etcd將監聽指定的介面和埠。可以使用多個URL指定要監聽的地址和埠的數量。 etcd將響應來自任何列出的地址和埠的請求。
ETCD_NAME:此成員的名字。
ETCD_INITIAL_ADVERTISE_PEER_URLS:此成員對等URL的列表,用來通知到叢集的其餘部分。 這些地址用於在叢集周圍傳送etcd資料。 所有叢集成員必須至少有一個路由。 這些URL可以包含域名。
ETCD_ADVERTISE_CLIENT_URLS:此成員的客戶端URL的列表,這些URL廣播給叢集的其餘部分。 這些URL可以包含域名。
ETCD_INITIAL_CLUSTER:啟動叢集的初始化配置。配置叢集的成員。
ETCD_INITIAL_CLUSTER_TOKEN:引導期間etcd群集的初始叢集令牌。
ETCD_INITIAL_CLUSTER_STATE:初始群集狀態(“新”或“現有”)。 對於在初始靜態或DNS引導過程中存在的所有成員,將其設定為new。 如果此選項設定為existing,則etcd將嘗試加入現存叢集。 如果設定了錯誤的值,etcd將嘗試啟動,但會安全地失敗。
更多資訊,可以參照etcd官方文件。
2.3.1 node235 上的配置
1. 備份原先的etcd配置檔案。
cp
/etc/etcd/etcd.conf/etc/etcd/etcd.conf.bak
2
.編輯配置檔案:
ETCD_DATA_DIR="/var/lib/etcd/node235.etcd"
ETCD_LISTEN_PEER_URLS="http://10.40.239.235:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.40.239.235:2379,http://localhost:2379"
ETCD_NAME="node235"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.40.239.235:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.40.239.235:2379"
ETCD_INITIAL_CLUSTER="node234=http://10.40.239.234:2380,node235=http://10.40.239.235:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
2.4 修改etcd.service
在兩臺伺服器上,分別修改服務啟動檔案 /usr/lib/systemd/system/etcd.service,內容設定如下:
[Service]
Type=notify
WorkingDirectory=/var/lib/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-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" \
--listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" \
--initial-advertise-peer-urls=\"${ETCD_INITIAL_ADVERTISE_PEER_URLS}\" \
--advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" \
--initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" \
--initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" \
--initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\""
Restart=on-failure
LimitNOFILE=65536
2.5 啟動 etcd
依次啟動 node234和node235節點的 etcd
systemctl start etcd.service
設定允許開機啟動:
systemctlenableetcd.service
2.6
檢視etcd的狀態
執行下列命令,驗證etcd的狀態:
etcdctl cluster-health
結果:
member 5a4542289ef36c64 is healthy: got healthy result from http://10.40.239.234:2379
member f792ada069403352 is healthy: got healthy result from http://10.40.239.235:2379
檢視etfd 結點列表:
etcdctl member list
結果:
5a4542289ef36c64: name=node234 peerURLs=http://10.40.239.234:2380 clientURLs=http://10.40.239.234:2379 isLeader=true
f792ada069403352: name=node236 peerURLs=http://10.40.239.235:2380 clientURLs=http://10.40.239.236:2379 isLeader=false