记录一次使用腾讯COS快照方式迁移Elasticsearch集群数据到单体服务器的过程
前两天刚刚迁移了公司的ES集群数据到一个单体服务器上,起因是集群的使用期限就在上月底。由于时间紧迫,只有两三天的时间,期间我也是碰到非常多的问题。本着这么些坑不想再淌第二遍的想法,顺便写下整个迁移流程。
迁移方案使用的是snapshot快照,存储在腾讯cos上,如果没有cos的话,可以参考其他方式,比如nfs。
单体服务器部署es数据库
首先,在新的服务器上先部署好es, 我这里的服务器是centos,直接到es官网跟随教程下载安装, 下载与安装网址
注意版本号,尽量与原es集群的es版本一致。我这里集群的版本号是7.6.1,所以在单体服务器这手动改成相同版本的。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.6.1-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-7.6.1-linux-x86_64.tar.gz
cd elasticsearch-7.6.1/
安装后如下图,这里要注意尽量不要装在root目录下,因为elasticsearch不让用root用户启动,所以我们要创建专有用户来启动elasticsearch,此处我选择把es安装在quake这个用户目录下
修改配置文件:vi elasticsearch-7.6.1/config/elasticsearch.yml
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: quake-es
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: es1
node.master: true
node.data: true
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data
#
# Path to log files:
#
#path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# ES的监听地址,这里填本机的内网ip
network.host: 172.17.16.12
#
# Set a custom port for HTTP:
#
transport.tcp.port: 9300
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
# 集群初始化主节点填上面写好的node名称
cluster.initial_master_nodes: ["es1"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 解决跨域访问问题
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
进入elasticsearch-7.6.1的二进制文件文件夹bin 我们直接执行elasticsearch,看看会发生什么
出现两个问题:
1、Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
解决方法:修改jvm.options文件,使用find / -name jvm.options 查找到该文件后对其修改 将-XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC
2、java.lang.RuntimeException: can not run elasticsearch as root
解决方法:创建用户组和用户
groupadd quake
useradd quake -g quake
更改 elasticsearch-7.6.1 文件夹及内部文件的所属用户及组为quake
chown -R quake:quake elasticsearch-7.6.2
切换用户并启动 elasticsearch
su quake
cd /home/quake/elasticsearch-7.6.1/elasticsearch-7.6.1/bin/
./elasticsearch
./elasticsearch -d # 后台方式启动
启动成功
这里有的小伙伴可能会报jdk版本要求是11的问题,可以直接参考这篇文章,安装jdk11和设置环境变量 jdk问题
迁移数据
这里使用腾讯的对象存储服务存储es快照,跟随腾讯云的这篇教程即可 COS快照。
需要注意的是,源ES集群和目标ES集群的每个节点都要安装cos-repository这个插件,且版本号尽量和es的版本号一致。 安装完插件后,记得重启一下节点,这样才能生效。
可以使用postman或者curl命令行查看插件是否安装上了
所有的相关节点都安装好插件后,就可以开始创建数据迁移了
创建存储桶
创建一个bucket
在该bucket下创建一个路径
创建repository仓库
执行成功的话,会出现下面的结果
{
"acknowledged": true
}
这里源ES集群和目的ES集群都要创建仓库,而且bucket要是同一个,因为源ES的快照就存放在这个bucket上,那么目的ES只要从这个bucket上拿数据就行了。
备份snapshot
上图es_snapshot是自定义的快照的名称 执行成功的话,会出现下面的结果
{
"accepted": true
}
该命令是异步执行的,即执行完该命令后立马返回,可以使用下面的命令来查看快照的状态:
上图是已经备份完成的结果,正常来说备份需要几分钟甚至更多的时间,那么state应该显示的是IN_PROCESS表示还在执行中。
目的ES创建仓库
还记得上面说的目的ES也要创建仓库吗,和第三步一样,只不过ip和端口改成目的ES的,参数不用变。
从快照恢复数据
验证
查看目的ES的所有索引状态和数量 至此数据迁移成功
引用文章:
future versions of Elasticsearch will require Java 11; your Java version from
转载自:https://juejin.cn/post/7216707319643045946