View a markdown version of this page

前提条件とクラスターのセットアップ - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

前提条件とクラスターのセットアップ

このセクションでは、高可用性チュートリアルのインフラストラクチャを設定します。セキュリティグループの作成、キーペアの作成、Amazon EC2 インスタンスの起動、Pacemaker と DRBD のインストール、クラスターの作成、インスタンス間のブロックレベルのレプリケーションの設定を行います。

セキュリティグループの作成と設定

クラスターインスタンス間のすべてのトラフィックを許可するセキュリティグループを作成します。このチュートリアルでは、すべてのポートを開いてセットアップを簡素化します。このステップには VPC が必要です。持っていない場合は、「VPC の作成」を参照してください。

コンソール
  • Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

  • ナビゲーションペインで、セキュリティグループを選択し、セキュリティグループの作成を選択します。

  • 名前 ( などpacemaker-cluster-sg) と説明を入力します。

  • VPC を選択します。

  • [セキュリティグループの作成] を選択してください。

  • 作成後、新しいセキュリティグループを選択し、そのインバウンドルールを編集します。[ルールを追加] を選択してください。Typeすべてのトラフィックに設定し、Source をセキュリティグループ自身の ID に設定します。これにより、このセキュリティグループのインスタンス間のすべてのトラフィックが許可されます。

  • SSH アクセスの 2 番目のインバウンドルールを追加します。TypeSSH に設定し、SourceMy IP に設定します。

AWS Command Line Interface
  • セキュリティグループを作成します。

    aws ec2 create-security-group \ --group-name pacemaker-cluster-sg \ --description "Security group for Pacemaker HA cluster" \ --vpc-id your-vpc-id

    出力GroupIdの を書き留めます (例: sg-0123456789abcdef0)。

  • インバウンドルールを追加して、同じセキュリティグループ内のインスタンスからのすべてのトラフィックを許可します。

    aws ec2 authorize-security-group-ingress \ --group-id security-group-id \ --protocol all \ --source-group security-group-id
  • IP アドレスからの SSH アクセスを許可するインバウンドルールを追加します。

    aws ec2 authorize-security-group-ingress \ --group-id security-group-id \ --protocol tcp \ --port 22 \ --cidr your-ip/32

キーペアを作成する

すべてのインスタンスへの SSH アクセスに使用するキーペアを作成します。このチュートリアルでは、すべてのインスタンスに同じキーペアを使用します。

コンソール
  • Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

  • ナビゲーションペインで、キーペアを選択し、キーペアの作成を選択します。

  • 名前を入力します (例: pacemaker-key)。

  • キーペアタイプとして RSA を選択し、ファイル形式として .pem を選択します。

  • [キーペアの作成] を選択してください。プライベートキーファイルは自動的にダウンロードされます。

警告

プライベートキーファイル (.pem) を安全な場所に保存します。再度ダウンロードすることはできません。インスタンスに SSH するには、このファイルが必要です。

AWS Command Line Interface
  • キーペアを作成します。

    aws ec2 create-key-pair \ --key-name key-name \ --query 'KeyMaterial' \ --output text > pacemaker-key.pem
  • プライベートキーファイルに正しいアクセス許可を設定します。

    chmod 400 pacemaker-key.pem

EC2 インスタンスを起動する

作成したセキュリティグループで 2 つの Ubuntu Amazon EC2 インスタンスを起動します。このチュートリアルでは、小さなインスタンスタイプ ( などt3.small) で十分です。

コンソール
  • Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

  • [Launch Instances] (インスタンスの起動) を選択してください。

  • インスタンスの名前を入力します (例: pacemaker-instance-1)。

  • アプリケーションイメージと OS イメージUbuntu を検索し、Ubuntu Server AMI (Ubuntu Server 24.04 LTS など) を選択します。

  • インスタンスタイプで、t3.small を選択します。

  • キーペアで、前に作成したキーを選択します。

  • ネットワーク設定編集を選択し、VPC とサブネットを選択し、ファイアウォール (セキュリティグループ)既存のセキュリティグループを選択を選択し、 を選択しますpacemaker-cluster-sg

  • [インスタンスを起動] を選択します。

  • 追加のインスタンス ( など) ごとに繰り返しますpacemaker-instance-2。すべてのインスタンスが同じ VPC とセキュリティグループにあることを確認します。

AWS Command Line Interface
  • インスタンスを起動します。

    aws ec2 run-instances \ --image-id ubuntu-ami-id \ --instance-type t3.small \ --key-name key-name \ --security-group-ids security-group-id \ --subnet-id subnet-id \ --count 1 \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=pacemaker-instance-1}]'

    2 番目のインスタンスValue=pacemaker-instance-2に対して と を繰り返します。

クラスター設定には、各インスタンスのプライベート IP アドレスが必要です。

  • コンソール: Amazon EC2 コンソールでインスタンスを選択し、詳細タブでプライベート IPv4 アドレスを見つけます。

  • AWS Command Line Interface:

    aws ec2 describe-instances \ --filters "Name=tag:Name,Values=pacemaker-instance-*" \ --query "Reservations[*].Instances[*].[Tags[?Key=='Name'].Value|[0],PrivateIpAddress]" \ --output table

Pacemaker ユーティリティをインストールする

各インスタンスに SSH 接続し、Pacemaker ユーティリティをインストールします。

ssh -i pacemaker-key.pem ubuntu@instance-public-ip
sudo apt update sudo apt install -y pacemaker pcs resource-agents-extra resource-agents-common resource-agents-base

ネットワーク通信を設定する

  1. インスタンス間の通信をテストします。送信先インスタンスで、次のコマンドを実行して、送信元インスタンスから ping をリッスンします。

    sudo tcpdump host source-instance-private-ip

    ソースインスタンスで、次のコマンドを実行して、送信先インスタンスに ping を実行します。

    ping -c 4 destination-instance-private-ip

    両側に ping レスポンスが表示されます。そうでない場合は、セキュリティグループがインスタンス間のすべてのトラフィックを許可していることを確認します。

  2. cloud-init ホスト名管理を無効にします。Ubuntu Amazon EC2 インスタンスでは、cloud-init は再起動時にホスト名と/etc/hosts変更を元に戻すことができます。これを防ぐには、各インスタンスでこれを実行します。

    sudo bash -c 'cat > /etc/cloud/cloud.cfg.d/99-preserve-hostconfig.cfg <<EOF preserve_hostname: true manage_etc_hosts: false EOF'
  3. 各インスタンスにホスト名を設定します。Pacemaker はホスト名を使用してクラスターインスタンスを識別します。

    インスタンス 1 の場合:

    sudo hostnamectl set-hostname instance1

    インスタンス 2 の場合:

    sudo hostnamectl set-hostname instance2
  4. を設定します/etc/hosts各インスタンスで、プライベート IP とホスト名のペアを に追加します/etc/hosts。これにより、インスタンスはホスト名で相互に解決できます。

    sudo tee -a /etc/hosts <<EOF instance1-private-ip instance1 instance2-private-ip instance2 EOF

Pacemaker クラスターを作成する

  1. 各インスタンスで pcs デーモンを起動します

    sudo systemctl enable pcsd.service sudo systemctl start pcsd.service
  2. hacluster パスワードを設定します。hacluster ユーザーは、pcsパッケージのインストール時に自動的に作成されるシステムアカウントです。Pacemaker は、インスタンス間のクラスター認証にこのアカウントを使用します。各インスタンスで同じパスワードを設定します。

    sudo passwd hacluster
  3. PCS ホストを承認します。相互にクラスターインスタンスを承認します。各インスタンスでこれを実行します。

    sudo pcs host auth instance1 instance2

    hacluster ユーザー名とパスワードの入力を求められます。

  4. クラスターをセットアップします。このコマンドは 1 つのインスタンスでのみ実行します。--force フラグは、デバイス上の既存のクラスターを破棄します。

    sudo pcs cluster setup my-gg-cluster instance1 instance2 --force
  5. クラスターを起動します。このコマンドは 1 つのインスタンスでのみ実行します。

    sudo pcs cluster start --all sudo pcs cluster enable --all
  6. いずれかのインスタンスのクラスターステータスを確認します

    sudo pcs status

DRBD のセットアップ

DRBD (Distributed Replicated Block Device) は、インスタンス間でストレージデバイスをリアルタイムでレプリケートする Linux カーネルモジュールです。これは、ファイルシステムの下の raw ディスクレベルであるブロックデバイスレベルで機能するため、1 つのインスタンスのディスクに書き込まれたすべてのデータはもう一方のインスタンスにミラーリングされます。これにより、プライマリインスタンスが失敗した場合、スタンバイインスタンスのデータのコピーは同じになります。

  1. EBS ボリュームを作成してアタッチします。インスタンスごとに EBS ボリュームを作成します。ボリュームは、インスタンスと同じアベイラビリティーゾーンにある必要があります。

    コンソール
    • Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

    • ナビゲーションペインで、ボリュームを選択し、ボリュームの作成を選択します。

    • ボリュームタイプgp3サイズ8 GiB、アベイラビリティーゾーンをインスタンスと同じゾーンに設定します。

    • [Create volume] (ボリュームの作成) を選択します。

    • 新しいボリュームを選択し、アクション > ボリュームのアタッチを選択し、ターゲットインスタンスを選択し、デバイス名を に設定し/dev/xvdbzボリュームのアタッチを選択します。

    • インスタンスごとに繰り返します。

    AWS Command Line Interface
    • インスタンスと同じアベイラビリティーゾーンにボリュームを作成します。

      aws ec2 create-volume \ --volume-type gp3 \ --size 8 \ --availability-zone instance-availability-zone

      出力VolumeIdの を書き留めます。

    • ボリュームをインスタンスにアタッチします。

      aws ec2 attach-volume \ --volume-id volume-id \ --instance-id instance-id \ --device /dev/xvdbz

      インスタンスごとに繰り返します。

  2. ボリュームを確認します。各インスタンスに SSH 接続し、ブロックデバイスを一覧表示してボリュームがアタッチされていることを確認します。

    lsblk

    などの Nitro ベースのインスタンスタイプではt3.small、ボリュームは ではなく NVMe デバイス ( など/dev/nvme1n1) として表示されます/dev/xvdbzlsblk を使用して実際のデバイス名を識別し、その名前を DRBD 設定で使用します。

  3. 各インスタンスに DRBD ユーティリティをインストールします。

    sudo apt install -y drbd-utils
  4. DRBD リソースを設定します。両方のインスタンスに DRBD リソース設定ディレクトリと ファイルを作成します。

    sudo mkdir -p /etc/drbd.d sudo vi /etc/drbd.d/greengrass.res

    次の設定を追加します。ホスト名と IP アドレスを値に置き換えます。

    resource greengrass { protocol C; on instance1 { device /dev/drbd0; disk /dev/instance1-device-name; address instance1-private-ip:7788; meta-disk internal; } on instance2 { device /dev/drbd0; disk /dev/instance2-device-name; address instance2-private-ip:7788; meta-disk internal; } }
  5. DRBD リソースを作成して起動します。両方のインスタンスで を実行します。

    sudo drbdadm create-md greengrass sudo drbdadm up greengrass

    EBS ボリュームデバイス ( xvdbzや などnvme1n1) の下lsblkdrbd0に表示される を で確認します。

  6. プライマリインスタンスを設定します。instance1 で次のコマンドを強制的にプライマリとして実行し、同期を待ちます。

    sudo drbdadm -- --overwrite-data-of-peer primary greengrass sudo drbdadm status

    両方のインスタンスがディスクの状態UpToDateを表示するまで待ちます。同期されると、他のすべてのインスタンスがスタンバイインスタンスになります。

  7. DRBD デバイスをフォーマットしてマウントします。

    プライマリインスタンスでのみ、DRBD デバイスをフォーマットします。

    sudo mkfs.ext4 /dev/drbd0

    すべてのインスタンスで、マウントディレクトリを作成します。

    sudo mkdir -p /greengrass/v2

    プライマリインスタンスにのみ、DRBD デバイスをマウントします。

    sudo mount /dev/drbd0 /greengrass/v2
  8. DRBD 同期ステータスを確認します。

    sudo drbdadm status mount | grep 'drbd'