使用 Docker 的 ElasticSearch:如何使用 AWS 保存数据

ElasticSearch with Docker: how to persist data with AWS

我正在尝试 运行 Docker 上的 ElasticSearch(实际上是在 AWS ECS 上)。如果我没有配置卷,它会正常工作,但每次我重新启动容器时,我都会丢失所有数据。 我不知道如何配置音量。

我试过的:

  1. 在任务定义中我配置了音量 "Name=esdata1" 和 "source path=/usr/share/elasticsearch/data"
  2. 在 "storage and logging" 部分的容器定义中,我配置了挂载点 "source volume= esdata1" 和 "container path=/usr/share/elasticsearch/data"

现在,当我启动容器时,当 elasticsearch 尝试写入“/usr/share/elasticsearch/data”时,它会失败并显示错误 "access denied"。因此,在安全部分中,我配置了 "user=ec2-user",但容器甚至不会启动(留在 "status=created")。我应该怎么办?我想这个问题是由于容器的用户必须与主机上的用户相同。主机上的用户是"ec2-user",我不知道如何进行。

编辑:

我现在可以使用此配置保存数据:

docker inspect:

"Mounts": [
            {
                "Name": "elasticsearch_data",
                "Source": "/var/lib/docker/volumes/elasticsearch_data/_data",
                "Destination": "/usr/share/elasticsearch/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]

现在,如果我停止容器或重新启动主机,数据仍然存在。我唯一担心的是这个文件夹“/var/lib/docker/volumes/elasticsearch_data/_data”位于 OS 卷上,而不是更大的 docker 卷上。来自 Aws doc:

Amazon ECS-optimized AMIs from version 2015.09.d and later launch with an 8 GiB volume for the operating system that is attached at /dev/xvda and mounted as the root of the file system. There is an additional 22 GiB volume that is attached at /dev/xvdcz that Docker uses for image and metadata storage. The volume is configured as a Logical Volume Management (LVM) device and it is accessed directly by Docker via the devicemapper back end.

如何在 /dev/xvdcz 上保存数据?

非常感谢

您的源路径是写入数据的主机实例上的路径。在你的情况下 elasticsearch_data。您需要将 sourcepath 指向一个存在的文件夹,该文件夹位于 EC2 实例所需的磁盘上。

因此将 EBS 磁盘附加到实例。将磁盘安装在 /data/es 之类的位置并将源路径设置为该文件夹。

但请记住,要正确 运行 ES,您可能需要一组连接的机器和自动备份。如果您计划托管关键数据,请考虑使用 Amazon 的托管 ES。听起来你这里的设置不是很稳健。