前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【操作实践】使用JuiceFS降低Elasticsearch存储成本

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

作者头像
用户5252199
发布2022-11-22 10:19:04
7690
发布2022-11-22 10:19:04
举报
文章被收录于专栏:大数据技术博文

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

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

一. JuiceFS 安装部署&测试

Juice 安装包下载

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

代码语言:javascript
复制
wget "https://github.com/juicedata/juicefs/releases/download/v1.0.0/juicefs-1.0.0-linux-amd64.tar.gz"

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

代码语言:javascript
复制
tar -zxvf juicefs-1.0.0-linux-amd64.tar.gz

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

代码语言:javascript
复制
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
复制
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
复制
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
复制
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
复制
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
复制
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
复制
mv es_data/ /data1/warm-1/
ln -s /data1/warm-1/es_data es_data

其它的冷数据节点同理

启动elasticsearch 服务

代码语言:javascript
复制
./elasticsearch -d

查看集群冷热节点

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

代码语言:javascript
复制
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
复制
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
复制
PUT log-000001
{
"aliases": {
"log":{
"is_write_index": true
        }
     }
}

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. JuiceFS 安装部署&测试
    • Juice 安装包下载
      • 二. 元数据存储数据库准备
        • 四. 挂载文件系统
        • 五. Elasticsearch 集群操作
          • 配置warm节点
            • 修改elasticsearch es_data目录
              • 查看集群冷热节点
                • 配置索引生命周期(ILM)
                  • 创建索引模版,指定ILM策略
                    • 创建索引
                    相关产品与服务
                    对象存储
                    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档