ES 8.x迁移升级
一、Elasticsearch从8.8升级到8.17方案
迁移 Elasticsearch 服务器并同时从 8.8 升级到 8.17 的过程可以分为几个步骤。
1. 备份数据
在迁移和升级之前,确保对 Elasticsearch 数据进行完整备份。可以使用快照功能来备份数据:
调整配置文件 elasticsearch.yml ,配置快照仓库
path.repo: ["/data/backups/es_backup"]
修改快照仓库权限(旧用户为es)
sudo chown -R es:es /data/backups/es_backup
sudo chmod -R 750 /data/backups/es_backup
创建快照库
curl -X PUT 'http://localhost:9200/_snapshot/old_backup' -H "Content-Type: application/json" -d '
{
"type": "fs",
"settings":
{
"location": "/data/backups/es_backup"
}
}';
确保快照仓库目录为空
保存快照
curl -X PUT 'http://localhost:9200/_snapshot/old_backup/snapshot_1?wait_for_completion=true' -H 'Content-Type: application/json' -d '{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": true
}';
2. 准备新服务器
- 安装 JDK17或JDK21。
- 安装 Elasticsearch 8.17。
注意:具体参考第二章节
3. 停止旧实例
在进行迁移之前,停止旧的 Elasticsearch 实例以确保数据的完整性:
停止 Elasticsearch 服务
sudo systemctl stop elasticsearch
或者使用以下命令
service elasticsearch stop
4. 传输快照
将备份快照从旧服务器复制到新服务器。可以使用 scp 或其他方式:
scp -r /data/backups/es_backup/* root@新服务器IP:/data/backups/es_backup
5. 在新服务器上恢复快照
在新服务器上恢复快照:
添加快照库
curl -u $ES_USER:$ES_PASSWORD -X PUT 'https://localhost:9200/_snapshot/new_backup' --insecure -H "Content-Type: application/json" -d '
{
"type": "fs",
"settings": {
"location": "/data/backups/es_backup"
}
}';
恢复快照
curl -u $ES_USER:$ES_PASSWORD -X POST 'https://localhost:9200/_snapshot/new_backup/snapshot_1/_restore' --insecure -H 'Content-Type: application/json' -d '{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": true
}';
注意:恢复快照会将原有数据抹掉,所以需要重置超级用户密码、重新创建自定义角色、自定义用户。
6. 更新配置
根据需要调整新服务器上的 Elasticsearch 配置文件 elasticsearch.yml ,确保网络、集群名和其他设置与旧实例一致。
7. 启动新实例
启动新服务器上的 Elasticsearch 实例:
sudo systemctl start elasticsearch
8. 验证升级和迁移
确保新服务器上的 Elasticsearch 正常运行,并验证索引和数据是否完整:
检查 Elasticsearch 状态
#查看索引
curl -u $ES_USER:$ES_PASSWORD -X GET 'https://localhost:9200/_cat/indices?v&h=index,rep&pretty' -k
#查看集群状态
curl -u $ES_USER:$ES_PASSWORD -X GET 'https://localhost:9200/_cluster/health?pretty' -k
curl -u $ES_USER:$ES_PASSWORD -X GET "https://localhost:9200/_cat/shards?v&h=index,shard,prirep,state,unassigned.reason&s=state&pretty" -k
#查看分配详情
curl -u $ES_USER:$ES_PASSWORD -X GET 'https://localhost:9200/_cluster/allocation/explain?pretty' -k
9. [理论可选]java应用依赖配置
修改项目中的pom.xml文件中elasticsearch-java和jackson-databind版本号:
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.17.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
10. 完成
在确认一切正常后,可以更新应用程序配置以指向新服务器。
注意事项
- 请查看官方升级指南,了解版本间的变更和兼容性问题。
- 在生产环境中进行迁移和升级时,请确保进行充分的测试,避免服务中断。
二、Elasticsearch配置账号和密码,生成API Token
###安装jdk21
下载最近版本jdk
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
解压到opt目录下
sudo tar -xzf jdk-21_linux-x64_bin.tar.gz -C /opt/
修改环境变量(sudo vi /etc/profile)
export JAVA_HOME=/opt/jdk-21.0.6
export PATH=$JAVA_HOME/bin:$PATH
执行 source /etc/profile 立即生效
###安装es8.17.3
下载指定版本es
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-x86_64.rpm
使用rpm命令安装es
sudo rpm -ivh elasticsearch-8.17.3-x86_64.rpm
注意:记录默认生成的超级管理员密码
修改配置sudo vi /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
path.repo: ["/data/backups/es_backup"]
分配内存 sudo vi /etc/elasticsearch/jvm.options
#符号-前面不能有空格
-Xms4g
-Xmx4g
修改快照仓库目录权限
mkdir -p /data/backups/es_backup
sudo chown -R elasticsearch:elasticsearch /data/backups/es_backup
sudo chmod -R 750 /data/backups/es_backup
重启ES systemctl restart elasticsearch
1. 启用 Elasticsearch 安全功能
编辑 /etc/elasticsearch/elasticsearch.yml 文件,添加或修改以下配置:
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
Elasticsearch 8.x 默认启用了账号密码验证。如果你使用的是默认安装,系统会自动生成一个内置用户(如 elastic)和密码
修改配置后,重启 Elasticsearch 服务以使更改生效
sudo systemctl restart elasticsearch
2. 设置超级用户密码
如果尚未为内置用户(如 elastic)设置密码,运行以下命令:
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
#重置超级用户密码:
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
将超级用户和密码配置到环境变量(sudo vi /etc/profile)
export ES_USER="elastic"
export ES_PASSWORD="您的密码"
执行 source /etc/profile 立即生效
3. 创建自定义用户(恢复快照后,再执行此步骤)
注意:Elasticsearch 8.x 默认启用了 HTTPS,因此需要使用 https 协议,并添加 --insecure 或 -k 参数(如果使用自签名证书)
创建角色
除了预定义的角色外,还可以创建自定义角色。例如,创建一个名为 es-admin-role 的角色,允许用户读写索引中的数据
curl -u $ES_USER:$ES_PASSWORD -X PUT -i 'https://localhost:9200/_security/role/es-admin-role' --insecure -H 'Content-Type: application/json' -d '{
"cluster": ["monitor", "manage", "cluster:admin/xpack/security/api_key/create"],
"indices": [
{
"names": ["*"],
"privileges": ["all"]
}
]
}';
创建用户
通过API创建自定义用户:
#用户名:tms 密码:tms2025* 分配角色:es-admin-role
curl -u $ES_USER:$ES_PASSWORD -X POST "https://localhost:9200/_security/user/tms" --insecure -H "Content-Type: application/json" -d '{
"password": "tms2025*",
"roles": ["es-admin-role"],
"full_name": "tms-es",
"email": "tms2025@qq.com"
}';
#查看用户分配的角色
curl -u $ES_USER:$ES_PASSWORD -X GET "https://localhost:9200/_security/user/tms" --insecure
应用程序可配置自定义的用户和密码,或使用下面的ApiKey
4. 生成 API Token(恢复快照后,再执行此步骤)
使用自定义用户生成 API Token
curl -u tms:tms2025* -X POST "https://localhost:9200/_security/api_key?pretty" --insecure -H "Content-Type: application/json" -d '{
"name": "tms-es-token"
}';
- name 是 Token 的名称,设置为:tms-es-token
响应示例:
{
"id": "AP5asZUB5sU10rRq8JcO",
"name": "tms-es-token",
"api_key": "q-KOYtVWQsmdsDfU08MPiQ",
"encoded": "QVA1YXNaVUI1c1UxMHJScThKY086cS1LT1l0VldRc21kc0RmVTA4TVBpUQ=="
}
- id 和 api_key 组合起来就是你的 API Token(应用程序可配置id值作为用户名、api_key值作为密码)
- encoded是经过Base64编码的Token,可配置到应用程序 Authorization: ApiKey xxx
测试使用 API Token
在请求 Elasticsearch API 时,使用生成的 Token 进行认证。例如:
curl -H "Authorization: ApiKey QVA1YXNaVUI1c1UxMHJScThKY086cS1LT1l0VldRc21kc0RmVTA4TVBpUQ==" -X GET "https://localhost:9200/_cluster/health?pretty" -k
更多推荐


所有评论(0)