介绍
针对一个索引,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
 
  |