View a markdown version of this page

先決條件和叢集設定 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

先決條件和叢集設定

在本節中,您會設定高可用性教學課程的基礎設施。您可以建立安全群組、建立金鑰對、啟動 Amazon EC2 執行個體、安裝 Pacemaker 和 DRBD、建立叢集,以及設定執行個體之間的區塊層級複寫。

建立和設定安全群組

建立允許叢集執行個體之間所有流量的安全群組。在本教學課程中,您會開啟所有連接埠以簡化設定。此步驟需要 VPC。如果您沒有 VPC,請參閱建立 VPC

主控台
  • 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  • 在導覽窗格中,選擇安全群組,然後選擇建立安全群組

  • 輸入名稱 (例如 pacemaker-cluster-sg) 和描述。

  • 選取您的 VPC。

  • 選擇建立安全群組

  • 建立後,選取新的安全群組並編輯其傳入規則。選擇新增規則。將類型設定為所有流量,並將來源設定為安全群組自己的 ID。這允許此安全群組中執行個體之間的所有流量。

  • 新增 SSH 存取的第二個傳入規則。將類型設定為 SSH,並將來源設定為我的 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。在本教學課程中,對所有執行個體使用相同的金鑰對。

主控台
  • 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  • 在導覽窗格中,選擇金鑰對,然後選擇建立金鑰對

  • 輸入名稱 (例如 pacemaker-key)。

  • 選取 RSA 做為金鑰對類型,然後選取 .pem 做為檔案格式。

  • 選擇 Create key pair (建立金鑰對)。私有金鑰檔案會自動下載。

警告

將私有金鑰檔案 (.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 執行個體

在您建立的安全群組中啟動兩個 Ubuntu Amazon EC2 執行個體。小型執行個體類型 (例如 t3.small) 足以進行本教學課程。

主控台
  • 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  • 選擇啟動執行個體

  • 輸入執行個體的名稱 (例如 pacemaker-instance-1)。

  • 應用程式和作業系統映像下,搜尋 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}]'

    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. 設定叢集。僅在一個執行個體上執行此命令。--force 旗標會銷毀裝置上的任何現有叢集。

    sudo pcs cluster setup my-gg-cluster instance1 instance2 --force
  5. 啟動叢集。僅在一個執行個體上執行此命令。

    sudo pcs cluster start --all sudo pcs cluster enable --all
  6. 驗證任一執行個體上的叢集狀態

    sudo pcs status

設定 DRBD

DRBD (分散式複寫區塊裝置) 是一種 Linux 核心模組,可在執行個體之間即時複寫儲存裝置。它適用於區塊型設備層級,即檔案系統下方的原始磁碟層級,因此寫入一個執行個體上的磁碟的所有資料都會鏡像到另一個執行個體。這可確保如果主要執行個體失敗,待命執行個體具有相同的資料複本。

  1. 建立並連接 EBS 磁碟區。為每個執行個體建立 EBS 磁碟區。磁碟區必須與執行個體位於相同的可用區域。

    主控台
    • 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    • 在導覽窗格中,選擇磁碟區,然後選擇建立磁碟區

    • 磁碟區類型設定為 gp3大小設定為 8 GiB,並將可用區域設定為與執行個體相同的區域。

    • 選擇建立磁碟區

    • 選取新磁碟區,選擇動作 > 連接磁碟區,選取目標執行個體,將裝置名稱設定為 /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/xvdbz。使用 lsblk識別實際裝置名稱,並在 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

    驗證您的 lsblk EBS 磁碟區裝置 (例如 xvdbznvme1n1) 下drbd0顯示的 。

  6. 設定主要執行個體。僅在執行個體 1 上執行下列命令,以強制它成為主要命令並等待同步。

    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'