首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS ElasticBeanstalk码头-瘦池变得满,并导致文件系统重新挂载为只读?

AWS ElasticBeanstalk码头-瘦池变得满,并导致文件系统重新挂载为只读?
EN

Server Fault用户
提问于 2017-03-28 01:22:51
回答 5查看 5.2K关注 0票数 13

我不知道AWS如何在ElasticBeanstalk上设置他们的码头“瘦池”,以及它是如何被填满的。我的码头薄池不知何故正在填满,并导致我的应用程序崩溃时,他们试图写到磁盘。

这是从容器内部:

代码语言:javascript
复制
>df -h
>     /dev/xvda1                  25G  1.4G   24G   6%

实际上,EBS有一个25 gb的磁盘分配给它;1.6GB是du -sh /返回的。

在外面的EC2,它开始的很天真.(通过lvs)

代码语言:javascript
复制
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:

代码语言:javascript
复制
[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)

代码语言:javascript
复制
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 GB

LVS转储此信息:

代码语言:javascript
复制
  --- 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,为什么它会停止新的写入呢?据我所知,它没有连接到我的程序正在写入的文件。

谢谢!

EN

回答 5

Server Fault用户

发布于 2018-02-22 02:58:04

大卫·埃利斯推荐的.ebextensions为我工作。我无法对他的回答发表评论,但我想补充的是,您可以创建一个新的EBS卷,而不是使用快照。要挂载一个40 EBS的EBS卷,我使用了以下内容:

代码语言:javascript
复制
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,所以这也许是标准。

票数 9
EN

Server Fault用户

发布于 2018-11-08 13:55:45

我遵循了关于AWS文档的建议,现在一切都正常了。

但我必须结合两种解决方案:增加空间和添加cronjob以删除旧文件。

我就是这么做的。

首先,我将卷xvdcz更改为使用50 of而不是12 of。这就是我们可以在docker system info上看到的存储空间。在我的例子中,它总是满的,因为我每天上传很多文件。

.ebextensions/blockdevice-xvdcz.config

代码语言:javascript
复制
option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:50:true

在我添加了一个cron作业来清理已删除的不再使用的文件之后。这是必要的,因为码头工人仍然因为某种原因而保留着它们。对我来说,一天一次就够了。如果您有比我更多的上传,您可以配置cronjob来运行您需要的次数。

.ebextensions/cronjob.config

代码语言:javascript
复制
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-卷

票数 3
EN

Server Fault用户

发布于 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

代码语言:javascript
复制
option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:100::io1:500

如果使用BlockDeviceMappings选项为应用程序配置附加卷,则应包括xvdcz的映射,以确保创建它。下面的示例配置两个卷:具有默认设置的映像存储卷xvdcz和另一个名为sdh的24 GB应用程序卷:示例.eb扩展名/块设备-sdh.config

代码语言:javascript
复制
option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/840937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档