我不知道AWS如何在ElasticBeanstalk上设置他们的码头“瘦池”,以及它是如何被填满的。我的码头薄池不知何故正在填满,并导致我的应用程序崩溃时,他们试图写到磁盘。
这是从容器内部:
>df -h
> /dev/xvda1 25G 1.4G 24G 6%实际上,EBS有一个25 gb的磁盘分配给它;1.6GB是du -sh /返回的。
在外面的EC2,它开始的很天真.(通过lvs)
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
docker-pool docker twi-aot--- 11.86g 37.50 14.65但是,文件系统将很快重新装入只读文件系统。通过dmesg:
[2077620.433382] Buffer I/O error on device dm-4, logical block 2501385
[2077620.437372] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 0 size 8388608 starting block 2501632)
[2077620.444394] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error [2077620.473581] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 8388608 size 5840896 starting block 2502912)
[2077623.814437] Aborting journal on device dm-4-8.
[2077649.052965] EXT4-fs error (device dm-4): ext4_journal_check_start:56: Detected aborted journal
[2077649.058116] EXT4-fs (dm-4): Remounting filesystem read-only退到EC2实例-land中,Docker报告如下:(来自docker info)
Pool Name: docker-docker--pool
Pool Blocksize: 524.3 kB
Base Device Size: 107.4 GB
Backing Filesystem: ext4
Data file:
Metadata file:
Data Space Used: 12.73 GB
Data Space Total: 12.73 GB
Data Space Available: 0 B
Metadata Space Used: 3.015 MB
Metadata Space Total: 16.78 MB
Metadata Space Available: 13.76 MB
Thin Pool Minimum Free Space: 1.273 GBLVS转储此信息:
--- Logical volume ---
LV Name docker-pool
VG Name docker
LV UUID xxxxxxxxxxxxxxxxxxxxxxxxxxxx
LV Write Access read/write
LV Creation host, time ip-10-0-0-65, 2017-03-25 22:37:38 +0000
LV Pool metadata docker-pool_tmeta
LV Pool data docker-pool_tdata
LV Status available
# open 2
LV Size 11.86 GiB
Allocated pool data 100.00%
Allocated metadata 17.77%
Current LE 3036
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2这个薄薄的水池是什么,为什么它会被填满,我如何阻止它这样做呢?另外,如果我在/卷的容器中释放了20+ GB,为什么它会停止新的写入呢?据我所知,它没有连接到我的程序正在写入的文件。
谢谢!
发布于 2018-02-22 02:58:04
大卫·埃利斯推荐的.ebextensions为我工作。我无法对他的回答发表评论,但我想补充的是,您可以创建一个新的EBS卷,而不是使用快照。要挂载一个40 EBS的EBS卷,我使用了以下内容:
option_settings:
- namespace: aws:autoscaling:launchconfiguration
option_name: BlockDeviceMappings
value: /dev/xvdcz=:40:true还请参阅这份文件,它有一个将新的100 to卷映射到/dev/sdh的示例。
结尾处的true表示“在终止时删除”。
我创建了一个新的.ebextensions目录,其中包含一个带有上述代码的ebs.config文件,然后将该目录与我的Dockerrun.aws.json一起压缩。注意,Dockerrun文件必须位于zip的顶层,而不是子目录中。
要查找ElasticBean秸秆安装卷的位置,请在失败实例上使用lsblk。这对我来说也是/dev/xvdcz,所以这也许是标准。
发布于 2018-11-08 13:55:45
我遵循了关于AWS文档的建议,现在一切都正常了。
但我必须结合两种解决方案:增加空间和添加cronjob以删除旧文件。
我就是这么做的。
首先,我将卷xvdcz更改为使用50 of而不是12 of。这就是我们可以在docker system info上看到的存储空间。在我的例子中,它总是满的,因为我每天上传很多文件。
option_settings:
aws:autoscaling:launchconfiguration:
BlockDeviceMappings: /dev/xvdcz=:50:true在我添加了一个cron作业来清理已删除的不再使用的文件之后。这是必要的,因为码头工人仍然因为某种原因而保留着它们。对我来说,一天一次就够了。如果您有比我更多的上传,您可以配置cronjob来运行您需要的次数。
files:
"/etc/cron.d/mycron":
mode: "000644"
owner: root
group: root
content: |
0 23 * * * root /usr/local/bin/remove_old_files.sh
"/usr/local/bin/remove_old_files.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ sudo fstrim /proc/Z/root/
exit 0
commands:
remove_old_cron:
command: "rm -f /etc/cron.d/*.bak"来源:https://docs.aws.amazon.com/pt_br/弹性豆秆/最新/dg/创建_部署_docker#docker-卷
发布于 2018-07-27 00:35:45
AWS弹性豆柄码头部分环境配置记录了它的工作方式:
为了提高性能,ElasticBean秸秆为Docker环境的EC2实例配置了两个Amazon存储卷。除了为所有弹性Bean秸秆环境提供的根卷之外,还为Docker环境上的图像存储提供了第二个12 is的卷xvdcz。如果您需要更多的存储空间或增加Docker映像的IOPS,可以使用aws:autoscaling:launchconfiguration命名空间中的BlockDeviceMapping配置选项来自定义映像存储卷。例如,下面的配置文件将存储卷的大小增加到100 GB,并配置了500个配置IOPS:示例.eb扩展名/块设备-xvdcz.config
option_settings:
aws:autoscaling:launchconfiguration:
BlockDeviceMappings: /dev/xvdcz=:100::io1:500如果使用BlockDeviceMappings选项为应用程序配置附加卷,则应包括xvdcz的映射,以确保创建它。下面的示例配置两个卷:具有默认设置的映像存储卷xvdcz和另一个名为sdh的24 GB应用程序卷:示例.eb扩展名/块设备-sdh.config
option_settings:
aws:autoscaling:launchconfiguration:
BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24https://serverfault.com/questions/840937
复制相似问题