本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
先決條件和叢集設定
在本節中,您會設定高可用性教學課程的基礎設施。您可以建立安全群組、建立金鑰對、啟動 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-idyour-vpc-id請注意輸出
GroupId中的 (例如sg-0123456789abcdef0)。 -
新增傳入規則,以允許來自相同安全群組中執行個體的所有流量。
aws ec2 authorize-security-group-ingress \ --group-idsecurity-group-id\ --protocol all \ --source-groupsecurity-group-id -
新增傳入規則,以允許從您的 IP 地址存取 SSH。
aws ec2 authorize-security-group-ingress \ --group-idsecurity-group-id\ --protocol tcp \ --port 22 \ --cidryour-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-namekey-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-idubuntu-ami-id\ --instance-type t3.small \ --key-namekey-name\ --security-group-idssecurity-group-id\ --subnet-idsubnet-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
設定網路通訊
-
測試執行個體之間的通訊。在目的地執行個體上執行下列命令,以接聽來源執行個體的 ping。
sudo tcpdump hostsource-instance-private-ip在來源執行個體上,執行下列命令來 ping 目的地執行個體。
ping -c 4destination-instance-private-ip您應該會在兩側看到 ping 回應。如果沒有,請確認您的安全群組允許執行個體之間的所有流量。
-
停用 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' -
在每個執行個體上設定主機名稱。Pacemaker 使用主機名稱來識別叢集執行個體。
在執行個體 1 上:
sudo hostnamectl set-hostname instance1在執行個體 2 上:
sudo hostnamectl set-hostname instance2 -
設定
/etc/hosts。在每個執行個體上,將私有 IP 和主機名稱對附加至/etc/hosts。這可讓執行個體透過主機名稱彼此解析。sudo tee -a /etc/hosts <<EOFinstance1-private-ipinstance1instance2-private-ipinstance2 EOF
建立 Pacemaker 叢集
-
在每個執行個體上啟動 pcs 協助程式。
sudo systemctl enable pcsd.service sudo systemctl start pcsd.service -
設定 hacluster 密碼。
hacluster使用者是當您安裝pcs套件時自動建立的系統帳戶。Pacemaker 使用此帳戶在執行個體之間進行叢集身分驗證。在每個執行個體上設定相同的密碼。sudo passwd hacluster -
授權 pcs 主機。互相授權叢集執行個體。在每個執行個體上執行此操作。
sudo pcs host auth instance1 instance2系統會提示您輸入
hacluster使用者名稱和密碼。 -
設定叢集。僅在一個執行個體上執行此命令。
--force旗標會銷毀裝置上的任何現有叢集。sudo pcs cluster setup my-gg-cluster instance1 instance2 --force -
啟動叢集。僅在一個執行個體上執行此命令。
sudo pcs cluster start --all sudo pcs cluster enable --all -
驗證任一執行個體上的叢集狀態。
sudo pcs status
設定 DRBD
DRBD
-
建立並連接 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-zoneinstance-availability-zone請注意輸出中的
VolumeId。 -
將磁碟區連接至執行個體。
aws ec2 attach-volume \ --volume-idvolume-id\ --instance-idinstance-id\ --device /dev/xvdbz為每個執行個體重複此步驟。
-
-
驗證磁碟區。SSH 至每個執行個體,並透過列出區塊型設備來確認磁碟區已連接。
lsblk在 Nitro 型執行個體類型上
t3.small,磁碟區會顯示為 NVMe 裝置 (例如/dev/nvme1n1),而非/dev/xvdbz。使用lsblk識別實際裝置名稱,並在 DRBD 組態中使用該名稱。 -
在每個執行個體上安裝 DRBD 公用程式。
sudo apt install -y drbd-utils -
設定 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; addressinstance1-private-ip:7788; meta-disk internal; } on instance2 { device /dev/drbd0; disk /dev/instance2-device-name; addressinstance2-private-ip:7788; meta-disk internal; } } -
建立並啟動 DRBD 資源。在兩個執行個體上執行 。
sudo drbdadm create-md greengrass sudo drbdadm up greengrass驗證您的
lsblkEBS 磁碟區裝置 (例如xvdbz或nvme1n1) 下drbd0顯示的 。 -
設定主要執行個體。僅在執行個體 1 上執行下列命令,以強制它成為主要命令並等待同步。
sudo drbdadm -- --overwrite-data-of-peer primary greengrass sudo drbdadm status等到兩個執行個體
UpToDate都顯示磁碟狀態。一旦同步,所有其他執行個體就會成為待命執行個體。 -
格式化和掛載 DRBD 裝置。
僅在主要執行個體上,格式化 DRBD 裝置:
sudo mkfs.ext4 /dev/drbd0在所有執行個體上,建立掛載目錄:
sudo mkdir -p /greengrass/v2僅在主要執行個體上,掛載 DRBD 裝置:
sudo mount /dev/drbd0 /greengrass/v2 -
驗證 DRBD 同步狀態。
sudo drbdadm status mount | grep 'drbd'