:warning: 弃用通知 :warning:
此仓库已弃用,将于2024年5月17日存档
此仓库不再被积极维护,将于2024年5月17日存档。作为存档代码,它仅出于历史参考目的而保持公开可用。
对于AWS中可扩展存储的替代和完全托管的解决方案,您应考虑:
Amazon Elastic Block Store 自动扩展
这是一个守护进程的示例,它监控文件系统挂载点,并在可用空间低于配置的阈值时自动扩展。根据需要,新的Amazon EBS卷会被添加到实例,随着新设备的添加,底层文件系统(BTRFS或带有ext4的LVM)会扩展。
假设:
- 代码在AWS EC2实例上运行
- 实例和AMI使用HVM虚拟化
- 实例AMI允许像
/dev/xvdb*
这样的设备名,并且不会重新映射它们 - 实例使用基于Linux的操作系统,系统初始化使用upstart或systemd
- 实例有一个具有适当权限以创建和附加新EBS卷的IAM实例配置文件。有关更多详细信息,请参阅下面的IAM实例配置文件部分
- 实例上已安装以下先决条件:
- jq
- btrfs-progs
- lvm2
- unzip
此仓库提供:
- 一个脚本,用于创建新的EBS卷并将其附加到当前实例
- 一个守护进程脚本,用于监控磁盘空间并使用上述脚本根据需要添加EBS卷来扩展目标文件系统
- upstart和systemd的服务定义
- 服务和logrotate的配置文件
- 一个安装脚本,用于配置和安装上述所有内容
- 一个卸载脚本,用于移除服务守护进程,卸载文件系统,并分离和删除守护进程创建的任何ebs卷
- 一个示例cloud-init脚本,可用作EC2实例用户数据以进行自动安装
安装
设置实例的最简单方法是提供带有用户数据cloud-init脚本的启动调用。以下是在us-east-1中使用此文件启动Amazon ECS优化AMI的示例:
aws ec2 run-instances --image-id ami-5253c32d \
--key-name MyKeyPair \
--user-data file://./templates/cloud-init-userdata.yaml \
--count 1 \
--security-group-ids sg-123abc123 \
--instance-type t2.micro \
--iam-instance-profile Name=MyInstanceProfileWithProperPermissions
该脚本安装所需的包并运行初始化脚本。默认情况下,这会在加密的200GB gp3 EBS卷上创建一个/scratch
挂载点。要更改挂载点,请编辑cloud-init脚本文件,并根据您的特定需求为安装脚本提供其他选项。安装选项如下所示。
安装Amazon EBS自动扩展
install.sh [选项] [[-m] <挂载点>]
选项
-d, --initial-device 设备
用于挂载点的初始设备 - 例如 /dev/xvdba。
(默认: 无 - 自动创建并附加卷)
如果提供,则忽略 --initial-size。
-f, --file-system btrfs | lvm.ext4
要使用的文件系统(默认: btrfs)。
选项为btrfs或lvm.ext4
-h, --help
打印帮助并退出。
-m, --mountpoint 挂载点
自动扩展卷的挂载点(默认: /scratch)
-t, --volume-type 卷类型
卷类型(默认: gp3)
--volume-iops 卷IOPS
gp3、io1、io2的卷IOPS(默认: 3000)
--volume-throughput 卷吞吐量
gp3的卷吞吐量(默认: 125)
--min-ebs-volume-size 大小_GB
实例创建的新卷的最小大小(GB)。
(默认: 150)
--max-ebs-volume-size 大小_GB
实例创建的新卷的最大大小(GB)。
(默认: 1500)
--max-total-created-size 大小_GB
实例创建的所有卷的最大总大小(GB)。
(默认: 8000)
--max-attached-volumes N
最大附加卷数。(默认: 16)
--initial-utilization-threshold N
扩展的初始磁盘利用率阈值。(默认: 50)
-s, --initial-size 大小_GB
卷的初始大小(GB)。(默认: 200)
仅在未指定 --initial-device 时使用。
-i, --imdsv2
为实例元数据API请求启用imdsv2。
IAM实例配置文件说明
在上面的示例中,我们假设MyInstanceProfileWithProperPermissions
EC2实例配置文件存在并具有以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DescribeVolumeStatus",
"ec2:DescribeVolumes",
"ec2:DescribeTags",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeVolumeAttribute",
"ec2:CreateVolume",
"ec2:DeleteVolume",
"ec2:CreateTags"
],
"Resource": "*"
}
]
}
请注意,如果您启用EBS加密并使用AWS Key Management Service的客户管理密钥,那么您还应确保提供适当的IAM权限以使用该密钥。
实例存储说明
以下是利用实例存储的示例脚本。
## 检查实例存储
echo "-- 检查实例存储 --"
/opt/amazon-ebs-autoscale/instance_storage_checker.sh 2>&1 >> /var/log/ebs-autoscale-install.log
## 安装ebs-autoscale
echo "-- 安装EBS自动扩展器 --"
if [ -f instance_storage_device.txt ]; then
INSTANCE_STORAGE=$(cat instance_storage_device.txt)
/opt/amazon-ebs-autoscale/install.sh \
--initial-device $INSTANCE_STORAGE \
--initial-utilization-threshold 90 \
--mountpoint /var/lib/docker \
2>&1 >> /var/log/ebs-autoscale-install.log
else
/opt/amazon-ebs-autoscale/install.sh \
--mountpoint /var/lib/docker 2>&1 >> /var/log/ebs-autoscale-install.log
fi
许可摘要
此示例代码根据MIT许可证提供。