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.上传到服务
安装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用户
sudo -i #申请使用root执行权限useradd es #新建用户passwd es #为用户设置密码 Es123456su es #切换到es用户[root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/data[root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/log[root@ecs-32ed-0012 ~]# chown es:es -R /var/elasticsearch[root@ecs-32ed-0012 ~]# chown es:es -R /usr/local/elastic7.3.2
4.创建文件夹及付给权限:
[root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/data ## es存放数据[root@ecs-32ed-0012 ~]# mkdir -p /var/elasticsearch/log ## es日志数据[root@ecs-32ed-0012 ~]# mkdir -p /home/es_backup/ ## es备份及迁移数据[root@ecs-32ed-0012 ~]# chown es:es -R /var/elasticsearch[root@ecs-32ed-0012 ~]# chown es:es -R /usr/local/elastic7.3.2[root@ecs-32ed-0012 ~]# chown -R es:es /home/es_backup/
5修改配置文件:
/es/elasticsearch-7.3.2/config/elasticsearch.yml添加下面配置:
##指定集群名称cluster.name: es-cluster##指定节点名node.name: node-1##指定存储在 es 中的数据的路径path.data: /var/elasticsearch/data##指定 es 的日志路径path.logs: /var/elasticsearch/log##备份及迁移目录path.repo: ["/home/es_backup"]## 绑定指定网卡 ip 地址,默认为 localhost ,内网也无法访问network.host: 172.16.11.158## 监听端口http.port: 9200## 集群恢复时,发现那些主机可接受请求discovery.seed_hosts: ["172.16.11.158"]## 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算cluster.initial_master_nodes: ["node-1"]## 可以参与 master 节点选举node.master: true## 数据节点node.data: truenode.ingest: true
修改Linux系统配置:
sudo -iulimit -n 65535 #修改文件句柄数sysctl -w vm.max_map_count=262144 #修改虚拟内存ulimit -u 4096 #修改线程数#以上设置重启会丢失,可以使用编辑配置文件方式修改配置vim /etc/security/limits.conf#新增如下两行,修改文件句柄数* soft nofile 65535* hard nofile 65535#修改修改最大进程数* soft nproc 4096* hard nproc 4096#修改虚拟内存vim /etc/sysctl.confvm.max_map_count=262144
6配分数据及迁移数据
1. 创建备份存储目录
## 创建备份数据目录,迁移机器和备份机器都需要创建sudo mkdir /home/es_backup## 赋值给es用户chown -R es:es /home/es_backup/
2. 修改elasticsearch.yml文件
vim elasticsearch.yml# 增加一行如下:path.repo: ["/home/es_backup"]
3. 重启Elasticsearch
kill -9 进程号
/es/elasticsearch-7.3.2/bin 执行
## 查看es进程ps -ef| grep elastic## 杀掉es进程kill -9 进程号## 切换为es用户su es## 启动essh elasticsearch -d
4. 创建仓库
# 创建仓库,创建一个名为my_backup的仓库PUT _snapshot/my_backup{"type": "fs","settings": {"location": "/home/es_backup","compress": true}}curl -XPUT 'http://172.16.100.153:9200/_snapshot/my_backup' -H 'Content-Type: application/json' -d'{"type": "fs", "settings": { "location": "/home/es_backup"} }'# 检查仓库是否创建成功(my_backup为之前创建的仓库名称)GET _snapshot/my_backup# 删除仓库DELETE _snapshot/my_backup
5. 备份索引数据
# 给所有索引创建快照PUT _snapshot/my_backup/snapshot_name# 针对具体的index创建快照备份# 其中my_backup是仓库名称,snapshot_name是快照的名字# ignore_unavailable在创建快照的过程中会忽略不存在的索引,默认情况下,如果没有设置,在索引不存在的情况下快照请求将会失败# include_global_state能够防止集群的全局状态被作为快照的一部分存储起来# 多个索引间不要加空格,否则只会对第一个索引操作(我踩过坑!!!)PUT _snapshot/my_backup/snapshot_name?wait_for_completion=true{"indices": "index_1,index_2","ignore_unavailable": true,"include_global_state": false}# 查看指定仓库下所有快照GET _snapshot/my_backup/_all# 查看具体某一个快照的信息GET _snapshot/my_backup/snapshot_name/_status# 删除快照,要指定仓库名和快照名# 也能用于取消一个正在进行的快照创建过程,会删除备份了一半的快照DELETE _snapshot/my_backup/snapshot_name
6. 将数据迁移到另一个环境
# 备份创建好之后,在仓库目录/home/es_backup里是这样的:[root@0005 es_backup]# ls -la总用量 28drwxr-xr-x. 3 es es 134 7月 19 19:15 .drwxr-xr-x. 8 root root 4096 7月 19 19:03 ..-rw-rw-r--. 1 es es 1631 7月 19 19:15 index-0-rw-rw-r--. 1 es es 8 7月 19 19:15 index.latestdrwxrwxr-x. 17 es es 4096 7月 19 19:15 indices-rw-rw-r--. 1 es es 7689 7月 19 19:15 meta-LKh3EP3-SFahWcHVubpLog.dat-rw-rw-r--. 1 es es 371 7月 19 19:15 snap-LKh3EP3-SFahWcHVubpLog.dat[root@0005 es_backup]#
7. 在目标环境下,重复上面1~4步,建立仓库
将源集群的备份内容(/home/es_backup 里的所有文件),复制到迁移目标的仓库目录里,接下来就是类似批量导入了。
# 如果索引已经存在目标的集群,需要先关闭索引,恢复数据后再开启POST /index_name/_close## 全量导入es数据POST _snapshot/my_backup/snapshot_name/_restorePOST /index_name/_open## 导入报错,可能是安装kibana出现重复索引,可以先删除index,在执行;# 从快照中恢复指定的索引,并给索引重命名# indices里面可以写多个索引名,中间用逗号隔开# rename_pattern可以写完整的索引名,也可以用正则匹配索引名的局部# rename_replacement将替换rename_pattern中匹配到的局部(如果是正则,不是将整个索引名都替换)#下面这条语句会把index_1,index_2恢复为restored_index_1和restored_index_2POST /_snapshot/my_backup/snapshot_1/_restore{"indices": "index_1,index_2","rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1"}curl 'http://172.16.100.153:9200/_cat/indices?v'curl -XPOST http://172.16.100.153:9200/_snapshot/my_backup/snapshot_name/_restorecurl -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"}'# 查看恢复的状态GET _snapshot/my_backup/snapshot_name/_status
