es+docker swarm es集群部署, es数据迁移

流程

老版本的elasticsearch 因为某些原因无法使用快照snapshot进行数据数据备份,然后在到新版进行恢复, 所以使用的策略是使用elasticsearch-dump工具(更慢)将数据导入本地单机的elasticsearch中, 导入完成后使用快照snapshot将数据备份到本地(snapshot恢复时数据更快). 随后将老版本es那几台服务器从ubuntu18升级到ubuntu20, 使用docker swarm 进行分布式部署. 部署完成后将本机备份的快照放到新版本elasticsearch的备份目录下进行数据恢复

https://zhoujinl.github.io/2018/10/19/docker-swarm-manager-ha/

https://www.cnblogs.com/guoxiangyue/p/12455972.html

https://ox0spy.github.io/post/elasticsearch/elasticsearch-snapshot-restore/

https://www.cnblogs.com/sanduzxcvbnm/p/12090809.html

docker swarm 安装和配置

  • 安装

    sudo apt install docker.io

  • 设置开机自启

    sudo systemctl enable --now docker

  • 启动docker

    sudo systemctl start docker

  • 添加组(不使用sudo运行docker)

    sudo usermod -aG docker \$username

  • 查看docker信息

    docker --version

  • 防止启动docker elasticsearch时jvm报错

    永久修改: echo vm.max_map_count=524288 >> /etc/sysctl.conf

    临时修改(重启失效):sudo sysctl :w-w vm.max_map_count=524288

    sysctl -p 使得配置生效

  • 添加docker的清华镜像

    echo "{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}" >> /etc/docker/daemon.json

  • pull必要镜像

    docker pull elasticsearch:7.6.2
    docker pull kibana:7.6.3

  • 初始化docker swarm

    docker swarm init(默认本台主机为manager, 集群leader)获得如下
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pThg44av-1591886970074)(pic/init.png)]

    在其他主机上使用docker swarm join --token token ip:port 加入docker swarm 集群中, 作为 worker

    • 将其他主机加入为 manager

      在manager主机上, 使用docker swarm join-token manager获取到加入集群manager的token
      格式相同只是token不同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yy79okm4-1591886970077)(pic/join_manager.png)]

  • 查看swarm中节点

    sudo docker node ls

文件目录配置

  • 将elasticsearch中需要映射出的文件进行本地创建, 并给予权限

    mkdir -m 777 -p /soft/elasticsearch/{data,logs,plugins}

    将elasticsearch映射的文件创建在根目录下, 防止误删

  • 挂载elasticsearch备份目录

    创建挂载目录:mkdir /mnt/es_backups

    挂载共享文件目录: sshfs -o allow_other {username}@{ip}:{path} /mnt/es_backups/

    elasticsearch 做数据快照,恢复时所用到的目录必须指向同一目录, 所以使用共享文件系统实现.-o allow_othoer其他用户也能访问挂载目录

  • 创建共享配置文件

    mkdir /mnt/es_backups/config/{master,node}

    为了方便管理配置文件,将所有eleaticsearch的配置文件,都写在共享文件系统中,


由于在每台机器上都需要进行以上操作,将以上写成脚本

#!/bin/bash

apt install docker.io sshfs -y && \
systemctl enable --now docker && \
systemctl start docker && \
echo "{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}" >> /etc/docker/daemon.json && \
sysctl -w vm.max_map_count=524288
sysctl -p
docker pull elasticsearch:7.6.2 && \
docker pull kibana:7.6.2 && \
mkdir -p /mnt/es_backups/config/{
   master,node} && \
mkdir -m 777 -p /soft/elasticsearch/{
   data,logs,plugins} && \
# 挂载目录
sshfs -o allow_other {
   远程文件系统} /mnt/es_backups/ && \
# 加入集群, 作为woker
docker swarm join --token {
   token} && \
echo "fish"

docker-compose 部署文件

https://docs.docker.com/compose/compose-file/

  • docker-swarm.yml 配置文件
version: '3.3'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:7.6.2
    environment:
      - ELASTICSEARCH_URL=http://es_master:9200
      - ELASTICSEARCH_HOSTS=http://es_master:9200
    ports:
      - 5601:5601
    networks:
      - elastic
    deploy:
      mode: replicated
      replicas: 1
      resources:
        limits:
          memory: 800M
      placement:
        constraints:
          - node.role==manager
  es_master:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    environment:
      - node.name=master
      - node.master=true
      - node.data=true
        #- bootstrap.memory_lock=true
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es_node
      - cluster.initial_master_nodes=es_master,es_node
      - network.host=0
      - network.publish_host=_eth0_
      
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值