Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【操作实践】使用JuiceFS降低Elasticsearch存储成本

【操作实践】使用JuiceFS降低Elasticsearch存储成本

作者头像
用户5252199
发布于 2022-11-22 02:19:04
发布于 2022-11-22 02:19:04
84900
代码可运行
举报
运行总次数:0
代码可运行

本文更偏向于实践操作方向,主要介绍在部署和使用JuiceFS时候的过程记录,以及如何将JuiceFS作为Elasticsearch的冷存储介质。

JuiceFS 是一款面向云原生设计的高性能共享文件系统,在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写

一. JuiceFS 安装部署&测试

Juice 安装包下载

这里下载的为近期刚发布的V1.0.0稳定版。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget "https://github.com/juicedata/juicefs/releases/download/v1.0.0/juicefs-1.0.0-linux-amd64.tar.gz"

解压缩并将执行文件分发到所有节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -zxvf juicefs-1.0.0-linux-amd64.tar.gz

将客户端安装到所有节点的系统环境中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo install juicefs /usr/local/bin
ansible host -m copy -a "src=/root/juicefs dest=/usr/local/bin"
ansible host -m shell -a "chmod +x /usr/local/bin/juicefs"

二. 元数据存储数据库准备

这里我们使用RDS作为JuiceFS的元数据存储,更多的其它元数据存储引擎可以参考:如何设置元数据引擎 | JuiceFS Document Center

三. 创建文件系统

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
juicefs format \
--storage ks3 \
--bucket https://elasticsearch-juicefs-vol.xxxxx.xxxxx.xxx.com \
--access-key  ${access-key}\--secret-key ${secret-key} \ 
"mysql://juicefs:Iic^xxxxxxx2TR@(172.1.1.66:8988)/juicefs" \ 
elastic-cluster 
2022/08/15 08:56:09.632512 juicefs[9051] <INFO>: Meta address: mysql://juicefs:****@(172.1.1.xx:8988)/juicefs [interface.go:402]
2022/08/15 08:56:09.636482 juicefs[9051] <INFO>: Data use s3://elasticsearch-juicefs-vol/elastic-cluster/ [format.go:435]
2022/08/15 08:56:10.169479 juicefs[9051] <INFO>: Volume is formatted as {"Name": "elastic-cluster","UUID": "71a64ddd3afc-4eb8-a64e-e80ff0cab4db","Storage": "s3",  "Bucket": "https://elasticsearch-juicefs.xxxxx.xxx.com",  "AccessKey": "xxxxxxxxxx","SecretKey": "removed","BlockSize": 4096,"Compression": "none","KeyEncrypted": true,"TrashDays": 1,"MetaVersion": 1} [format.go:472]

文件系统一经创建,相关的信息包括名称、对象存储、访问密钥等信息会完整的记录到数据库中。在当前的示例中,文件系统的信息被记录在 Redis 数据库中,因此在任何一台计算机上,只要拥有数据库地址、用户名和密码信息,就可以挂载读写该文件系统 --- from juicefs doc

四. 挂载文件系统

由于这个文件系统的「数据」和「元数据」都存储在基于网络的云服务中,因此在任何安装了 JuiceFS 客户端的计算机上都可以同时挂载该文件系统进行共享读写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
juicefs mount \    
--background \    
--cache-dir /mnt/cache \    
--cache-size 512000 \    
"mysql://juicefs:Iic^%xxxxx2TR@(172.1.1.xx:8988)/juicefs" \   
 /data1

数据缓存可以有效地提高随机读的性能,对于像 Elasticsearch、ClickHouse 等对随机读性能要求更高的应用,建议将缓存路径设置在速度更快的存储介质上并分配更大的缓存空间。

查看juicefs 是否已经挂载磁盘目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 7.8G     0  7.8G    0% /dev
tmpfs                    7.8G   16K  7.8G    1% /dev/shm
tmpfs                    7.8G   17M  7.8G    1% /run
tmpfs                    7.8G     0  7.8G    0% /sys/fs/cgroup
/dev/vda1                 19G  5.2G   13G   30% /
/dev/vdb                 1.8T  121M  1.8T    1% /mnt
tmpfs                    1.6G     0  1.6G    0% /run/user/1001
tmpfs                    1.6G     0  1.6G    0% /run/user/1002
tmpfs                    1.6G     0  1.6G    0% /run/user/0
JuiceFS:elastic-cluster  1.0P     0  1.0P    0% /data1

五. Elasticsearch 集群操作

配置warm节点

这里一共有5个es索引节点,分别为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /etc/hosts
172.1.0.xx es-data-1
172.1.0.7  es-data-2
172.1.0.9  es-data-3
172.1.0.71 es-data-4
172.1.0.11 es-data-5

将data-4,data-5 配置为warm节点,并将es数据写入路径设置为juicefs的盘

修改elasticsearch.yml 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/config/elasticsearch/elasticsearch.yml

需要修改如下两个地址:

  • node.attr.box_type: hot 修改为 :node.attr.box_type: warm

修改elasticsearch es_data目录

将Elasticsearch的数据存储目录软链到JuiceFS的盘目录中,

首先将es_data 目录mv到/data1/warm-1/ 中,然后将es_data的地址软链到/data1/warm-1中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mv es_data/ /data1/warm-1/
ln -s /data1/warm-1/es_data es_data

其它的冷数据节点同理

启动elasticsearch 服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./elasticsearch -d

查看集群冷热节点

这里在Kibana中直接输入命令 (如果是调用ES API则 在前面加上 curl -sL http://localhost:9200/cat/nodeattrs?v&h=host,attr,value

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET _cat/nodeattrs?v&h=host,attr,valuehost        attr              value172.1.0.9  ml.machine_memory 16656543744172.1.0.9  ml.max_open_jobs  20172.1.0.9  xpack.installed   true172.1.0.9  box_type          hot172.1.0.9  ip                172.1.0.9172.1.0.7  ml.machine_memory 16656551936172.1.0.7  ml.max_open_jobs  20172.1.0.7  xpack.installed   true172.1.0.7  box_type          warm172.1.0.7  ip                172.1.0.7172.1.0.171 ml.machine_memory 16656551936172.1.0.171 ml.max_open_jobs  20172.1.0.171 xpack.installed   true172.1.0.171 box_type          warm172.1.0.171 ip                172.1.0.171172.1.0.47  ml.machine_memory 16656551936172.1.0.47  ml.max_open_jobs  20172.1.0.47  xpack.installed   true172.1.0.47  box_type          hot172.1.0.47  ip                172.1.0.47172.1.0.214 ml.machine_memory 16656551936172.1.0.214 ml.max_open_jobs  20172.1.0.214 xpack.installed   true172.1.0.214 box_type          hot172.1.0.214 ip                172.1.0.214

配置索引生命周期(ILM)

这里设定的条件如下:

  1. 每天进行索引切换,索引切换之后新的索引在Hot节点,老索引Move到Warm节点中。
  2. 当索引大小达到了50G时,进行索引切换

创建索引模版,指定ILM策略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT _template/log_template{  "index_patterns" : ["log-*"],"settings": {"index.number_of_shards": 5,"index.number_of_replicas": 1,"index.routing.allocation.require.box_type":"hot","index.lifecycle.name": "juicefs-policy",  "index.lifecycle.rollover_alias": "log"  }}

创建索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT log-000001
{
"aliases": {
"log":{
"is_write_index": true
        }
     }
}

至此,所有以log开头的索引,都会被应用ILM的策略,进行定期的冷数据存储,当然,为了更灵活的进行索引转存,我们也可以选择自己调用ES的API来进行设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -H 'Content-Type: application/json' -XPUT "127.0.0.1:9200/log-indices/_settings"  -d '{
  "index": {
    "routing": {
      "allocation": {
        "require": {
          "box_type": "warm"
        }
      }
    }
  }
}'
}

使用效果:

在使用Juicefs之前,我们线上集群全部使用的 SSD云硬盘,单个集群存储大小在100TB+,存储成本大约在0.8元/月/G(按照云厂商官网标准价格计算),整体算下来大概是5万左右的成本。

在使用JuiceFS之后,我们将一部分数据(取决于我们自身索引策略),迁移到了对象存储中,这部分的存储成本大约是0.12/月/1G(按照官网标准价格计算)

关于本文的一些核心知识点,可以自行网络搜索补充,或者后台留言回复,主要包括:

ES生命周期管理、JuiceFS的核心原理、ES索引管理、对象存储、云上部署等。这些知识点如果读者不明白的话,可以在下方留言回复哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术博文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Elasticsearch探索:实现数据自动冷热分离
在基于时序数据中,我们总是关心最近产生的数据,例如查询订单通常只会查询最近三天,至多到最近一个月的,查询日志也是同样的情形,很少会去查询历史数据,也就是说类似的时序数据随着时间推移,价值在逐渐弱化。在es中经常按日或按月建立索引,我们很容易想到,历史索引被查询命中的概率越来越低,不应该占用高性能的机器资源(比如大内存,SSD),可以将其迁移到低配置的机器上,从而实现冷热数据分离存储。
HLee
2021/01/11
2.5K0
Elasticsearch探索:实现数据自动冷热分离
ES集群分片无法迁移,手动move仍然报错怎么办?
一、先看两个报错{ "status":400, "body":{ "error":{ "root_cause":[ { "type":"illegal_argument_exception", "reason":"[move_allocation] can't move 0, from {1667208150001223332}{jQ6N4UQGT1qh5
WeldonWang
2023/03/09
1.5K0
Elasticsearch索引分片损坏该怎么办?(三)
本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
岳涛
2021/10/11
3.3K0
Elasticsearch索引分片损坏该怎么办?(三)
「ES 排障指南」之 Elasticsearch 集群异常状态分析 —— 集群 YELLOW
本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
岳涛
2023/11/16
6.1K72
「ES 排障指南」之 Elasticsearch 集群异常状态分析 —— 集群 YELLOW
Elasticsearch索引分片损坏该怎么办?
那么这种情况发生的原因是什么呢?我们要知道,索引分片是不可能无故发生损坏的,分片所在的节点一定发生过异常。
周银辉
2024/08/27
4640
Elasticsearch索引分片损坏该怎么办?(一)
本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
岳涛
2021/09/30
5.1K2
Elasticsearch索引分片损坏该怎么办?(一)
【ES三周年】一次 Elasticsearch 集群重启引发的灾难
目前我们生产环境自建了一套 ELK 日志数据采集展示平台。平台采集了应用日志数据、模块调用链数据,部分组件监控数据,并通过 kibana 创建视图看板,监控线上应用状态。生产部署架构如下,其中 ES 集群由双机房 6 台物理机节点组成。这里需要使用自签名的 SSL 证书对集群数据加固,证书 host 与 IP 绑定,就没有部署单机多实例。
leon 橙
2022/12/19
6.2K2
腾讯云Elasticsearch集群运维常用命令详解二(节点篇)
在腾讯云Elasticsearch集群运维常用命令详解一(集群篇)中,我们详细介绍了集群层面的几个常用的运维命令。在本篇中,我们将从节点维度出发,向大家详细介绍节点相关的常用命令。
吴容
2021/12/19
2K0
腾讯云Elasticsearch集群运维常用命令详解二(节点篇)
Elasticsearch API汇总
描述:health是一个简洁的,一行表示了来自/_cluster/health的相同的信息。
HLee
2020/12/28
1.2K0
Elasticsearch API汇总
elasticsearch查询某个索引分片信息
http://xx.xx.xx.xx:9200/索引名称/_search_shards
johnhuster的分享
2022/03/28
2.3K0
ElasticSearch(7.2.2)-es⽂档的路由原理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/04
4680
docker下迁移elasticsearch的问题与解决方案
​ 1. 节点锁文件丢失:/usr/share/elasticsearch/data/nodes/0/node.lock 文件不存在。可能是因为文件未被正确创建,或者数据目录的权限不足,导致 Elasticsearch 无法写入。
一只牛博
2025/05/31
1670
docker下迁移elasticsearch的问题与解决方案
Linux环境快速搭建elasticsearch6.5.4集群和Head插件
今天来一起实战Linux环境下搭建elasticsearch6.5.4集群和Head插件;
程序员欣宸
2019/05/29
1.3K0
Linux环境快速搭建elasticsearch6.5.4集群和Head插件
elasticsearch集群健康状态解析与高频异常场景分析
elasticsearch集群的健康状态是通过监控和评估集群中的主分片和副本分片的分配情况来确定的。通过查看健康状态能够直观的获取出集群当前的运行状态,分片状态等信息。
空洞的盒子
2023/11/07
4K5
白话Elasticsearch30-IK中文分词之热更新IK词库
白话Elasticsearch28-IK中文分词器的安装和使用 白话Elasticsearch29-IK分词器配置文件+自定义词库
小小工匠
2021/08/17
9430
腾讯云Elasticsearch集群运维常用命令详解一(集群篇)
腾讯云Elasticsearch Service产品提供了一种全托管的云端服务,客户可以在腾讯云控制台一键创建集群、轻松管理集群,以及高度灵活的弹性变配模式。因此,使用腾讯云ES,您可以快速部署、按需扩展您的集群,简化复杂运维工作,快速构建日志分析、异常监控、网站搜索、企业搜索、BI分析等各类业务。同时腾讯云ES团队也提供了高度专业的平台管控、内核开发及集群运维能力。本文将从集群运维角度出发,分享我们日常工作中帮客户运维集群时常用到的一些命令,以及各命令适用的场景。
吴容
2021/12/05
5.1K0
腾讯云Elasticsearch集群运维常用命令详解一(集群篇)
TBDS-Elasticsearch安全认证配置方法
ES高版本已经支持x-pack认证,TBDS的ES版本是6.4.2,默认已经安装了x-pack,下面是配置方法。
袁宋
2020/12/18
3.1K0
ElasticSearch集群搭建图文解析
ElasticSearch作为一个分布式搜索引擎有着广泛的应用场景, 而搜索服务在在一个项目中的权重还是比较高的, 所以我们要想办法去提高搜索服务的可用性, 这就是ElasticSearch集群的作用, 为搜索服务提供高可用的特性
全栈程序员站长
2022/11/08
6450
ElasticSearch集群搭建图文解析
如何用shrink与rolloverAPI管理您的ES索引?
众所周知,Elasticsearch的分片数是固定的,从确定下来就不可以改变了(除非reindex),但是在一些场景,比如存储 metric 的 TSDB、小数据量的日志存储,人们会期望在多分片快速写入数据以后,把老数据合并存储,节约过多的 cluster state 容量。从 5.0 版本开始,Elasticsearch 新提供了 shrink 接口,可以成倍数的合并分片数。至于rollover也是ES5.0后的一个重要功能,这个功能可以说取代了curator,实现了ES本身的生命周期管理。今天我们就好好讲讲这两个重要功能。
雨夜v1
2021/07/12
1.2K0
如何用shrink与rolloverAPI管理您的ES索引?
分片恢复达到最大重试次数
通过执行 GET /_cluster/allocation/explain 查看当前索引分配详情
用户7442844
2023/07/19
6610
推荐阅读
相关推荐
Elasticsearch探索:实现数据自动冷热分离
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验