本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
先决条件和集群设置
在本节中,您将为高可用性教程设置基础架构。您可以创建安全组、创建密钥对、启动 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 控制台。 -
选择 Launch instances。
-
输入实例的名称(例如,
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
安装起搏器实用程序
通过 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 响应。如果不是,请验证您的安全组是否允许实例之间的所有流量。
-
禁用云初始化主机名管理。在 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用户是安装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-based 实例类型上
t3.small,卷显示为 NVMe 设备(例如/dev/nvme1n1),而不是。/dev/xvdbzlsblk用于识别实际的设备名称,并在 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使用您
lsblk的 EBS 音量设备下方drbd0显示的内容进行验证(例如,xvdbz或nvme1n1)。 -
设置主实例。仅在 instance1 上运行以下命令以强制其为主实例并等待同步。
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'