This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第39章 etcd のクォーラム(定足数) の復元
etcd のクォーラム(定足数) を失う場合、etcd をバックアップし、etcd クラスターを停止してからこれを新たに作成する必要があります。1 つの正常な etcd ノードを使用して新規クラスターを作成することができますが、他のすべての正常なノードを削除する必要があります。
etcd のクォーラム(定足数) が失われる際に、OpenShift Container Platform で実行されるアプリケーションは影響を受けません。ただし、プラットフォームの機能は読み取り専用の操作に制限されます。アプリケーションの拡大または縮小、デプロイメントの変更、またはビルドの実行または変更などの操作を実行することはできません。
etcd のクォーラム(定足数) が失われていることを確認するには、以下のコマンドを実行し、クラスターが正常な状態にないことを確認します。
ホストのメンバー ID およびホスト名を書き留めます。到達できるノードのいずれかを使用して新規クラスターを作成します。
39.1. etcd のバックアップ リンクのコピーリンクがクリップボードにコピーされました!
etcd のバックアップ時に、etcd 設定ファイルと etcd データの両方をバックアップする必要があります。
39.1.1. etcd 設定ファイルのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
保持する etcd 設定ファイルはすべて etcd が実行されているインスタンスの /etc/etcd
ディレクトリーに保存されます。これには、etcd 設定ファイル (/etc/etcd/etcd.conf
) およびクラスターの通信の必要な証明書が含まれます。それらすべてのファイルは Ansible インストーラーによってインストール時に生成されます。
手順
クラスターの各 etcd メンバーについて etcd 設定をバックアップします。
ssh master-0 mkdir -p /backup/etcd-config-$(date +%Y%m%d)/ cp -R /etc/etcd/ /backup/etcd-config-$(date +%Y%m%d)/
$ ssh master-0
# mkdir -p /backup/etcd-config-$(date +%Y%m%d)/
# cp -R /etc/etcd/ /backup/etcd-config-$(date +%Y%m%d)/
各 etcd クラスターメンバーの証明書および設定ファルは一意です。
39.1.2. etcd データのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
OpenShift Container Platform インストーラーはエイリアスを作成するため、etcdctl2
(etcd v2 タスクの場合) と etcdctl3
(etcd v3 タスクの場合) という名前のすべてのフラグを入力しなくて済みます。
ただし、etcdctl3
エイリアスは etcdctl
コマンドに詳細なエンドポイント一覧を提供しないため、すべてのエンドポイントと共に --endpoints
オプションを指定する必要があります。
etcd をバックアップする前に、以下を確認してください。
-
etcdctl
バイナリーが利用可能であるか、またはコンテナー化インストールではrhel7/etcd
コンテナーが利用可能であること。 - etcd クラスターとの接続 (ポート 2379/tcp)。
- etcd クラスターに接続するための適切な証明書がある。
手順
etcdctl backup
コマンドはバックアップを実行するために使用されますが、etcd v3 には バックアップ の概念がありません。代わりに etcdctl snapshot save
コマンドを使用してライブメンバーの スナップショット を取るか、または etcd データディレクトリーの member/snap/db
ファイルをコピーすることができます。
etcdctl backup
コマンドは、ノード ID やクラスター ID などのバックアップに含まれるメタデータの一部を書き換えるので、バックアップでは、ノードの以前のアイデンティティーが失われます。バックアップからクラスターを再作成するには、新規の単一ノードクラスターを作成してから、残りのノードをクラスターに追加します。メタデータは新規ノードが既存クラスターに加わらないように書き換えられます。
etcd データをバックアップします。
v2 API を使用する場合には、以下のアクションを実行してください。
すべての etcd サービスを停止します。
systemctl stop etcd.service
# systemctl stop etcd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd データバックアップを作成し、etcd
db
ファイルをコピーします。mkdir -p /backup/etcd-$(date +%Y%m%d) etcdctl2 backup \ --data-dir /var/lib/etcd \ --backup-dir /backup/etcd-$(date +%Y%m%d) cp /var/lib/etcd/member/snap/db /backup/etcd-$(date +%Y%m%d)
# mkdir -p /backup/etcd-$(date +%Y%m%d) # etcdctl2 backup \ --data-dir /var/lib/etcd \ --backup-dir /backup/etcd-$(date +%Y%m%d) # cp /var/lib/etcd/member/snap/db /backup/etcd-$(date +%Y%m%d)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
v3 API を使用する場合、以下のコマンドを実行します。
重要OpenShift Container Platform の以前のバージョンからアップグレードしたクラスターには、v2 データストアが含まれる可能性があるので、v2 と v3 の両方のデータストアをバックアップしてください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記etcdctl snapshot save
コマンドでは etcd サービスが実行中である必要があります。これらのコマンドで、
/backup/etcd-<date>/
ディレクトリーが作成されます。ここで、<date>
は現在の日付を表します。このディレクトリーの場所は、外部 NFS 共有、S3 バケットやその他の外部ストレージのいずれかでなければなりません。オールインワンクラスターの場合、etcd データディレクトリーは
/var/lib/origin/openshift.local.etcd
ディレクトリーに置かれます。
39.2. etcd ホストの削除 リンクのコピーリンクがクリップボードにコピーされました!
etcd ホストが復元後も失敗する場合、これをクラスターから削除します。etcd のクォーラム(定足数) が失われた状態から回復するには、クラスターから 1 つの etcd ノード以外のすべての正常な etcd ノードを削除する必要もあります。
すべてのマスターホストで実行する手順
手順
各 etcd ホストを etcd クラスターから削除します。それぞれの etcd ノードについて以下のコマンドを実行します。
etcdctl -C https://<surviving host IP address>:2379 \ --ca-file=/etc/etcd/ca.crt \ --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key member remove <failed member ID>
# etcdctl -C https://<surviving host IP address>:2379 \ --ca-file=/etc/etcd/ca.crt \ --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key member remove <failed member ID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのマスターの
/etc/origin/master/master-config.yaml
+master 設定ファイルから他の etcd ホストを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのマスターでマスター API サービスを再起動します。
master-restart api restart-master controller
# master-restart api restart-master controller
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
現在の etcd クラスターで実行する手順
手順
失敗したホストをクラスターから削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
remove
コマンドにはホスト名ではなく、etcd ID が必要です。
etcd 設定で etcd サービスの再起動時に失敗したホストを使用しないようにするには、残りのすべての etcd ホストで
/etc/etcd/etcd.conf
ファイルを変更し、ETCD_INITIAL_CLUSTER
変数の値から失敗したホストを削除します。vi /etc/etcd/etcd.conf
# vi /etc/etcd/etcd.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
ETCD_INITIAL_CLUSTER=master-0.example.com=https://192.168.55.8:2380,master-1.example.com=https://192.168.55.12:2380,master-2.example.com=https://192.168.55.13:2380
ETCD_INITIAL_CLUSTER=master-0.example.com=https://192.168.55.8:2380,master-1.example.com=https://192.168.55.12:2380,master-2.example.com=https://192.168.55.13:2380
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のようになります。
ETCD_INITIAL_CLUSTER=master-0.example.com=https://192.168.55.8:2380,master-1.example.com=https://192.168.55.12:2380
ETCD_INITIAL_CLUSTER=master-0.example.com=https://192.168.55.8:2380,master-1.example.com=https://192.168.55.12:2380
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記失敗したホストは
etcdctl
を使用して削除されているので、etcd サービスの再起動は不要です。Ansible インベントリーファイルをクラスターの現在のステータスを反映し、Playbook の再実行時の問題を防げるように変更します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Flannel を使用している場合、すべてのホストの
/etc/sysconfig/flanneld
にあるflanneld
サービス設定を変更し、etcd ホストを削除します。FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379
FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379
Copy to Clipboard Copied! Toggle word wrap Toggle overflow flanneld
サービスを再起動します。systemctl restart flanneld.service
# systemctl restart flanneld.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
39.3. 単一ノード etcd クラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform インスタンスの完全な機能を復元するには、残りの etcd ノードをスタンドアロン etcd クラスターにします。
手順
クラスターから削除しなかった etcd ノードで、すべての etcd サービスを停止します。
systemctl stop etcd.service
# systemctl stop etcd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストで etcd サービスを実行し、新規クラスターを強制的に実行します。
これらのコマンドは、
--force-new-cluster
オプションを etcd 起動コマンドに追加する etcd サービスのカスタムファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd メンバーを一覧表示し、メンバー一覧に単一の etcd ホストのみが含まれることを確認します。
etcdctl member list
# etcdctl member list 165201190bf7f217: name=192.168.34.20 peerURLs=http://localhost:2380 clientURLs=https://master-0.example.com:2379 isLeader=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データの復元および新規クラスターの作成後に、
peerURLs
パラメーターを、etcd がピア通信をリッスンする IP アドレスを使用するように更新します。etcdctl member update 165201190bf7f217 https://192.168.34.20:2380
# etcdctl member update 165201190bf7f217 https://192.168.34.20:2380
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
165201190bf7f217
は直前のコマンドの出力に示されるメンバー ID であり、https://192.168.34.20:2380
はその IP アドレスです。
検証するには、IP がメンバーの一覧にあることを確認します。
etcdctl2 member list
$ etcdctl2 member list 5ee217d17301: name=master-0.example.com peerURLs=https://*192.168.55.8*:2380 clientURLs=https://192.168.55.8:2379 isLeader=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow