1.需要按照包及版本

jdk-8u231-linux-x64.rpm
kibana-7.3.2-linux-x86_64.tar.gz
elasticsearch-7.3.2-no-jdk-linux-x86_64.tar.gz

2.上传到服务

上传到/home目录:

安装jdk:

安装es:

解压:
[root@ecs-32ed-0012 elastic7.3.2]# tar -vxf elasticsearch-7.3.2-no-jdk-linux-x86_64.tar.gz
移动:
[root@ecs-32ed-0012 elastic7.3.2]# mv elasticsearch-7.3.2 /usr/local/elastic7.3.2

3.创建es用户

  1. sudo -i #申请使用root执行权限
  2. useradd es #新建用户
  3. passwd es #为用户设置密码 Es123456
  4. su es #切换到es用户
  5. [root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/data
  6. [root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/log
  7. [root@ecs-32ed-0012 ~]# chown es:es -R /var/elasticsearch
  8. [root@ecs-32ed-0012 ~]# chown es:es -R /usr/local/elastic7.3.2

4.创建文件夹及付给权限:

  1. [root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/data ## es存放数据
  2. [root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/log ## es日志数据
  3. [root@ecs-32ed-0012 ~]# mkdir -p /home/es_backup/ ## es备份及迁移数据
  4. [root@ecs-32ed-0012 ~]# chown es:es -R /var/elasticsearch
  5. [root@ecs-32ed-0012 ~]# chown es:es -R /usr/local/elastic7.3.2
  6. [root@ecs-32ed-0012 ~]# chown -R es:es /home/es_backup/

5修改配置文件:

/es/elasticsearch-7.3.2/config/elasticsearch.yml添加下面配置:

  1. ##指定集群名称
  2. cluster.name: es-cluster
  3. ##指定节点名
  4. node.name: node-1
  5. ##指定存储在 es 中的数据的路径
  6. path.data: /var/elasticsearch/data
  7. ##指定 es 的日志路径
  8. path.logs: /var/elasticsearch/log
  9. ##备份及迁移目录
  10. path.repo: ["/home/es_backup"]
  11. ## 绑定指定网卡 ip 地址,默认为 localhost ,内网也无法访问
  12. network.host: 172.16.11.158
  13. ## 监听端口
  14. http.port: 9200
  15. ## 集群恢复时,发现那些主机可接受请求
  16. discovery.seed_hosts: ["172.16.11.158"]
  17. ## 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算
  18. cluster.initial_master_nodes: ["node-1"]
  19. ## 可以参与 master 节点选举
  20. node.master: true
  21. ## 数据节点
  22. node.data: true
  23. node.ingest: true

修改Linux系统配置:

  1. sudo -i
  2. ulimit -n 65535 #修改文件句柄数
  3. sysctl -w vm.max_map_count=262144 #修改虚拟内存
  4. ulimit -u 4096 #修改线程数
  5. #以上设置重启会丢失,可以使用编辑配置文件方式修改配置
  6. vim /etc/security/limits.conf
  7. #新增如下两行,修改文件句柄数
  8. * soft nofile 65535
  9. * hard nofile 65535
  10. #修改修改最大进程数
  11. * soft nproc 4096
  12. * hard nproc 4096
  13. #修改虚拟内存
  14. vim /etc/sysctl.conf
  15. vm.max_map_count=262144

6配分数据及迁移数据

1. 创建备份存储目录

  1. ## 创建备份数据目录,迁移机器和备份机器都需要创建
  2. sudo mkdir /home/es_backup
  3. ## 赋值给es用户
  4. chown -R es:es /home/es_backup/

2. 修改elasticsearch.yml文件

  1. vim elasticsearch.yml
  2. # 增加一行如下:
  3. path.repo: ["/home/es_backup"]

3. 重启Elasticsearch

kill -9 进程号
/es/elasticsearch-7.3.2/bin 执行

  1. ## 查看es进程
  2. ps -ef| grep elastic
  3. ## 杀掉es进程
  4. kill -9 进程号
  5. ## 切换为es用户
  6. su es
  7. ## 启动es
  8. sh elasticsearch -d

4. 创建仓库

  1. # 创建仓库,创建一个名为my_backup的仓库
  2. PUT _snapshot/my_backup
  3. {
  4. "type": "fs",
  5. "settings": {
  6. "location": "/home/es_backup",
  7. "compress": true
  8. }
  9. }
  10. curl -XPUT 'http://172.16.100.153:9200/_snapshot/my_backup' -H 'Content-Type: application/json' -d'{"type": "fs", "settings": { "location": "/home/es_backup"} }'
  11. # 检查仓库是否创建成功(my_backup为之前创建的仓库名称)
  12. GET _snapshot/my_backup
  13. # 删除仓库
  14. DELETE _snapshot/my_backup

5. 备份索引数据

  1. # 给所有索引创建快照
  2. PUT _snapshot/my_backup/snapshot_name
  3. # 针对具体的index创建快照备份
  4. # 其中my_backup是仓库名称,snapshot_name是快照的名字
  5. # ignore_unavailable在创建快照的过程中会忽略不存在的索引,默认情况下,如果没有设置,在索引不存在的情况下快照请求将会失败
  6. # include_global_state能够防止集群的全局状态被作为快照的一部分存储起来
  7. # 多个索引间不要加空格,否则只会对第一个索引操作(我踩过坑!!!)
  8. PUT _snapshot/my_backup/snapshot_name?wait_for_completion=true
  9. {
  10. "indices": "index_1,index_2",
  11. "ignore_unavailable": true,
  12. "include_global_state": false
  13. }
  14. # 查看指定仓库下所有快照
  15. GET _snapshot/my_backup/_all
  16. # 查看具体某一个快照的信息
  17. GET _snapshot/my_backup/snapshot_name/_status
  18. # 删除快照,要指定仓库名和快照名
  19. # 也能用于取消一个正在进行的快照创建过程,会删除备份了一半的快照
  20. DELETE _snapshot/my_backup/snapshot_name

6. 将数据迁移到另一个环境

  1. # 备份创建好之后,在仓库目录/home/es_backup里是这样的:
  2. [root@0005 es_backup]# ls -la
  3. 总用量 28
  4. drwxr-xr-x. 3 es es 134 7 19 19:15 .
  5. drwxr-xr-x. 8 root root 4096 7 19 19:03 ..
  6. -rw-rw-r--. 1 es es 1631 7 19 19:15 index-0
  7. -rw-rw-r--. 1 es es 8 7 19 19:15 index.latest
  8. drwxrwxr-x. 17 es es 4096 7 19 19:15 indices
  9. -rw-rw-r--. 1 es es 7689 7 19 19:15 meta-LKh3EP3-SFahWcHVubpLog.dat
  10. -rw-rw-r--. 1 es es 371 7 19 19:15 snap-LKh3EP3-SFahWcHVubpLog.dat
  11. [root@0005 es_backup]#

7. 在目标环境下,重复上面1~4步,建立仓库

将源集群的备份内容(/home/es_backup 里的所有文件),复制到迁移目标的仓库目录里,接下来就是类似批量导入了。

  1. # 如果索引已经存在目标的集群,需要先关闭索引,恢复数据后再开启
  2. POST /index_name/_close
  3. ## 全量导入es数据
  4. POST _snapshot/my_backup/snapshot_name/_restore
  5. POST /index_name/_open
  6. ## 导入报错,可能是安装kibana出现重复索引,可以先删除index,在执行;
  7. # 从快照中恢复指定的索引,并给索引重命名
  8. # indices里面可以写多个索引名,中间用逗号隔开
  9. # rename_pattern可以写完整的索引名,也可以用正则匹配索引名的局部
  10. # rename_replacement将替换rename_pattern中匹配到的局部(如果是正则,不是将整个索引名都替换)
  11. #下面这条语句会把index_1,index_2恢复为restored_index_1和restored_index_2
  12. POST /_snapshot/my_backup/snapshot_1/_restore
  13. {
  14. "indices": "index_1,index_2",
  15. "rename_pattern": "index_(.+)",
  16. "rename_replacement": "restored_index_$1"
  17. }
  18. curl 'http://172.16.100.153:9200/_cat/indices?v'
  19. curl -XPOST http://172.16.100.153:9200/_snapshot/my_backup/snapshot_name/_restore
  20. curl -XPOST 'http://172.16.100.153:9200/_snapshot/my_backup/snapshot_name/_restore' -H 'Content-Type: application/json' -d'{"indices": "index_1,index_2","rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1"}'
  21. # 查看恢复的状态
  22. GET _snapshot/my_backup/snapshot_name/_status