流程
老版本的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_