使用 Docker 的 ElasticSearch:如何使用 AWS 保存数据
ElasticSearch with Docker: how to persist data with AWS
我正在尝试 运行 Docker 上的 ElasticSearch(实际上是在 AWS ECS 上)。如果我没有配置卷,它会正常工作,但每次我重新启动容器时,我都会丢失所有数据。
我不知道如何配置音量。
我试过的:
- 在任务定义中我配置了音量 "Name=esdata1" 和 "source path=/usr/share/elasticsearch/data"
- 在 "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。听起来你这里的设置不是很稳健。
我正在尝试 运行 Docker 上的 ElasticSearch(实际上是在 AWS ECS 上)。如果我没有配置卷,它会正常工作,但每次我重新启动容器时,我都会丢失所有数据。 我不知道如何配置音量。
我试过的:
- 在任务定义中我配置了音量 "Name=esdata1" 和 "source path=/usr/share/elasticsearch/data"
- 在 "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。听起来你这里的设置不是很稳健。