介绍
针对一个索引,Elasticsearch 中其实有专门的衡量索引健康状况的标志,分为三个等级:
- green,绿色。这代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
- yellow,黄色。所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果更多的分片消失,你就会丢数据了。所以可把 yellow 想象成一个需要及时调查的警告。
- red,红色。至少一个主分片以及它的全部副本都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。
如果你只有一台主机的话,其实索引的健康状况也是 yellow,因为一台主机,集群没有其他的主机可以防止副本,所以说,这就是一个不健康的状态,因此集群也是十分有必要的。
搭建步骤
主机环境:
- jdk + es:192.168.40.100
- jdk + es:192.168.40.101
- jdk + es:192.168.40.102
安装步骤:
- 参考elasticsearch安装 在两台主机上安装
- 修改配置文件
192.168.40.100配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| cluster.name: mmh-es node.name: node-1
bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 192.168.40.100 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: ["192.168.40.100","192.168.40.101","192.168.40.102"] discovery.zen.minimum_master_nodes: 1 http.cors.enabled: true http.cors.allow-origin: "*"
|
192.168.40.101配置文件
其它与192.168.40.100配置一致
1 2
| node.name: node-2 network.host: 192.168.40.101
|
192.168.40.102配置文件
其它与192.168.40.100配置一致
1 2
| node.name: node-3 network.host: 192.168.40.102
|
安装head插件
由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)
在192.168.40.100操作
node安装
1 2 3 4 5 6 7 8 9 10 11 12
| wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz
xz -d node-v9.3.0-linux-x64.tar.xz tar -xf node-v9.3.0-linux-x64.tar
ln -s ~/node-v9.3.0-linux-x64/bin/node /usr/bin/node ln -s ~/node-v9.3.0-linux-x64/bin/npm /usr/bin/npm
npm install -g cnpm --registry=https://registry.npm.taobao.org
|
elasticsearch-head安装
1 2 3 4
| cd /usr/local/ git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install
|
注:
- 5.0以上,elasticsearch-head 不能放在elasticsearch的 plugins、modules 目录下,否则elasticsearch启动会报错。
- 这里如果grunt没有安装成功也无所谓,可以通过其他方式启动elasticsearch-head插件(npm run start)。
grunt安装
1 2 3 4
| cd /usr/local/elasticsearch-head npm install -g grunt-cli //执行后会生成node_modules文件夹 npm install
|
修改配置
1 2 3
| cd /usr/local/elasticsearch-head vim _site/app.js
|
1 2
| this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.40.100:9200";
|
1 2 3
| cd /usr/local/elasticsearch-head vim Gruntfile.js
|
1 2 3 4 5 6 7 8 9 10
| connect: { server: { options: { port: 9100, base: '.', keepalive: true, hostname: '*' } } }
|
启动
1 2 3
| cd /usr/local/elasticsearch-head
grunt server
|
访问
1 2
| curl http://192.168.40.100:9100
|
验证
- 访问,有两个节点即成功
- head可以操作和查看es的所有索引
集群备份和恢复
备份es集群是使用snapshot
API快照功能,需要一个共同的数据保存仓库,可以是:
- 共享文件系统,比如 NAS,NFS
- Amazon S3
- HDFS (Hadoop 分布式文件系统)
- Azure Cloud
这里,我们使用NFS做共享仓库,服务地址为:192.168.40.103,注意,需要集群外的NFS
服务端提供目录共享,集群内搭建的NFS
服务端会连接报错。
NFS 搭建
NFS 搭建教程跳转
创建es系统仓库
1 2 3 4 5 6 7
| PUT _snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup" } }
|
_snapshot
es快照接口
my_backup
快照仓库,自定义
/mount/backups/my_backup
NFS共享目录挂在地址,自定义,注意:共享文件系统路径必须确保集群所有节点都可以访问到。
快照备份
1 2 3 4 5 6 7 8
| PUT _snapshot/my_backup/snapshot_1
PUT _snapshot/my_backup/snapshot_2 { "indices": "index_1,index_2" }
|
查看快照
1
| GET _snapshot/my_backup/snapshot_2
|
删除快照
1
| DELETE _snapshot/my_backup/snapshot_2
|
恢复快照
1 2 3 4 5 6 7 8 9 10
| POST _snapshot/my_backup/snapshot_1/_restore
POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "index_1", "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }
|
- 只恢复
index_1
索引,忽略快照中存在的其余索引。
- 查找所提供的模式能匹配上的正在恢复的索引。
- 然后把它们重命名成替代的模式。
这个会恢复 index_1
到你及群里,但是重命名成了 restored_index_1
。
配置集群密码
生成证书,之后把证书复制到其它节点的config目录下
1 2
| bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass "" mv elastic-certificates.p12 config/
|
添加配置elasticsearch.yml
1 2 3 4 5 6 7 8
| http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
|
重启es,配置密码
1 2 3 4 5
| bin/elasticsearch-setup-passwords interactive
bin/elasticsearch-setup-passwords auto
|
测试连接
1
| curl --user elastic:123123 -XGET https://192.168.40.100:9200/_cat/indices?v
|