debian9使用systemd部署etcd集群


在centos上,是可以直接使用yum安裝etcd的:

# yum list | grep etcd
etcd.x86_64                               3.2.9-3.el7                  @extras

但是,在debian上卻沒有安裝包,所以就只能手動安裝了,不過也很簡單。
可以找台centos的機器,安裝好之后把配置文件拿過來套用一下就好了。

etcd version: 3.2.9
OS version: debian stretch

三個etcd節點:

etcd0     192.168.5.42
etcd1     192.168.5.104
etcd2     192.168.5.105

1、下載軟件包並解壓

# wget https://github.com/coreos/etcd/releases/download/v3.2.9/etcd-v3.2.9-linux-arm64.tar.gz
# tar xvf etcd-v3.2.9-linux-arm64.tar.gz
# cd etcd-v3.2.9-linux-amd64/
# cp -a etcd etcdctl /usr/bin/

2、創建unit文件,該文件三個節點相同,復制到每個節點即可

# vim /lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos/etcd

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/10-etcd.conf
User=root
# 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}\" \
    --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=\"${ETCD_INITIAL_CLUSTER_STATE}\""
Restart=on-failure
LimitNOFILE=65536
RestartSec=5s

[Install]
WantedBy=multi-user.target

3、創建配置文件,這里每個節點有所不同(實例名稱和IP不一樣)

# vim /etc/etcd/10-etcd.conf
ETCD_NAME=etcd0
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.5.42:2380"
ETCD_LISTEN_PEER_URLS="http://192.168.5.42:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER_TOKEN="my-etcd-token"
ETCD_INITIAL_CLUSTER="etcd0=http://192.168.5.42:2380,etcd1=http://192.168.5.104:2380,etcd2=http://192.168.5.105:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
# vim /etc/etcd/10-etcd.conf
ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.5.104:2380"
ETCD_LISTEN_PEER_URLS="http://192.168.5.104:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER_TOKEN="my-etcd-token"
ETCD_INITIAL_CLUSTER="etcd0=http://192.168.5.42:2380,etcd1=http://192.168.5.104:2380,etcd2=http://192.168.5.105:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
# vim /etc/etcd/10-etcd.conf
ETCD_NAME=etcd2
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.5.105:2380"
ETCD_LISTEN_PEER_URLS="http://192.168.5.105:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER_TOKEN="my-etcd-token"
ETCD_INITIAL_CLUSTER="etcd0=http://192.168.5.42:2380,etcd1=http://192.168.5.104:2380,etcd2=http://192.168.5.105:2380"
ETCD_INITIAL_CLUSTER_STATE="new"

4、啟動服務。這里要說一下的是,集群模式下,單獨起一個節點的時候會掛起等待選舉,而且等待超時之后服務狀態是failed,不過其實服務已經正常啟動了。為了防止這種情況,在超時時間之內把三個節點都啟動就好了。這個超時時間也是可以設置的,以及如果超時服務狀態failed時,只需要在三個節點都啟動后再重啟一次服務狀態就正常了。

# systemctl daemon-reload
# systemctl start etcd && systemctl enable etcd

5、驗證集群狀態

# etcdctl member list
93ac7045b7c80fe2, started, etcd2, http://192.168.5.105:2380, http://0.0.0.0:2379
cceea3802386922f, started, etcd1, http://192.168.5.104:2380, http://0.0.0.0:2379
e1f394bfa58b2a7f, started, etcd0, http://192.168.5.42:2380, http://0.0.0.0:2379

也可以通過curl訪問:

# curl http://192.168.6.15:2379/v2/members
{"members":[{"id":"93ac7045b7c80fe2","name":"etcd2","peerURLs":["http://192.168.5.105:2380"],"clientURLs":["http://0.0.0.0:2379"]},{"id":"cceea3802386922f","name":"etcd1","peerURLs":["http://192.168.5.104:2380"],"clientURLs":["http://0.0.0.0:2379"]},{"id":"e1f394bfa58b2a7f","name":"etcd0","peerURLs":["http://192.168.5.42:2380"],"clientURLs":["http://0.0.0.0:2379"]}]}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM