Etcd叢集搭建
環境資訊
主機1 | 主機2 | 主機3 |
---|---|---|
10.25.72.164 | 10.25.72.233 | 10.25.73.196 |
安裝etcd
yum install -y etcd
配置第一台
編輯etcd配置檔案
vim /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #etcd資料儲存目錄
ETCD_LISTEN_CLIENT_URLS="http://10.25.72.164:2379,http://localhost:2379" #供外部用戶端使用的url
ETCD_ADVERTISE_CLIENT_URLS="http://10.25.72.164:2379,http://localhost:2379" #廣播給外部用戶端使用的url
ETCD_NAME="etcd1" #etcd執行個體名稱
ETCD_LISTEN_PEER_URLS="http://10.25.72.164:2380" #叢集内部通信使用的URL
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.25.72.164:2380" #廣播給叢集内其他成員通路的URL
ETCD_INITIAL_CLUSTER="etcd1=http://10.25.72.164:2380,etcd2=http://10.25.72.233:2380,etcd3=http://10.25.73.196:2380" #初始叢集成員清單
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #叢集的名稱
ETCD_INITIAL_CLUSTER_STATE="new" #初始叢集狀态,new為建立叢集
然後執行
systemctl start etcd
啟動etcd程序
其他兩台
etcd2和etcd3為加入etcd-cluster叢集的執行個體,需要将其ETCD_INITIAL_CLUSTER_STATE設定為"exist"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://10.25.72.233:2379,http://localhost:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.25.72.233:2379,http://localhost:2379"
ETCD_NAME="etcd2"
ETCD_LISTEN_PEER_URLS="http://10.25.72.233:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.25.72.233:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://10.25.72.164:2380,etcd2=http://10.25.72.233:2380,etcd3=http://10.25.73.196:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="exist"
搭建完畢,可以檢視叢集節點來确定有沒有搭建成功
[root@SZD-L0110301 default.etcd]# etcdctl member list
4536e7d0bdb3b43c: name=etcd3 peerURLs=http://10.25.73.196:2380 clientURLs=http://10.25.73.196:2379,http://localhost:2379 isLeader=false
c441e6c11a47ff3d: name=etcd1 peerURLs=http://10.25.72.164:2380 clientURLs=http://10.25.72.164:2379,http://localhost:2379 isLeader=true
ddc007546c89f163: name=etcd2 peerURLs=http://10.25.72.223:2380 clientURLs=http://10.25.72.223:2379,http://localhost:2379 isLeader=false
Etcd使用
叢集資料操作指令
設鍵值
[root@SZD-L0110301 default.etcd]# etcdctl set /testdir/testkey "hello world"
hello world
- key存在的方式和zookeeper類似,為
/路徑/key
- 設定完之後,其他叢集也可以查詢到該值
- 如果
和dir
不存在,該指令會建立對應的項key
檢視鍵值
切換到另外一個節點
[root@SZD-L0110303 etcd]# etcdctl get /testdir/testkey
hello world
不存在的時候會報錯
更新
當鍵不存在時,會報錯
[root@SZD-L0110303 etcd]# etcdctl update /testdir/testkey "hello bruce"
hello bruce
删除
[root@SZD-L0110303 etcd]# etcdctl rm /testdir/testkey
PrevNode.Value: hello bruce
更多的操作指令省略,可以見
help
檢視API的版本
[root@SZD-L0072834 ~]# etcdctl -version
etcdctl version: 3.1.10
API version: 2
切換API版本
export ETCDCTL_API=3
叢集管理指令
[root@SZD-L0072834 ~]# etcdctl -version
etcdctl version: 3.1.10
API version: 2
export ETCDCTL_API=3
檢視叢集健康狀态
[root@SZD-L0110301 default.etcd]# etcdctl cluster-health
member 4536e7d0bdb3b43c is healthy: got healthy result from http://10.25.73.196:2379
member c441e6c11a47ff3d is healthy: got healthy result from http://10.25.72.164:2379
member ddc007546c89f163 is healthy: got healthy result from http://10.25.72.223:2379
cluster is healthy
backup
備份 etcd 的資料,參數有:
--data-dir etcd 的資料目錄
--backup-dir 備份到指定路徑
watch
監測一個鍵值的變化,一旦鍵值發生更新,就會輸出最新的值并退出。
[root@SZD-L0110301 default.etcd]# etcdctl watch /testdir/testkey
hello bruce
[root@SZD-L0110303 etcd]# etcdctl update /testdir/testkey "hello bruce"
- 在第二個節點update之後,第一個watch的才有結果輸出
- watch會直接退出,如果不想退出可以設定
參數, 這樣就會一直監測,直到使用者按--forever
退出CTRL+C
exec-watch
監測一個鍵值的變化,一旦鍵值發生更新,就執行給定指令。
[root@SZD-L0110301 default.etcd]# etcdctl exec-watch /testdir/testkey -- sh -c 'ls'
member