‘Installing and configuring etcd’¶
インストール¶
Debian/Ubuntuパッケージ¶
公式のDebian/Ubuntu aptリポジトリからetcdをインストールするには:
$ sudo apt-get -y install etcd
- インストールされているバージョンと利用可能な最新バージョンを確認できます。インストールされているバージョンが古く、最新のバージョンをインストールする場合は、
ビルド済みバイナリ メソッドを使用します。
RedHat互換パッケージ¶
PGDG yum extras リポジトリにはetcdパッケージが含まれています。
システムで yum.postgresql.org を設定して使用するには、 PostgreSQL Linux downloads website を参照してください。
システムに応じて、次のリポジトリを有効にします。
RHEL 9:pgdg-rhel9-extras
RHEL 8:pgdg-rhel8-extras
RHEL 7:pgdg-rhel7-extras
たとえば、次のコマンドはetcdをRHEL 8にインストールします。
$ sudo dnf --enablerepo=pgdg-rhel8-extras install -y etcd
- インストールされているバージョンと利用可能な最新バージョンを確認できます。インストールされているバージョンが古く、最新のバージョンをインストールする場合は、
ビルド済みバイナリ メソッドを使用します。
ビルド済みバイナリ¶
これらのコマンドは、インストールされたetcdバイナリのバージョンを出力し、etcd-io Webサイトから最新バージョンを取得します。
$ etcd --version |head -1
etcd Version: 3.5.7
$ ETCD_RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d " -f 4)
$ echo "Latest etcd version released: $ETCD_RELEASE"
Latest etcd version released: v3.5.7
etcdの最新リリースをインストールする最も簡単な方法は、ビルド済みバイナリからのものです。
amd64 ホストでは、次のコマンドを使用します。
$ ETCD_RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d " -f 4)
$ curl -sL https://github.com/etcd-io/etcd/releases/download/${ETCD_RELEASE}/etcd-${ETCD_RELEASE}-linux-amd64.tar.gz \
| sudo tar xz -C /usr/bin --strip=1 --wildcards --no-anchored etcdctl etcd
$ etcd --version |head -1
etcd Version: 3.5.7
次に、データディレクトリとシステムユーザーを作成します。
$ sudo mkdir -p /var/lib/etcd/
$ sudo mkdir /etc/etcd
$ sudo groupadd --system etcd
$ sudo useradd -s /sbin/nologin --system -g etcd etcd
$ sudo chown -R etcd:etcd /var/lib/etcd/
$ sudo chmod -R a+rw /var/lib/etcd
systemdユニットファイルを構成します。
$ cat <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network-online.target local-fs.target remote-fs.target time-sync.target
Wants=network-online.target local-fs.target remote-fs.target time-sync.target
[Service]
User=etcd
Type=notify
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%H
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
EOF
$ sudo systemctl daemon-reload
構成¶
必要に応じてファイアウォールを構成します。
$ sudo firewall-cmd --quiet --zone=public --add-port=2379/tcp --permanent
$ sudo firewall-cmd --quiet --zone=public --add-port=2380/tcp --permanent
$ sudo firewall-cmd --quiet --reload
新しいetcdクラスターを構成して作成するには、 ETCD_INITIAL_CLUSTER
変数を設定して初期クラスター構成を定義する必要があります。そのリストには、すべてのetcdホストとそのIPアドレスが含まれている必要があります。
この例では、3つのetcdホストを示しています。
$ ETCD_INITIAL_CLUSTER="etcd1=http://192.168.121.35:2380,etcd2=http://192.168.121.245:2380,etcd3=http://192.168.121.191:2380"
動的に取得するには、次の単純なシェルスクリプトを使用できます。
etcd1 etcd2 etcd3 は3つのetcdホストです。
# Fetch the IP addresses of all etcd hosts
etcd_nodes=( etcd1 etcd2 etcd3 )
i=0
for node in "${etcd_nodes[@]}"
do
i=$i+1
target_ip=$(dig +short $node)
target_array[$i]="$node=http://$target_ip:2380"
done
ETCD_CLUSTER_URL=$(printf ",%s" "${target_array[@]}")
export ETCD_CLUSTER_URL=${ETCD_CLUSTER_URL:1}
echo "ETCD_CLUSTER_URL=\"$ETCD_CLUSTER_URL\""
次に、ローカル etcd 構成を設定し、サービスを開始します。
$ MY_IP=$(hostname -I | awk {print $1})
$ MY_NAME=$(hostname --short)
$ cat <<EOF | sudo tee /etc/etcd/etcd.conf
# [Member]
ETCD_LISTEN_PEER_URLS="http://$MY_IP:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://$MY_IP:2379"
ETCD_NAME="$MY_NAME"
# [Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://$MY_IP:2380"
ETCD_INITIAL_CLUSTER="$ETCD_CLUSTER_URL"
ETCD_ADVERTISE_CLIENT_URLS="http://$MY_IP:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
$ sudo systemctl enable etcd.service
$ sudo systemctl start etcd.service
注釈
ビルド済みバイナリ方法またはRed Hat互換パッケージを使用する場合、構成ファイルは`/etc/etcd/etcd.conf` です。 Debian/Ubuntuパッケージを使用する場合、構成ファイルは`/etc/default/etcd` です。
サービスを開始し、ポート2379 および2380
でリッスンします。クラスターのステータスを確認します。
$ ss -tunelp | grep 2379
tcp LISTEN 0 4096 127.0.0.1:2379 0.0.0.0:* ...
tcp LISTEN 0 4096 192.168.121.7:2379 0.0.0.0:* ...
$ ss -tunelp | grep 2380
tcp LISTEN 0 4096 192.168.121.245:2380 0.0.0.0:* ...
$ etcdctl member list
3078f511def8f5a9, started, etcd1, http://192.168.121.7:2380, http://192.168.121.7:2379, false
493bb0ea8338d60a, started, etcd2, http://192.168.121.174:2380, http://192.168.121.174:2379, false
bfdda4bcab677625, started, etcd3, http://192.168.121.226:2380, http://192.168.121.226:2379, false
$ etcdctl endpoint health
127.0.0.1:2379 is healthy: successfully committed proposal: took = 2.103463ms
$ etcdctl endpoint status
127.0.0.1:2379, 3078f511def8f5a9, 3.5.4, 29 kB, true, false, 2, 12, 12,