首页 > 技术文章 > ES集群

storyawine 2020-07-31 10:32 原文

在上一篇中我们已经掌握了在单台ES情况下的日志收集以及展示的部署(ELK)
并且在部署的过程中,你发现了在elastcisearch-head插件的展示界面,es分配的副本的状态一直是灰色的:
 
 
这是由于每个索引都会默认分配5个主分片,日志数据分别存储在不同的分片上,实现分布式存储,达到分片查询,分片的数量只能在索引创建前指定,且创建之后不能修改~
同时每个分片又会分配一个索引副本,副本的作用是提高容错率,当某个节点的某个分片损坏或丢失时,可以从副本中恢复,同样也能提高es查询的效率,es会自动对搜索请求进行负载均衡!
因此,单台的es的副分片是没法分配到其他节点中去的,而且,在一台es中,不存在主分片和副分片同时开启的状态,所以在界面中显示副分片是没有开启状态!那么何如解决这个问题呢?就是创建ES集群,真正实现分布式存储,实现高可用!
 
创建ES集群:
环境:
192.168.75.64(先)(工作节点)
192.168.75.63(后) (主节点)
之前已经部署过在一台机器上安装elasticsearch,那么这里我们再在另一台192.168.75.63上部署一个elasticsearch
1:确定java版本,不够1.8的话要升级
2:rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
3:创建elasticsearch的yum源
4:修改配置文件,这里需要重点讲下,因为集群配置跟单台是不一样的:
cluster.name: test-elk        #这里的集群名称,要跟之前不是的那台elasticsearch配置的集群名称一样!
node.name: elk-2            #节点名称,之前是elk-1,这里是-2
node.master: true
node.data: true                   # 指定了该节点可能成为 master 节点,还可以是数据节点
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.75.63", "192.168.75.64"]            #这里是集群节点的IP,有几个节点就写几个!
http.cors.enabled: true
http.cors.allow-origin: "*"
5:创建data目录,不要忘记给elasticsearch的所属组和所有者权限!
6:修改系统的几个配置参数,这里就不再阐述了!
7:开启服务~
看日志是没问题的!
同时,也对之前75.64那台的elastsearch做了对应的配置修改:
配置也跟上面一样,只是节点名称不同。
重启,看日志也是OK的!!
那么我们去elasticsearch-head界面看下:
 
刷新之后,哈哈哈哈很棒哦!
集群的两个节点都安排上了!并且没有down掉的机器分片,这样看起来舒服多了!
 

 
下面整理下ES集群的相关操作指令:
elasticsearch直接监听了http端口,所以可以直接用curl去查看集群的一些信息:
_cat:代表查看信息
nodes:表示查看节点信息,默认会显示一行,所以要用?pretty让显示更友好
 
[root@VM-75-64 elasticsearch]# curl -EXGT http://192.168.75.64:9200/_cat/nodes?pretty
192.168.75.63 42 92 0 0.00 0.00 0.00 mdi * elk-2
192.168.75.64 41 99 0 0.00 0.00 0.00 mdi - elk-1
这里就显示了集群的节点情况,其中“*”表示是主节点!
 
[root@VM-75-64 elasticsearch]# curl -XGET 'http://192.168.75.64:9200/_cat?pretty'
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
 
这里是个友好提示,表示你所能查看的所有信息以及指令,是不是很棒!!!
因为ES保存日志是永久保存,所以需要定期删除一下日志,下面命令为删除指定时间前的日志
 
curl -X DELETE http://xx.xx.com:9200/logstash-*-`date +%Y-%m-%d -d "-$n days"`
 
 以上,共勉!

推荐阅读