您当前的位置: 首页 >  ar

zmc@

暂无认证

  • 5浏览

    0关注

    142博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Elasticsearch8.2 使用snapshot备份能力

zmc@ 发布时间:2022-06-25 11:32:44 ,浏览量:5

背景

1.有个向量搜索相关需求,选择使用ES8版本,并且在k8s环境中容器化部署;

2.考虑核心程度以及成本问题,不需要准备多数据中心的备份集群,为了保证数据可靠性,预期使用snapshot备份能力;

选型

ES支持将snapshot存储到各种存储产品,例如 fs(本地)、S3(或者ceph)、hdfs等。

1.OSS,考虑到已经和阿里云OSS有合作,且支持S3接口 -----> 测试

2.ceph,私有云部署,不好控制容量,成本偏高 --------> 暂不考虑

3.hdfs,私有云部署,不好控制容量,成本偏高,需要安装插件 -----> 暂不考虑

4.fs,本地,由于团队还在做juicefs产品,可以juicefs挂载到本地目录,ES snapshot 存到本地目录即可完成上传到公有云OSS ------> 测试

snapshot直接从ES传到OSS 1.创建账号、bucket,获取ak/sk;

2.ES容器实例如何加载密钥库

通过官方文档可知需要执行如下命令:将密钥设置到ES密钥库

S3 repository | Elasticsearch Guide [8.2] | Elastic

bin/elasticsearch-keystore add s3.client.default.access_key
bin/elasticsearch-keystore add s3.client.default.secret_key

考虑到容器环境不允许直接进入pod执行命令,secret也不允许直接写死到镜像中,则需要在entrypoint.sh中设置完成该命令。

最终方案如下:

1.在k8s环境中创建secret,记录ak/sk信息

2.pod创建时候mount到指定目录

3.container(ES)启动的时候读取指定目录信息,并执行elasticsearch-keystore命令

3.具体操作

0.安装 repository-s3 插件

略(ES8版本内置了该插件,无需安装)

1.创建secret

kubectl apply -f secret.yml

# cat secret.yml
apiVersion: v1
kind: Secret
metadata:
  namespace: uat-es
  name: es-snapshot-oss-secret
type: Opaque
data:
  access_key: xxx(注意base64编码)
  secret_key: xxx(注意base64编码)

2.修改crd的yaml,将该secret mount到指定目录

# 定义secret
  volumes:  
  - name: "oss-secret"
    secret: 
      secretName: "es-snapshot-oss-secret"
      
# 指定容器挂载选项
containers:
    ...
  volumeMounts:
  - mountPath: "/mnt/secret/oss"
    name: "oss-secret"
    readOnly: true

3.镜像修改

注:Dockerfile中最后是通过docker-entrypoint.sh完成ES实例的启动

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

# docker-entrypoint.sh 增加如下内容

/usr/share/elasticsearch/bin/elasticsearch-keystore create
chown root:root /usr/share/elasticsearch/config/elasticsearch.keystore
echo "$(            
关注
打赏
1643271353
查看更多评论
立即登录/注册

微信扫码登录

0.2854s