タスク
81 ページ-
PRの管理
目的 PRの管理を迅速にすること。 etcdのPRは https://github.com/etcd-io/etcd/pulls に一覧表示されています。 PRにはさまざまなラベル、マイルストーン、レビュアーなどを設定できます。ラベルの詳細な一覧は、次のページを参照してください。 https://github.com/kubernetes/kubernetes/labels 便利なPR検索の例を以下に示します。 etcd-v3.4マイルストーンのオープンPR 調査中のPR 対象範囲 このガイドラ …
目的 PRの管理を迅速にすること。 etcdのPRは https://github.com/etcd-io/etcd/pulls に一覧表示されています。 PRにはさまざまなラベル、マイルストーン、レビュアーなどを設定できます。ラベルの詳細な一覧は、次のページを参照してください。 https://github.com/kubernetes/kubernetes/labels 便利なPR検索の例を以下に示します。 etcd-v3.4マイルストーンのオープンPR 調査中のPR 対象範囲 このガイドラ …
-
Issueのトリアージガイドライン
目的 Issueの管理を迅速に行います。 etcdのIssueは https://github.com/etcd-io/etcd/issues に一覧があり、 ラベルで分類されています。たとえば、バグと判断されたIssueには、 最終的にarea/bug ラベルが付けられます。新しいIssueには当初ラベルがありませんが、 通常はetcdのメンテナーや活発に活動する貢献者が調査結果に基づいて追加します。 ラベルの詳細な一覧は …
目的 Issueの管理を迅速に行います。 etcdのIssueは https://github.com/etcd-io/etcd/issues に一覧があり、 ラベルで分類されています。たとえば、バグと判断されたIssueには、 最終的にarea/bug ラベルが付けられます。新しいIssueには当初ラベルがありませんが、 通常はetcdのメンテナーや活発に活動する貢献者が調査結果に基づいて追加します。 ラベルの詳細な一覧は …
-
etcdを2.3から3.0にアップグレード
通常、etcd 2.3から3.0へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v2.3のプロセスを1つずつ停止し、etcd v3.0のプロセスに置き換えます。 すべてのプロセスがv3.0で稼働すると、クラスターでv3.0の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
通常、etcd 2.3から3.0へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v2.3のプロセスを1つずつ停止し、etcd v3.0のプロセスに置き換えます。 すべてのプロセスがv3.0で稼働すると、クラスターでv3.0の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
-
etcdを3.0から3.1にアップグレード
通常、etcd 3.0から3.1へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.0のプロセスを1つずつ停止し、etcd v3.1のプロセスに置き換えます。 すべてのプロセスがv3.1で稼働すると、クラスターでv3.1の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
通常、etcd 3.0から3.1へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.0のプロセスを1つずつ停止し、etcd v3.1のプロセスに置き換えます。 すべてのプロセスがv3.1で稼働すると、クラスターでv3.1の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
-
etcdを3.1から3.2にアップグレード
通常、etcd 3.1から3.2へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.1のプロセスを1つずつ停止し、etcd v3.2のプロセスに置き換えます。 すべてのプロセスがv3.2で稼働すると、クラスターでv3.2の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
通常、etcd 3.1から3.2へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.1のプロセスを1つずつ停止し、etcd v3.2のプロセスに置き換えます。 すべてのプロセスがv3.2で稼働すると、クラスターでv3.2の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
-
etcdを3.2から3.3にアップグレード
通常、etcd 3.2から3.3へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.2のプロセスを1つずつ停止し、etcd v3.3のプロセスに置き換えます。 すべてのプロセスがv3.3で稼働すると、クラスターでv3.3の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
通常、etcd 3.2から3.3へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.2のプロセスを1つずつ停止し、etcd v3.3のプロセスに置き換えます。 すべてのプロセスがv3.3で稼働すると、クラスターでv3.3の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
-
etcdを3.5から3.4にダウングレード
通常、etcd 3.5から3.4へのダウングレードは、停止時間なしのローリングダウングレードで実行できます。 etcd 3.5のプロセスを1つずつ停止し、etcd 3.4のプロセスに置き換えます。 3.4のプロセスを1つでも起動すると、クラスターで3.5の新機能を利用できなくなります。 ダウングレードを開始する 前に、このガイドの残りを読んで準備してください。 ダウングレードのチェックリスト 警告 クラスターで認証を有効にしている場合、3.5では認証に関するWALエントリーの形式が変更される た …
通常、etcd 3.5から3.4へのダウングレードは、停止時間なしのローリングダウングレードで実行できます。 etcd 3.5のプロセスを1つずつ停止し、etcd 3.4のプロセスに置き換えます。 3.4のプロセスを1つでも起動すると、クラスターで3.5の新機能を利用できなくなります。 ダウングレードを開始する 前に、このガイドの残りを読んで準備してください。 ダウングレードのチェックリスト 警告 クラスターで認証を有効にしている場合、3.5では認証に関するWALエントリーの形式が変更される た …
-
etcdを3.3から3.4にアップグレード
通常、etcd 3.3から3.4へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.3のプロセスを1つずつ停止し、etcd v3.4のプロセスに置き換えます。 すべてのプロセスがv3.4で稼働すると、クラスターでv3.4の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
通常、etcd 3.3から3.4へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.3のプロセスを1つずつ停止し、etcd v3.4のプロセスに置き換えます。 すべてのプロセスがv3.4で稼働すると、クラスターでv3.4の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
-
etcdをv3.6からv3.5にダウングレード
通常、etcd v3.6からv3.5へのダウングレードは、停止時間なしのローリングダウングレードで実行できます。 etcd v3.6のプロセスを1つずつ停止し、etcd v3.5のプロセスに置き換えます。 ダウングレードを有効にすると、クラスターでv3.6の新機能を利用できなくなります。 ダウングレードを開始する 前に、このガイドの残りを読んで準備してください。 ダウングレードのチェックリスト v3.6からv3.5への移行に伴う主な互換性を損なう変更は次のとおりです。 フラグの違い v3.6の設 …
通常、etcd v3.6からv3.5へのダウングレードは、停止時間なしのローリングダウングレードで実行できます。 etcd v3.6のプロセスを1つずつ停止し、etcd v3.5のプロセスに置き換えます。 ダウングレードを有効にすると、クラスターでv3.6の新機能を利用できなくなります。 ダウングレードを開始する 前に、このガイドの残りを読んで準備してください。 ダウングレードのチェックリスト v3.6からv3.5への移行に伴う主な互換性を損なう変更は次のとおりです。 フラグの違い v3.6の設 …
-
etcdを3.4から3.5にアップグレード
通常、etcd 3.4から3.5へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.4のプロセスを1つずつ停止し、etcd v3.5のプロセスに置き換えます。 すべてのプロセスがv3.5で稼働すると、クラスターでv3.5の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
通常、etcd 3.4から3.5へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.4のプロセスを1つずつ停止し、etcd v3.5のプロセスに置き換えます。 すべてのプロセスがv3.5で稼働すると、クラスターでv3.5の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 警告 v3データのないv2から移行する 場合、v3の …
-
etcdをv3.7からv3.6にダウングレード
通常、etcd v3.7からv3.6へのダウングレードは、停止時間なしのローリングダウングレードで実行できます。 etcd v3.7のプロセスを1つずつ停止し、etcd v3.6のプロセスに置き換えます。 ダウングレードを有効にすると、クラスターでv3.7の新機能を利用できなくなります。 ダウングレードを開始する 前に、このガイドの残りを読んで準備してください。 ダウングレードのチェックリスト v3.7とv3.6の主な違いは次のとおりです。 フラグの違い v3.7では新しいフラグが追加されていな …
通常、etcd v3.7からv3.6へのダウングレードは、停止時間なしのローリングダウングレードで実行できます。 etcd v3.7のプロセスを1つずつ停止し、etcd v3.6のプロセスに置き換えます。 ダウングレードを有効にすると、クラスターでv3.7の新機能を利用できなくなります。 ダウングレードを開始する 前に、このガイドの残りを読んで準備してください。 ダウングレードのチェックリスト v3.7とv3.6の主な違いは次のとおりです。 フラグの違い v3.7では新しいフラグが追加されていな …
-
etcdをv3.5からv3.6にアップグレード
通常、etcd v3.5からv3.6へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.5のプロセスを1つずつ停止し、etcd v3.6のプロセスに置き換えます。 すべてのプロセスがv3.6で稼働すると、クラスターでv3.6の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 3.5の更新 重要 3.6にアップグレードする前に、すべての3.5メンバーが3.5.32以降に更新さ …
通常、etcd v3.5からv3.6へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.5のプロセスを1つずつ停止し、etcd v3.6のプロセスに置き換えます。 すべてのプロセスがv3.6で稼働すると、クラスターでv3.6の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 3.5の更新 重要 3.6にアップグレードする前に、すべての3.5メンバーが3.5.32以降に更新さ …
-
etcdをv3.6からv3.7にアップグレード
通常、etcd v3.6からv3.7へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.6のプロセスを1つずつ停止し、etcd v3.7のプロセスに置き換えます。 すべてのプロセスがv3.7で稼働すると、クラスターでv3.7の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 3.6の更新 重要 3.7にアップグレードする前に、すべての3.6メンバーが3.6.11以降に更新さ …
通常、etcd v3.6からv3.7へのアップグレードは、停止時間なしのローリングアップグレードで実行できます。 etcd v3.6のプロセスを1つずつ停止し、etcd v3.7のプロセスに置き換えます。 すべてのプロセスがv3.7で稼働すると、クラスターでv3.7の新機能を利用できます。 アップグレードを開始する 前に、このガイドの残りを読んで準備してください。 アップグレードのチェックリスト 3.6の更新 重要 3.7にアップグレードする前に、すべての3.6メンバーが3.6.11以降に更新さ …
-
etcdクラスターとアプリケーションのダウングレード
このセクションには、etcdクラスターとアプリケーションのダウングレードに関するドキュメントをまとめています。 etcd v3.xクラスターのダウングレード etcdを3.5から3.4にダウングレード etcdを3.6から3.5にダウングレード etcdを3.7から3.6にダウングレード
このセクションには、etcdクラスターとアプリケーションのダウングレードに関するドキュメントをまとめています。 etcd v3.xクラスターのダウングレード etcdを3.5から3.4にダウングレード etcdを3.6から3.5にダウングレード etcdを3.7から3.6にダウングレード
-
etcdクラスターとアプリケーションのアップグレード
このセクションには、etcdクラスターとアプリケーションのアップグレードに関するドキュメントをまとめています。 アップグレード方針 アップグレードを始める前に、etcdでサポートされるアップグレードは次の2つの場合だけであることに注意してください。 パッチアップグレード: 同じマイナーバージョン内でのパッチリリース間のアップグレードです(例:3.7.0 - 3.7.1)。 マイナーアップグレード: マイナーバージョンを1つずつ上げるアップグレードです(例:3.6 - 3.7)。マイナーバージョン …
このセクションには、etcdクラスターとアプリケーションのアップグレードに関するドキュメントをまとめています。 アップグレード方針 アップグレードを始める前に、etcdでサポートされるアップグレードは次の2つの場合だけであることに注意してください。 パッチアップグレード: 同じマイナーバージョン内でのパッチリリース間のアップグレードです(例:3.7.0 - 3.7.1)。 マイナーアップグレード: マイナーバージョンを1つずつ上げるアップグレードです(例:3.6 - 3.7)。マイナーバージョン …
-
データ破損
etcdには、メンバー間で状態が分岐することを防ぐため、データ破損の自動検出機能が組み込まれています。 注記 etcd 3.7では、以下のフィーチャーゲートと時間間隔フラグを使用してください。以前の実験的なデータ破損チェック用フラグは削除されています。設定オプション を参照してください。 データ破損検出の有効化 データ破損は、次の方法で検出できます。 初期チェック。--feature-gates=InitialCorruptCheck=trueフラグで有効にします。 次の定期チェック。 コンパク …
etcdには、メンバー間で状態が分岐することを防ぐため、データ破損の自動検出機能が組み込まれています。 注記 etcd 3.7では、以下のフィーチャーゲートと時間間隔フラグを使用してください。以前の実験的なデータ破損チェック用フラグは削除されています。設定オプション を参照してください。 データ破損検出の有効化 データ破損は、次の方法で検出できます。 初期チェック。--feature-gates=InitialCorruptCheck=trueフラグで有効にします。 次の定期チェック。 コンパク …
-
実行時再構成
etcdは段階的な実行時再構成をサポートしており、稼働中にクラスターのメンバー構成を更新できます。 再構成リクエストを処理できるのは、クラスターメンバーの過半数が稼働している場合だけです。本番環境では、クラスターを常に2を超えるメンバーで構成することを強く推奨します。2メンバーのクラスターからメンバーを削除するのは安全ではありません。2メンバーのクラスターの過半数も2だからです。削除処理中に障害が発生すると、クラスターが処理を継続できなくなり、過半数の障害から再起動 する必要が生じる可能性があり …
etcdは段階的な実行時再構成をサポートしており、稼働中にクラスターのメンバー構成を更新できます。 再構成リクエストを処理できるのは、クラスターメンバーの過半数が稼働している場合だけです。本番環境では、クラスターを常に2を超えるメンバーで構成することを強く推奨します。2メンバーのクラスターからメンバーを削除するのは安全ではありません。2メンバーのクラスターの過半数も2だからです。削除処理中に障害が発生すると、クラスターが処理を継続できなくなり、過半数の障害から再起動 する必要が生じる可能性があり …
-
etcdの監視
各etcdサーバーは、クライアントポートのHTTPエンドポイントを通じて、ローカルの監視情報を提供します。監視データは、システムの健全性確認とクラスターのデバッグの両方に役立ちます。 デバッグエンドポイント --log-level=debugを設定すると、etcdサーバーはクライアントポートの/debugパスでデバッグ情報を公開します。性能が低下し、ログ出力が多くなるため、--log-level=debugの設定には注意してください。 /debug/pprofは、Goランタイムの標準的なプロファ …
各etcdサーバーは、クライアントポートのHTTPエンドポイントを通じて、ローカルの監視情報を提供します。監視データは、システムの健全性確認とクラスターのデバッグの両方に役立ちます。 デバッグエンドポイント --log-level=debugを設定すると、etcdサーバーはクライアントポートの/debugパスでデバッグ情報を公開します。性能が低下し、ログ出力が多くなるため、--log-level=debugの設定には注意してください。 /debug/pprofは、Goランタイムの標準的なプロファ …
-
保守
概要 etcdクラスターの信頼性を維持するには、定期的な保守が必要です。etcdを使うアプリケーションの要件にもよりますが、通常は保守を自動化でき、停止や大幅な性能低下なしに実施できます。 etcdの保守はすべて、キー空間が消費するストレージリソースを管理するためのものです。キー空間のサイズを十分に管理できない場合に備え、ストレージ容量のクォータが設けられています。etcdメンバーの空き容量が少なくなると、クォータによってクラスター全体にアラームが発報され、システムは操作が制限された保守モードに …
概要 etcdクラスターの信頼性を維持するには、定期的な保守が必要です。etcdを使うアプリケーションの要件にもよりますが、通常は保守を自動化でき、停止や大幅な性能低下なしに実施できます。 etcdの保守はすべて、キー空間が消費するストレージリソースを管理するためのものです。キー空間のサイズを十分に管理できない場合に備え、ストレージ容量のクォータが設けられています。etcdメンバーの空き容量が少なくなると、クォータによってクラスター全体にアラームが発報され、システムは操作が制限された保守モードに …
-
gRPCプロキシー
gRPCプロキシーは、gRPC層(L7)で動作するステートレスなetcdリバースプロキシーです。中核となるetcdクラスターの処理負荷を減らすために設計されています。水平スケーラビリティーのために、監視APIとリースAPIのリクエストを集約します。また、過剰なリクエストを送るクライアントからクラスターを守るため、キー範囲のリクエストをキャッシュします。 gRPCプロキシーは、複数のetcdサーバーのエンドポイントに対応します。起動時に使用するエンドポイントをランダムに1つ選び、その障害を検出する …
gRPCプロキシーは、gRPC層(L7)で動作するステートレスなetcdリバースプロキシーです。中核となるetcdクラスターの処理負荷を減らすために設計されています。水平スケーラビリティーのために、監視APIとリースAPIのリクエストを集約します。また、過剰なリクエストを送るクライアントからクラスターを守るため、キー範囲のリクエストをキャッシュします。 gRPCプロキシーは、複数のetcdサーバーのエンドポイントに対応します。起動時に使用するエンドポイントをランダムに1つ選び、その障害を検出する …
-
etcdゲートウェイ
etcdゲートウェイとは etcdゲートウェイは、ネットワークデータをetcdクラスターに転送する単純なTCPプロキシーです。状態を持たず、透過的に動作し、クライアントのリクエストを検査したりクラスターのレスポンスに介入したりしません。TLS接続の終端、クライアントに代わるTLSハンドシェイク、接続が保護されているかの検証も行いません。 ゲートウェイは複数のetcdサーバーのエンドポイントに対応し、単純なラウンドロビン方式で動作します。利用可能なエンドポイントだけに転送し、クライアントが障害を意 …
etcdゲートウェイとは etcdゲートウェイは、ネットワークデータをetcdクラスターに転送する単純なTCPプロキシーです。状態を持たず、透過的に動作し、クライアントのリクエストを検査したりクラスターのレスポンスに介入したりしません。TLS接続の終端、クライアントに代わるTLSハンドシェイク、接続が保護されているかの検証も行いません。 ゲートウェイは複数のetcdサーバーのエンドポイントに対応し、単純なラウンドロビン方式で動作します。利用可能なエンドポイントだけに転送し、クライアントが障害を意 …
-
災害復旧
etcdは、マシンの障害に耐えるよう設計されています。etcdクラスターは一時的な障害(マシンの再起動など)から自動的にリカバリーし、Nメンバーのクラスターでは最大*(N-1)/2の恒久的な障害に耐えます。ハードウェアの故障やディスク破損などでメンバーが恒久的に停止すると、そのメンバーはクラスターにアクセスできなくなります。クラスターが(N-1)/2*を超えるメンバーを恒久的に失うと、重大な障害となり、クォーラムを回復不能な形で失います。クォーラムを失うと、クラスターはコンセンサスに達することが …
etcdは、マシンの障害に耐えるよう設計されています。etcdクラスターは一時的な障害(マシンの再起動など)から自動的にリカバリーし、Nメンバーのクラスターでは最大*(N-1)/2の恒久的な障害に耐えます。ハードウェアの故障やディスク破損などでメンバーが恒久的に停止すると、そのメンバーはクラスターにアクセスできなくなります。クラスターが(N-1)/2*を超えるメンバーを恒久的に失うと、重大な障害となり、クォーラムを回復不能な形で失います。クォーラムを失うと、クラスターはコンセンサスに達することが …
-
コンテナ内でのetcdクラスターの実行
このガイドでは、静的ブートストラップ手順 を使ってDockerでetcdを実行する方法を説明します。 Docker Dockerホストの外部のクライアントにetcd APIを公開するには、コンテナのホストIPアドレスを使用します。IPアドレスの取得方法については、docker inspect を参照してください。または、docker runコマンドに--net=hostフラグを指定し、コンテナを独立したネットワークスタックに配置しない方法もあります。 単一ノードのetcdの実行 etcdを構成す …
このガイドでは、静的ブートストラップ手順 を使ってDockerでetcdを実行する方法を説明します。 Docker Dockerホストの外部のクライアントにetcd APIを公開するには、コンテナのホストIPアドレスを使用します。IPアドレスの取得方法については、docker inspect を参照してください。または、docker runコマンドに--net=hostフラグを指定し、コンテナを独立したネットワークスタックに配置しない方法もあります。 単一ノードのetcdの実行 etcdを構成す …
-
Kubernetes StatefulSetとしてのetcdクラスターの実行
以下では、Kubernetes StatefulSetで静的ブートストラップ手順 を実行する方法を示します。 マニフェストの例 このマニフェストには、Kubernetesに静的なetcdクラスターを配置するためのServiceとStatefulSetが含まれます。 マニフェストの内容をetcd.yamlというファイルにコピーすると、次のコマンドでクラスターに適用できます。 $ kubectl apply --filename etcd.yaml 適用後、Podの準備が整うまで待ちます。 $ …
以下では、Kubernetes StatefulSetで静的ブートストラップ手順 を実行する方法を示します。 マニフェストの例 このマニフェストには、Kubernetesに静的なetcdクラスターを配置するためのServiceとStatefulSetが含まれます。 マニフェストの内容をetcd.yamlというファイルにコピーすると、次のコマンドでクラスターに適用できます。 $ kubectl apply --filename etcd.yaml 適用後、Podの準備が整うまで待ちます。 $ …
-
クラスター構成ガイド
概要 etcdクラスターを静的に起動するには、各メンバーがクラスター内のほかのメンバーを把握している必要があります。ただし、メンバーのIPアドレスを事前に把握できない場合もあります。その場合は、ディスカバリーサービスを利用してクラスターをブートストラップできます。 etcdクラスターの起動後、メンバーの追加や削除は実行時再構成 で行います。その設計をより深く理解するには、実行時構成の設計ドキュメント を参照することを推奨します。 このガイドでは、etcdクラスターをブートストラップする次の方法を …
概要 etcdクラスターを静的に起動するには、各メンバーがクラスター内のほかのメンバーを把握している必要があります。ただし、メンバーのIPアドレスを事前に把握できない場合もあります。その場合は、ディスカバリーサービスを利用してクラスターをブートストラップできます。 etcdクラスターの起動後、メンバーの追加や削除は実行時再構成 で行います。その設計をより深く理解するには、実行時構成の設計ドキュメント を参照することを推奨します。 このガイドでは、etcdクラスターをブートストラップする次の方法を …
-
通信のセキュリティーモデル
etcdは、クライアントとサーバーの通信、およびピア間(サーバー間/クラスター内)の通信の両方で、自動TLSとクライアント証明書による認証に対応しています。etcdは、データベースを使い始める際の負担を減らすため、RBACによる認証 も通信層の認証機能も、デフォルトでは有効にしません。また、このデフォルトは2013年のプロジェクト発足以来のもので、変更すると互換性を損ないます。セキュリティー機能を有効にしていないetcdクラスターは、あらゆるクライアントにデータを公開してしまう可能性があります。 …
etcdは、クライアントとサーバーの通信、およびピア間(サーバー間/クラスター内)の通信の両方で、自動TLSとクライアント証明書による認証に対応しています。etcdは、データベースを使い始める際の負担を減らすため、RBACによる認証 も通信層の認証機能も、デフォルトでは有効にしません。また、このデフォルトは2013年のプロジェクト発足以来のもので、変更すると互換性を損ないます。セキュリティー機能を有効にしていないetcdクラスターは、あらゆるクライアントにデータを公開してしまう可能性があります。 …
-
ロールベースのアクセス制御
概要 認証はetcd 2.1で追加されました。etcd v3 APIでは、新しいデータモデルに合わせて、認証機能のAPIとユーザーインターフェースを少し変更しています。このガイドは、etcd v3で基本的な認証とロールベースのアクセス制御を設定するためのものです。 特別なユーザーとロール 特別なユーザーrootと、特別なロールrootが1つずつあります。 ユーザーroot etcdへの完全なアクセス権を持つrootユーザーは、認証を有効にする前に作成しなければなりません。rootユーザーは、ロー …
概要 認証はetcd 2.1で追加されました。etcd v3 APIでは、新しいデータモデルに合わせて、認証機能のAPIとユーザーインターフェースを少し変更しています。このガイドは、etcd v3で基本的な認証とロールベースのアクセス制御を設定するためのものです。 特別なユーザーとロール 特別なユーザーrootと、特別なロールrootが1つずつあります。 ユーザーroot etcdへの完全なアクセス権を持つrootユーザーは、認証を有効にする前に作成しなければなりません。rootユーザーは、ロー …
-
認証
認証に使用するauth、user、role: export ETCDCTL_API=3 ENDPOINTS=localhost:2379 etcdctl --endpoints=${ENDPOINTS} role add root etcdctl --endpoints=${ENDPOINTS} role get root etcdctl --endpoints=${ENDPOINTS} user add root etcdctl --endpoints=${ENDPOINTS} user …
認証に使用するauth、user、role: export ETCDCTL_API=3 ENDPOINTS=localhost:2379 etcdctl --endpoints=${ENDPOINTS} role add root etcdctl --endpoints=${ENDPOINTS} role get root etcdctl --endpoints=${ENDPOINTS} user add root etcdctl --endpoints=${ENDPOINTS} user …
-
Goアプリケーションへのetcdの組み込み
etcdのGoパッケージembedを使用すると、etcdサーバーをアプリケーションに直接、簡単に組み込めます。 詳細はembedパッケージのドキュメント を参照してください。
etcdのGoパッケージembedを使用すると、etcdサーバーをアプリケーションに直接、簡単に組み込めます。 詳細はembedパッケージのドキュメント を参照してください。
-
gRPCの名前解決と検出
etcdは、etcdからエンドポイントを取得してgRPCサービスを検出する代替の名前システムを、gRPCリゾルバーで提供します。その仕組みは、サービス名を接頭辞に持つキーの更新の監視に基づいています。 この機能は、grpc-goでまだ実験的なgoogle.golang.org/grpc/resolver パッケージに依存しているため、実験的機能です。 go-grpcでetcdの検出機能を使う etcdクライアントは、etcdをバックエンドとしてgRPCエンドポイントを解決するgRPCリゾルバーを …
etcdは、etcdからエンドポイントを取得してgRPCサービスを検出する代替の名前システムを、gRPCリゾルバーで提供します。その仕組みは、サービス名を接頭辞に持つキーの更新の監視に基づいています。 この機能は、grpc-goでまだ実験的なgoogle.golang.org/grpc/resolver パッケージに依存しているため、実験的機能です。 go-grpcでetcdの検出機能を使う etcdクライアントは、etcdをバックエンドとしてgRPCエンドポイントを解決するgRPCリゾルバーを …
-
etcdの操作
ユーザーは主に、キーの値を書き込んだり取得したりしてetcdを操作します。このセクションでは、etcdサーバーを操作するコマンドラインツールetcdctlを使う方法を説明します。ここで説明する概念は、gRPC APIやクライアントライブラリーのAPIにも当てはまるはずです。 etcdctl v3.7はv3 APIを使用します。v2 APIとETCDCTL_APIによるバージョン選択は削除されています。 注記 以下の例には過去のコマンド出力が含まれるため、表示されるバージョン番号はインストールした …
ユーザーは主に、キーの値を書き込んだり取得したりしてetcdを操作します。このセクションでは、etcdサーバーを操作するコマンドラインツールetcdctlを使う方法を説明します。ここで説明する概念は、gRPC APIやクライアントライブラリーのAPIにも当てはまるはずです。 etcdctl v3.7はv3 APIを使用します。v2 APIとETCDCTL_APIによるバージョン選択は削除されています。 注記 以下の例には過去のコマンド出力が含まれるため、表示されるバージョン番号はインストールした …
-
チューニング
etcdのデフォルト設定は、平均ネットワークレイテンシーが低いローカルネットワークであれば、通常は問題なく機能します。ただし、複数のデータセンターにまたがる環境やレイテンシーの高いネットワークでetcdを使用する場合は、ハートビート間隔と選出タイムアウトの調整が必要になることがあります。 レイテンシーの原因はネットワークだけではありません。各リクエストとレスポンスは、リーダーとフォロワー双方の遅いディスクの影響を受けることがあります。それぞれのタイムアウトは、リクエストの送信から、相手のマシンか …
etcdのデフォルト設定は、平均ネットワークレイテンシーが低いローカルネットワークであれば、通常は問題なく機能します。ただし、複数のデータセンターにまたがる環境やレイテンシーの高いネットワークでetcdを使用する場合は、ハートビート間隔と選出タイムアウトの調整が必要になることがあります。 レイテンシーの原因はネットワークだけではありません。各リクエストとレスポンスは、リーダーとフォロワー双方の遅いディスクの影響を受けることがあります。それぞれのタイムアウトは、リクエストの送信から、相手のマシンか …
-
バグの報告
etcdプロジェクトのいずれかの部分にバグやドキュメントの誤りを見つけた場合は、Issueを作成 してお知らせください。私たちはバグや誤りを真剣に受け止めており、小さすぎて報告する必要のない問題はないと考えています。バグを報告する前に、同じ問題を報告するIssueがすでに存在していないか確認してください。 バグ報告を正確で理解しやすいものにするため、次の点を満たすようにしてください。 具体的であること。バージョン、環境、構成など、できるだけ多くの詳細を含めてください。etcdサーバーの実行に関す …
etcdプロジェクトのいずれかの部分にバグやドキュメントの誤りを見つけた場合は、Issueを作成 してお知らせください。私たちはバグや誤りを真剣に受け止めており、小さすぎて報告する必要のない問題はないと考えています。バグを報告する前に、同じ問題を報告するIssueがすでに存在していないか確認してください。 バグ報告を正確で理解しやすいものにするため、次の点を満たすようにしてください。 具体的であること。バージョン、環境、構成など、できるだけ多くの詳細を含めてください。etcdサーバーの実行に関す …
-
メンバーを追加・削除する方法
memberを使用して、メンバーシップの追加、削除、更新を行います。 # For each machine TOKEN=my-etcd-token-1 CLUSTER_STATE=new NAME_1=etcd-node-1 NAME_2=etcd-node-2 NAME_3=etcd-node-3 HOST_1=10.240.0.13 HOST_2=10.240.0.14 HOST_3=10.240.0.15 …
memberを使用して、メンバーシップの追加、削除、更新を行います。 # For each machine TOKEN=my-etcd-token-1 CLUSTER_STATE=new NAME_1=etcd-node-1 NAME_2=etcd-node-2 NAME_3=etcd-node-3 HOST_1=10.240.0.13 HOST_2=10.240.0.14 HOST_3=10.240.0.15 …
-
インストール
要件 etcdをインストールする前に、次のページを参照してください。 対応プラットフォーム 推奨ハードウェア ビルド済みバイナリーのインストール etcdを最も簡単にインストールする方法は、ビルド済みバイナリーを使用することです。 リリース一覧 から、使用するプラットフォームの圧縮アーカイブをダウンロードします。 リリースはv3.7.2 以降を選択してください。 アーカイブを展開します。バイナリーを含むディレクトリが作成されます。 実行可能バイナリーにパスを通します。たとえば、必要に応じてバイナ …
要件 etcdをインストールする前に、次のページを参照してください。 対応プラットフォーム 推奨ハードウェア ビルド済みバイナリーのインストール etcdを最も簡単にインストールする方法は、ビルド済みバイナリーを使用することです。 リリース一覧 から、使用するプラットフォームの圧縮アーカイブをダウンロードします。 リリースはv3.7.2 以降を選択してください。 アーカイブを展開します。バイナリーを含むディレクトリが作成されます。 実行可能バイナリーにパスを通します。たとえば、必要に応じてバイナ …
-
データベースの保存方法
前提条件 etcdctlとetcdutlをインストール します。 ローカルクラスターをセットアップ します。 データベースのスナップショットを取得する etcdデータベースのある時点のスナップショットを保存するsnapshot: etcdctl --endpoints=$ENDPOINT snapshot save DB_NAME グローバルオプション etcdctl --endpoints=[127.0.0.1:2379], gRPC endpoints スナップショットを要求できるetcdノ …
前提条件 etcdctlとetcdutlをインストール します。 ローカルクラスターをセットアップ します。 データベースのスナップショットを取得する etcdデータベースのある時点のスナップショットを保存するsnapshot: etcdctl --endpoints=$ENDPOINT snapshot save DB_NAME グローバルオプション etcdctl --endpoints=[127.0.0.1:2379], gRPC endpoints スナップショットを要求できるetcdノ …
-
クラスターの状態を確認する方法
前提条件 etcdとetcdctl をインストールします。 全体の状態の確認 endpoint statusを使用して、--endpointsフラグで指定した各エンドポイントの全体の状態を確認します。 etcdctl endpoint status (--endpoints=$ENDPOINTS|--cluster) オプション --cluster[=false]: use all endpoints from the cluster member list 健全性の確認 endpoint …
前提条件 etcdとetcdctl をインストールします。 全体の状態の確認 endpoint statusを使用して、--endpointsフラグで指定した各エンドポイントの全体の状態を確認します。 etcdctl endpoint status (--endpoints=$ENDPOINTS|--cluster) オプション --cluster[=false]: use all endpoints from the cluster member list 健全性の確認 endpoint …
-
etcdクラスターでリーダー選出を行う方法
前提条件 etcd とetcdctl がインストールされていることを確認します。 稼働中のetcdクラスターを確認します。 リーダー選出を行う etcdctlコマンドは、etcdクラスターでリーダー選出を行うために使用します。一度にリーダーになれるクライアントが1つだけであることを保証します。 etcdctl --endpoints=$ENDPOINTS elect <election-name> [proposal] etcdctl --endpoints=$ENDPOINTS elect …
前提条件 etcd とetcdctl がインストールされていることを確認します。 稼働中のetcdクラスターを確認します。 リーダー選出を行う etcdctlコマンドは、etcdクラスターでリーダー選出を行うために使用します。一度にリーダーになれるクライアントが1つだけであることを保証します。 etcdctl --endpoints=$ENDPOINTS elect <election-name> [proposal] etcdctl --endpoints=$ENDPOINTS elect …
-
ロックの作成方法
LOCKは、指定された名前の分散ミューテックスを取得します。取得したロックは、etcdctlが終了するまで保持されます。 前提条件 etcdとetcdctl をインストールします。 ロックの作成 分散ロックに使用するlock: etcdctl --endpoints=$ENDPOINTS lock mutex1 オプション endpoints - クラスター内のマシンのアドレスを、コンマ区切りのリストで指定します。 ttl - ロックセッションのタイムアウトを秒単位で指定します。
LOCKは、指定された名前の分散ミューテックスを取得します。取得したロックは、etcdctlが終了するまで保持されます。 前提条件 etcdとetcdctl をインストールします。 ロックの作成 分散ロックに使用するlock: etcdctl --endpoints=$ENDPOINTS lock mutex1 オプション endpoints - クラスター内のマシンのアドレスを、コンマ区切りのリストで指定します。 ttl - ロックセッションのタイムアウトを秒単位で指定します。
-
リースの作成方法
TTLを指定した書き込みに使用するlease: etcdctl --endpoints=$ENDPOINTS lease grant 300 # lease 2be7547fbc6a5afa granted with TTL(300s) etcdctl --endpoints=$ENDPOINTS put sample value --lease=2be7547fbc6a5afa etcdctl --endpoints=$ENDPOINTS get sample etcdctl …
TTLを指定した書き込みに使用するlease: etcdctl --endpoints=$ENDPOINTS lease grant 300 # lease 2be7547fbc6a5afa granted with TTL(300s) etcdctl --endpoints=$ENDPOINTS put sample value --lease=2be7547fbc6a5afa etcdctl --endpoints=$ENDPOINTS get sample etcdctl …
-
キーの監視方法
前提条件 etcdとetcdctl をインストールします。 キーの監視 今後の変更の通知を受け取るwatch: etcdctl watch $KEY [$END_KEY] オプション -i, --interactive[=false]: interactive mode --prefix[=false]: watch on a prefix if prefix is set --rev=0: Revision to start watching --prev-kv[=false]: get …
前提条件 etcdとetcdctl をインストールします。 キーの監視 今後の変更の通知を受け取るwatch: etcdctl watch $KEY [$END_KEY] オプション -i, --interactive[=false]: interactive mode --prefix[=false]: watch on a prefix if prefix is set --rev=0: Revision to start watching --prev-kv[=false]: get …
-
トランザクションで複数の書き込みを行う方法
前提条件 etcdとetcdctl がインストールされていること。 etcdクラスターが稼働していること。 用語 以下の例 で使用する主な用語を定義します。 用語 定義 etcdctl etcdサーバーを操作するコマンドラインツール。 txn コマンド txnは「transaction」の略です。複数のetcdリクエストを標準入力から読み込み、単一の不可分なトランザクションとして適用します。トランザクションは、条件のリスト、すべての条件が真の場合に適用するリクエストのリスト、いずれかの条件が偽の …
前提条件 etcdとetcdctl がインストールされていること。 etcdクラスターが稼働していること。 用語 以下の例 で使用する主な用語を定義します。 用語 定義 etcdctl etcdサーバーを操作するコマンドラインツール。 txn コマンド txnは「transaction」の略です。複数のetcdリクエストを標準入力から読み込み、単一の不可分なトランザクションとして適用します。トランザクションは、条件のリスト、すべての条件が真の場合に適用するリクエストのリスト、いずれかの条件が偽の …
-
キーの削除方法
前提条件 etcdとetcdctl をインストールします。 キーの追加または削除 指定したキーまたはキー範囲を削除するdel: etcdctl del $KEY [$END_KEY] オプション --prefix[=false]: delete keys with matching prefix --prev-kv[=false]: return deleted key-value pairs --from-key[=false]: delete keys that are greater …
前提条件 etcdとetcdctl をインストールします。 キーの追加または削除 指定したキーまたはキー範囲を削除するdel: etcdctl del $KEY [$END_KEY] オプション --prefix[=false]: delete keys with matching prefix --prev-kv[=false]: return deleted key-value pairs --from-key[=false]: delete keys that are greater …
-
13. セキュリティに関する考慮事項
HAProxyは、非常に限られた権限で動作するよう設計されています。標準的な使用方法は、chroot jailに隔離したうえで、jail内で何の権限も持たない非rootユーザーに権限を落とすことです。これにより、将来脆弱性が発見されても、侵害がシステムの他の部分に影響しないようにします。 chrootを実行するには、最初にrootユーザーとして起動する必要があります。手作業でchroot環境を構築し、その中でプロセスを起動するのは意味がありません。そのような環境の構築は面倒で、適切に保守される …
HAProxyは、非常に限られた権限で動作するよう設計されています。標準的な使用方法は、chroot jailに隔離したうえで、jail内で何の権限も持たない非rootユーザーに権限を落とすことです。これにより、将来脆弱性が発見されても、侵害がシステムの他の部分に影響しないようにします。 chrootを実行するには、最初にrootユーザーとして起動する必要があります。手作業でchroot環境を構築し、その中でプロセスを起動するのは意味がありません。そのような環境の構築は面倒で、適切に保守される …
-
12. デバッグと性能の問題
HAProxyを"-d"オプションで起動すると、フォアグラウンドで動作し、着信接続や接続の終了などのイベントごと、および受信したリクエスト・レスポンスのヘッダー行ごとに1行を出力します。このデバッグ出力は内容を処理する前に生成されるため、ローカルでの変更は反映されません。主な用途は、ネットワークスニファーを使わずにリクエストとレスポンスを表示することです。複数の接続を並列に処理すると出力は読みにくくなりますが、examples/ディレクトリにある"debug2ansi"と …
HAProxyを"-d"オプションで起動すると、フォアグラウンドで動作し、着信接続や接続の終了などのイベントごと、および受信したリクエスト・レスポンスのヘッダー行ごとに1行を出力します。このデバッグ出力は内容を処理する前に生成されるため、ローカルでの変更は反映されません。主な用途は、ネットワークスニファーを使わずにリクエストとレスポンスを表示することです。複数の接続を並列に処理すると出力は読みにくくなりますが、examples/ディレクトリにある"debug2ansi"と …
-
11. 回避すべき既知の落とし穴
システムの再起動後にhaproxyサービスが起動せず、手動で起動すると動く、という報告をときどき受けます。多くの場合、keepalivedなどのクラスターIPアドレス管理機構を使い、マスターノードだけにサービスのIPアドレスを割り当てています。haproxyを0.0.0.0にバインドしていたときは動作していたものが、仮想IPアドレスにバインドするように変更すると動かなくなります。これは、サービスの起動時点ではローカルノードが仮想IPアドレスをまだ所有しておらず、HAProxyがそのアドレスにバ …
システムの再起動後にhaproxyサービスが起動せず、手動で起動すると動く、という報告をときどき受けます。多くの場合、keepalivedなどのクラスターIPアドレス管理機構を使い、マスターノードだけにサービスのIPアドレスを割り当てています。haproxyを0.0.0.0にバインドしていたときは動作していたものが、仮想IPアドレスにバインドするように変更すると動かなくなります。これは、サービスの起動時点ではローカルノードが仮想IPアドレスをまだ所有しておらず、HAProxyがそのアドレスにバ …
-
10. 設定管理を容易にする方法
クラスターを構成する2つのHAProxyノードが、少数のアドレスを除いてまったく同じ設定を共有することはよくあります。ノードごとに設定の複製を管理すると、その内容は必然的に食い違っていきます。設定に環境変数を組み込めば、システム全体の環境変数をいくつか変えるだけで、複数の設定でまったく同じファイルを共有できます。この機能はバージョン1.5で導入され、当初はアドレスにのみ環境変数を含めることができました。1.6では対応範囲が広がり、どこでも環境変数を使用できます。構文はUNIXシェルと同じで、変 …
クラスターを構成する2つのHAProxyノードが、少数のアドレスを除いてまったく同じ設定を共有することはよくあります。ノードごとに設定の複製を管理すると、その内容は必然的に食い違っていきます。設定に環境変数を組み込めば、システム全体の環境変数をいくつか変えるだけで、複数の設定でまったく同じファイルを共有できます。この機能はバージョン1.5で導入され、当初はアドレスにのみ環境変数を含めることができました。1.6では対応範囲が広がり、どこでも環境変数を使用できます。構文はUNIXシェルと同じで、変 …
-
9. 統計情報とモニタリング
HAProxyに状態を問い合わせられます。最も一般的な方法はHTTP統計ページです。このページは、監視ツール向けにCSV出力形式も提供します。Unixソケットでも、同じ形式を利用できます。 統計情報は、HAProxy の複数のコンポーネントに対応するドメインと呼ばれるカテゴリに分類されます。利用可能なドメインは 2 つあります:proxy と resolvers。指定がなければ proxy ドメインが選択されます。なお、HTTP ページには proxy の統計情報のみが表示されます。 9.1. …
HAProxyに状態を問い合わせられます。最も一般的な方法はHTTP統計ページです。このページは、監視ツール向けにCSV出力形式も提供します。Unixソケットでも、同じ形式を利用できます。 統計情報は、HAProxy の複数のコンポーネントに対応するドメインと呼ばれるカテゴリに分類されます。利用可能なドメインは 2 つあります:proxy と resolvers。指定がなければ proxy ドメインが選択されます。なお、HTTP ページには proxy の統計情報のみが表示されます。 9.1. …
-
8. ログ
HAProxyはファイルシステムにアクセスしないため、ログの記録には常にsyslogサーバーを使用します。通常はUDPでログサーバーに送信します。デフォルトのポートは514です。ローカルのsyslogデーモンが動作する127.0.0.1を指定することが多いものの、ネットワーク経由で中央サーバーにログを集約する使い方もあります。特にアクティブ/アクティブ構成でログを到着順に統合したい場合、中央サーバーに集約する利点があります。UNIXソケットでローカルのsyslogデーモンに送信することもできま …
HAProxyはファイルシステムにアクセスしないため、ログの記録には常にsyslogサーバーを使用します。通常はUDPでログサーバーに送信します。デフォルトのポートは514です。ローカルのsyslogデーモンが動作する127.0.0.1を指定することが多いものの、ネットワーク経由で中央サーバーにログを集約する使い方もあります。特にアクティブ/アクティブ構成でログを到着順に統合したい場合、中央サーバーに集約する利点があります。UNIXソケットでローカルのsyslogデーモンに送信することもできま …
-
7. CPU使用率
警告 バージョンについて:この章には旧版のマルチプロセス運用に関する説明が残っています。HAProxy 2.5以降、nbprocとbind processはサポートされていません。この版では、グローバル設定 のnbthread、thread-groups、cpu-mapでスレッドを設定してください。 HAProxyは通常、ほとんどの時間をシステム内で費やし、ユーザー空間で費やす時間はそれより短くなります。適切に調整された3.5 GHzのCPUは、1コアのCPU使用率100%で、エンドツーエンド …
警告 バージョンについて:この章には旧版のマルチプロセス運用に関する説明が残っています。HAProxy 2.5以降、nbprocとbind processはサポートされていません。この版では、グローバル設定 のnbthread、thread-groups、cpu-mapでスレッドを設定してください。 HAProxyは通常、ほとんどの時間をシステム内で費やし、ユーザー空間で費やす時間はそれより短くなります。適切に調整された3.5 GHzのCPUは、1コアのCPU使用率100%で、エンドツーエンド …
-
プレフィックスでキーを取得する方法
前提条件 etcdctlをインストール します。 ローカルクラスターをセットアップ します。 プレフィックスでキーを取得する $ etcdctl --endpoints=$ENDPOINTS get PREFIX --prefix グローバルオプション --endpoints=[127.0.0.1:2379], gRPC endpoints オプション --prefix, get a range of keys with matching prefix 例 etcdctl …
前提条件 etcdctlをインストール します。 ローカルクラスターをセットアップ します。 プレフィックスでキーを取得する $ etcdctl --endpoints=$ENDPOINTS get PREFIX --prefix グローバルオプション --endpoints=[127.0.0.1:2379], gRPC endpoints オプション --prefix, get a range of keys with matching prefix 例 etcdctl …
-
6. メモリ管理
HAProxyは、単純で高速なプール方式のメモリ管理を使用します。扱うオブジェクトの種類が少ないため、サイズごとにmalloc()を呼び出すより、適切なサイズのオブジェクトを持つプールから取得するほうがはるかに効率的です。プールはスタック、つまりLIFOとして構成されます。このため、新たに割り当てるオブジェクトには、解放されたばかりでCPUキャッシュにまだ残っているものを使用します。メモリの断片化を抑えるため、サイズが近いプールは統合されます。 デフォルトでは性能を重視し、解放された各オブジェ …
HAProxyは、単純で高速なプール方式のメモリ管理を使用します。扱うオブジェクトの種類が少ないため、サイズごとにmalloc()を呼び出すより、適切なサイズのオブジェクトを持つプールから取得するほうがはるかに効率的です。プールはスタック、つまりLIFOとして構成されます。このため、新たに割り当てるオブジェクトには、解放されたばかりでCPUキャッシュにまだ残っているものを使用します。メモリの断片化を抑えるため、サイズが近いプールは統合されます。 デフォルトでは性能を重視し、解放された各オブジェ …
-
5. ファイル記述子の制限
受信したすべての接続を正常に処理できるように、HAProxyは読み込み時に、プロセスの存続期間中に必要となるファイル記述子の総数を計算します。通常のUnixプロセスには、デフォルトで一般に1024個のファイル記述子が許可され、特権プロセスはこの上限を自分で引き上げられます。これが、HAProxyをrootで起動して上限を調整させる理由の1つです。デフォルトの上限である1024個のファイル記述子では、約500の同時接続を処理できます。計算には、プロセスごとの接続総数を制限するグローバルの …
受信したすべての接続を正常に処理できるように、HAProxyは読み込み時に、プロセスの存続期間中に必要となるファイル記述子の総数を計算します。通常のUnixプロセスには、デフォルトで一般に1024個のファイル記述子が許可され、特権プロセスはこの上限を自分で引き上げられます。これが、HAProxyをrootで起動して上限を調整させる理由の1つです。デフォルトの上限である1024個のファイル記述子では、約500の同時接続を処理できます。計算には、プロセスごとの接続総数を制限するグローバルの …
-
4. HAProxyの停止と再起動
HAProxyはグレースフル停止と強制停止をサポートしています。強制停止は単純で、haproxyプロセスにSIGTERMシグナルを送ると即座に終了し、確立済みの接続はすべて閉じられます。グレースフル停止は、haproxyプロセスにSIGUSR1シグナルを送ると開始されます。リッスンポートのバインドだけを解除し、既存の接続が閉じられるまで処理を続けます。最後の接続が閉じられると、プロセスが終了します。 サービス管理スクリプトの"stop"や"restart"アクションでは、強制停止が使われます。 …
HAProxyはグレースフル停止と強制停止をサポートしています。強制停止は単純で、haproxyプロセスにSIGTERMシグナルを送ると即座に終了し、確立済みの接続はすべて閉じられます。グレースフル停止は、haproxyプロセスにSIGUSR1シグナルを送ると開始されます。リッスンポートのバインドだけを解除し、既存の接続が閉じられるまで処理を続けます。最後の接続が閉じられると、プロセスが終了します。 サービス管理スクリプトの"stop"や"restart"アクションでは、強制停止が使われます。 …
-
3. HAProxyの起動
HAProxyは、コマンドラインでいくつかの引数を渡して"haproxy"プログラムを呼び出すことで起動します。実際の構文は次のとおりです。 $ haproxy [<options>]* ここで、[<options>]*は任意の個数のオプションです。オプションは常に’-‘で始まり、一つ以上の文字が続き、さらに一つまたは複数の引数が続くことがあります。オプションを指定しない場合、HAProxyは対応するオプションを示すヘルプページを表示します。利用可能なオプションは、OSによって多少異なる場合が …
HAProxyは、コマンドラインでいくつかの引数を渡して"haproxy"プログラムを呼び出すことで起動します。実際の構文は次のとおりです。 $ haproxy [<options>]* ここで、[<options>]*は任意の個数のオプションです。オプションは常に’-‘で始まり、一つ以上の文字が続き、さらに一つまたは複数の引数が続くことがあります。オプションを指定しない場合、HAProxyは対応するオプションを示すヘルプページを表示します。利用可能なオプションは、OSによって多少異なる場合が …
-
etcdへの書き込み
前提条件 etcdctlをインストールします。 手順 putサブコマンドを使用して、キー・バリューペアを書き込みます。 etcdctl --endpoints=$ENDPOINTS put foo "Hello World!" 各要素の意味は次のとおりです。 fooはキーの名前です。 "Hello World!"は引用符で囲んだ値です。
前提条件 etcdctlをインストールします。 手順 putサブコマンドを使用して、キー・バリューペアを書き込みます。 etcdctl --endpoints=$ENDPOINTS put foo "Hello World!" 各要素の意味は次のとおりです。 fooはキーの名前です。 "Hello World!"は引用符で囲んだ値です。
-
1. 前提条件
このドキュメントでは、HAProxyの起動、停止、管理、トラブルシューティングの方法について説明します。また、既知の制限や回避すべき落とし穴についても述べています。設定方法については記載していません(詳細は configuration.txt を参照してください)。 このドキュメントでは、読者がUNIX系オペレーティングシステムの十分な管理能力を持ち、日常的にシェルを使い、straceやtcpdumpなどのトラブルシューティングツールに精通していることを前提としています。
このドキュメントでは、HAProxyの起動、停止、管理、トラブルシューティングの方法について説明します。また、既知の制限や回避すべき落とし穴についても述べています。設定方法については記載していません(詳細は configuration.txt を参照してください)。 このドキュメントでは、読者がUNIX系オペレーティングシステムの十分な管理能力を持ち、日常的にシェルを使い、straceやtcpdumpなどのトラブルシューティングツールに精通していることを前提としています。
-
貢献ガイドライン
チャット 質問がある場合、対話形式のトラブルシューティング支援が必要な場合、他のPatroniユーザーと話したい場合は、PostgreSQL Slack の#patroni チャンネルに参加してください。 バグの報告 バグを報告する前に、必ず最新のPatroniバージョンで再現することを確認してください。また、Issueトラッカー に同じ問題がすでに報告されていないかも再確認してください。 テストの実行 behaveテストを実行するための要件: contrib モジュールを含む …
チャット 質問がある場合、対話形式のトラブルシューティング支援が必要な場合、他のPatroniユーザーと話したい場合は、PostgreSQL Slack の#patroni チャンネルに参加してください。 バグの報告 バグを報告する前に、必ず最新のPatroniバージョンで再現することを確認してください。また、Issueトラッカー に同じ問題がすでに報告されていないかも再確認してください。 テストの実行 behaveテストを実行するための要件: contrib モジュールを含む …
-
etcdからの読み取り
前提条件 etcdctlをインストールします。 手順 getサブコマンドを使用して、etcdから読み取ります。 $ etcdctl --endpoints=$ENDPOINTS get foo foo Hello World! $ 各要素の意味は次のとおりです。 fooは要求したキーです。 Hello World!は取得した値です。 出力形式を指定する場合は、次のように実行します。 $ etcdctl --endpoints=$ENDPOINTS --write-out="json" get …
前提条件 etcdctlをインストールします。 手順 getサブコマンドを使用して、etcdから読み取ります。 $ etcdctl --endpoints=$ENDPOINTS get foo foo Hello World! $ 各要素の意味は次のとおりです。 fooは要求したキーです。 Hello World!は取得した値です。 出力形式を指定する場合は、次のように実行します。 $ etcdctl --endpoints=$ENDPOINTS --write-out="json" get …
-
8. ログ
HAProxyの強みの一つは、間違いなく詳細なログです。この種の製品で得られる情報としては、おそらく最もきめ細かく、複雑な環境の問題解決に非常に重要です。通常のログには、クライアントのポート、TCP/HTTPの状態タイマー、終了時の正確なストリーム状態と終了理由、トラフィックをサーバーへ振り向けた判断に関する情報を含み、任意のヘッダーを取得することもできます。 管理者が素早く対応できるよう、発生した内部・外部の問題を明確に示し、異なるレベルのフィルターを使って、複数の送信先へ同時にログを送れま …
HAProxyの強みの一つは、間違いなく詳細なログです。この種の製品で得られる情報としては、おそらく最もきめ細かく、複雑な環境の問題解決に非常に重要です。通常のログには、クライアントのポート、TCP/HTTPの状態タイマー、終了時の正確なストリーム状態と終了理由、トラフィックをサーバーへ振り向けた判断に関する情報を含み、任意のヘッダーを取得することもできます。 管理者が素早く対応できるよう、発生した内部・外部の問題を明確に示し、異なるレベルのフィルターを使って、複数の送信先へ同時にログを送れま …
-
単独インスタンスをPatroniクラスターに移行する
このセクションでは、単独のPostgreSQLインスタンスをPatroniクラスターに移行する手順を説明します。 既存のPostgreSQLインスタンスを使用せずにPatroniクラスターを構築する場合は、実行と設定 を参照してください。 手順 既存のPostgresクラスターをPatroni管理のクラスターに移行する手順の概要を以下に示します。既存クラスターのすべてのノードが稼働中であり、移行中にPostgresの設定を変更する予定がないことを前提とします。手順は次のとおりです。 …
このセクションでは、単独のPostgreSQLインスタンスをPatroniクラスターに移行する手順を説明します。 既存のPostgreSQLインスタンスを使用せずにPatroniクラスターを構築する場合は、実行と設定 を参照してください。 手順 既存のPostgresクラスターをPatroni管理のクラスターに移行する手順の概要を以下に示します。既存クラスターのすべてのノードが稼働中であり、移行中にPostgresの設定を変更する予定がないことを前提とします。手順は次のとおりです。 …
-
KubernetesでのPatroniの使用
PatroniはKubernetesオブジェクトを使用してクラスターの状態を保存し、リーダーキーを管理できます。そのため、整合性ストアを用意せずにKubernetes環境でPostgresを運用できます。つまり、追加のetcdデプロイメントを実行する必要がありません。Patroniがリーダーキーと構成キーの保存に使用できるKubernetesオブジェクトには二種類あり、kubernetes.use_endpointsまたは環境変数PATRONI_KUBERNETES_USE_ENDPOINTS …
PatroniはKubernetesオブジェクトを使用してクラスターの状態を保存し、リーダーキーを管理できます。そのため、整合性ストアを用意せずにKubernetes環境でPostgresを運用できます。つまり、追加のetcdデプロイメントを実行する必要がありません。Patroniがリーダーキーと構成キーの保存に使用できるKubernetesオブジェクトには二種類あり、kubernetes.use_endpointsまたは環境変数PATRONI_KUBERNETES_USE_ENDPOINTS …
-
デモ用etcdクラスターをセットアップする方法
各etcdノードで、クラスターのメンバーを指定します。 TOKEN=token-01 CLUSTER_STATE=new NAME_1=machine-1 NAME_2=machine-2 NAME_3=machine-3 HOST_1=10.240.0.17 HOST_2=10.240.0.18 HOST_3=10.240.0.19 …
各etcdノードで、クラスターのメンバーを指定します。 TOKEN=token-01 CLUSTER_STATE=new NAME_1=machine-1 NAME_2=machine-2 NAME_3=machine-3 HOST_1=10.240.0.17 HOST_2=10.240.0.18 HOST_3=10.240.0.19 …
-
サポートと貢献
pgBadgerはオープンプロジェクトとして維持されています。バグ報告、機能要望、ドキュメントの修正、パッチは、アップストリームのGitHubリポジトリ経由で処理されます。 バグおよび機能要望 最新リリース版にアップグレードし、問題が依然として発生するか確認してください。 既存の回答を検索するには、オープンな問題 および クローズされた問題 を確認してください。 問題を再現する最小限の安全なログサンプルおよびコマンドラインに簡略化してください。 認証情報、機密SQL、バインド値、ホスト名、アドレ …
pgBadgerはオープンプロジェクトとして維持されています。バグ報告、機能要望、ドキュメントの修正、パッチは、アップストリームのGitHubリポジトリ経由で処理されます。 バグおよび機能要望 最新リリース版にアップグレードし、問題が依然として発生するか確認してください。 既存の回答を検索するには、オープンな問題 および クローズされた問題 を確認してください。 問題を再現する最小限の安全なログサンプルおよびコマンドラインに簡略化してください。 認証情報、機密SQL、バインド値、ホスト名、アドレ …
-
クラスターの一時停止/再開モード
目的 ある条件下では、Patroniはクラスターの管理を一時的に停止する必要がありますが、その間もクラスター状態をDCSに保持します。このような状況の例として、メジャーバージョンのアップグレードや破損からの復旧など、稀なクラスター操作が挙げられます。これらの操作中は、Patroniが認識しない理由でノードの起動・停止が頻発し、一部のノードが一時的にプライマリーに昇格する場合もあり、その結果、同時に1つのプライマリーしか実行されていないという前提が破られることがあります。したがって …
目的 ある条件下では、Patroniはクラスターの管理を一時的に停止する必要がありますが、その間もクラスター状態をDCSに保持します。このような状況の例として、メジャーバージョンのアップグレードや破損からの復旧など、稀なクラスター操作が挙げられます。これらの操作中は、Patroniが認識しない理由でノードの起動・停止が頻発し、一部のノードが一時的にプライマリーに昇格する場合もあり、その結果、同時に1つのプライマリーしか実行されていないという前提が破られることがあります。したがって …
-
リリース、パッケージ、アップグレード
HAProxyはGPLv2ライセンスのオープンソースプロジェクトです。要求に応じてソースへアクセスできるようにすることを条件に、誰でも再配布できます。変更を加えた場合は、特にこの条件が重要です。 HAProxyは、“master"または"mainline"と呼ばれる主開発ブランチで開発が進み、コードが安定したと判断されると、そこから新しいブランチが分岐します。プロジェクトへの参加や最新機能の利用を目的として、多くのWebサイトが自発的に開発ブランチを本番環境で動かしています。そのフィードバック …
HAProxyはGPLv2ライセンスのオープンソースプロジェクトです。要求に応じてソースへアクセスできるようにすることを条件に、誰でも再配布できます。変更を加えた場合は、特にこの条件が重要です。 HAProxyは、“master"または"mainline"と呼ばれる主開発ブランチで開発が進み、コードが安定したと判断されると、そこから新しいブランチが分岐します。プロジェクトへの参加や最新機能の利用を目的として、多くのWebサイトが自発的に開発ブランチを本番環境で動かしています。そのフィードバック …
-
スタンバイクラスター
Patroniは、「スタンバイクラスター」と呼ばれる機能を使用して、リモートのデータセンター(リージョン)へのカスケードレプリケーションも実行できます。この種類のクラスターには、次の要素があります。 「スタンバイリーダー」。リモートのノードからレプリケーションを行う点を除き、通常のクラスターリーダーとほぼ同じように動作します。 スタンバイリーダーからレプリケーションを行うカスケードレプリカ。 スタンバイリーダーはDCS内のリーダーロックを保持し、更新します。リーダーロックが期限切れになると、カ …
Patroniは、「スタンバイクラスター」と呼ばれる機能を使用して、リモートのデータセンター(リージョン)へのカスケードレプリケーションも実行できます。この種類のクラスターには、次の要素があります。 「スタンバイリーダー」。リモートのノードからレプリケーションを行う点を除き、通常のクラスターリーダーとほぼ同じように動作します。 スタンバイリーダーからレプリケーションを行うカスケードレプリカ。 スタンバイリーダーはDCS内のリーダーロックを保持し、更新します。リーダーロックが期限切れになると、カ …
-
増分レポート
増分モードでは、解析した統計をバイナリ形式で保存し、1日ごとのHTMLレポート、1週間ごとの累積レポート、およびそれらを結ぶカレンダー形式の目次を生成します。同じログエントリーを重複して数えずに、ローテーションされたログを繰り返し処理するための機能です。 日次・週次レポートを生成する 日次のログローテーション後にpgBadgerを実行し、永続的な出力ディレクトリを指定します。 crontab 0 4 * * * /usr/bin/pgbadger -I -q …
増分モードでは、解析した統計をバイナリ形式で保存し、1日ごとのHTMLレポート、1週間ごとの累積レポート、およびそれらを結ぶカレンダー形式の目次を生成します。同じログエントリーを重複して数えずに、ローテーションされたログを繰り返し処理するための機能です。 日次・週次レポートを生成する 日次のログローテーション後にpgBadgerを実行し、永続的な出力ディレクトリを指定します。 crontab 0 4 * * * /usr/bin/pgbadger -I -q …
-
レプリカのイメージングとブートストラップ
Patroni を使用すると、新しいレプリカの作成をカスタマイズできます。また、新しい空のクラスターがブートストラップされるときに何が起こるかの定義もサポートします。 2 つの区別は明確に定義されています。Patroni は、initialize キーがクラスターの DCS に存在する場合にのみレプリカを作成します。 initialize キーがない場合、Patroni は初期化キー ロックを取得する最初のノードで排他的にブートストラップを呼び出します。 ブートストラップ PostgreSQL …
Patroni を使用すると、新しいレプリカの作成をカスタマイズできます。また、新しい空のクラスターがブートストラップされるときに何が起こるかの定義もサポートします。 2 つの区別は明確に定義されています。Patroni は、initialize キーがクラスターの DCS に存在する場合にのみレプリカを作成します。 initialize キーがない場合、Patroni は初期化キー ロックを取得する最初のノードで排他的にブートストラップを呼び出します。 ブートストラップ PostgreSQL …
-
並列処理
pgBadgerには相互に補完する2つのマルチプロセスモードがあります。単にCPU数だけでなく、入力の構成に応じて選択してください。 オプション 並列処理の単位 適する入力 主な制約 -j N / --jobs N 単一ログファイルの分割片 大きなシーク可能なログ1つ 分割境界で少数のクエリーが重複または欠落する場合があります -J N / --Jobs N ログファイル全体 多数の独立したログ ワーカーを稼働させ続けるだけのファイル数がある場合にのみ効果があります -jで大きなファイルを分割す …
pgBadgerには相互に補完する2つのマルチプロセスモードがあります。単にCPU数だけでなく、入力の構成に応じて選択してください。 オプション 並列処理の単位 適する入力 主な制約 -j N / --jobs N 単一ログファイルの分割片 大きなシーク可能なログ1つ 分割境界で少数のクエリーが重複または欠落する場合があります -J N / --Jobs N ログファイル全体 多数の独立したログ ワーカーを稼働させ続けるだけのファイル数がある場合にのみ効果があります -jで大きなファイルを分割す …
-
PostgreSQLのログ設定
pgBadgerでレポートできるのは、PostgreSQLがログに書き出した情報だけです。まず解析可能なプレフィックスと、目的に応じたステートメントのログ出力方針を設定し、次に分析したい運用イベントを追加してください。 クエリーログの最小構成 クエリー本文と実行時間を記録するには、実行時間に基づくステートメントのログ出力を有効にします。 log_min_duration_statement = 0 0を指定すると、完了したすべてのステートメントが記録されます。負荷の高いサーバーでは、ログ量を抑え …
pgBadgerでレポートできるのは、PostgreSQLがログに書き出した情報だけです。まず解析可能なプレフィックスと、目的に応じたステートメントのログ出力方針を設定し、次に分析したい運用イベントを追加してください。 クエリーログの最小構成 クエリー本文と実行時間を記録するには、実行時間に基づくステートメントのログ出力を有効にします。 log_min_duration_statement = 0 0を指定すると、完了したすべてのステートメントが記録されます。負荷の高いサーバーでは、ログ量を抑え …
-
PgBouncer コマンドの使用法
概要 pgbouncer [-d][-v][-u user] <pgbouncer.ini> pgbouncer -V|-h Windows では、次のオプションが利用可能です: pgbouncer.exe [-v][-u user] <pgbouncer.ini> pgbouncer.exe -V|-h Windows サービスの設定に追加で使用できるオプション: pgbouncer.exe --regservice <pgbouncer.ini> pgbouncer.exe …
概要 pgbouncer [-d][-v][-u user] <pgbouncer.ini> pgbouncer -V|-h Windows では、次のオプションが利用可能です: pgbouncer.exe [-v][-u user] <pgbouncer.ini> pgbouncer.exe -V|-h Windows サービスの設定に追加で使用できるオプション: pgbouncer.exe --regservice <pgbouncer.ini> pgbouncer.exe …