ES集群介绍
ES的集群组件:- Cluster:ES的集群标识为集群名称;默认为"elasticsearch"。节点就是靠此名字来决定加入到哪个集群中。一个节点只能属性于一个集群。
- Node:运行了单个ES实例的主机即为节点。用于存储数据、参与集群索引及搜索操作。节点的标识靠节点名。
- Shard:将索引切割成为的物理存储组件;但每一个shard都是一个独立且完整的索引;创建索引时,ES默认将其分割为5个shard,用户也可以按需自定义,创建完成之后不可修改。
- shard有两种类型:primary shard和replica。Replica用于数据冗余及查询时的负载均衡。每个主shard的副本数量可自定义,且可动态修改。
ES的默认端口:
参与集群的事务:9300/tcp transport.tcp.port
接收请求:9200/tcp http.port
ES访问接口:9200/tcp
curl -X<VERB> '<PROTOCOL>://HOST:PORT/<PATH>?<QUERY_STRING>' -d '<BODY>'
ES Cluster工作过程:
- 启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其它节点,并与之建立通信。
- 集群中的所有节点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式。站在用户角度而言,每个均可接收并响应用户的各类请求。
- 集群有状态:green, red, yellow
ES默认使用组播的方式进行通讯,当我们将另外一台服务器配置完成后它就会去找其他节点
我们只需要将cluster.name:ES集群名字设置相同即可
[[email protected] ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.ymlcluster.name: myesnode.name: abcdocker-node-2path.data: /data/es-datepath.logs: /var/log/elasticsearchbootstrap.memory_lock: truenetwork.host: 192.168.56.12http.port: 9200discovery.zen.ping.unicast.hosts: ["192.168.56.11", "192.168.56.12"]
提示: 在一个集群中2个节点需要选举,有一个节点会被选为主节点(master节点)主节点负责管理集群中的状态。对于用户来说这个ES主节点是谁都是无所谓的,我们只要连接到其中一台就可以的(我们所有操作都可以连接到任意一个节点上)
我们的数据是不要通过主节点进行转发的,主节点不像是proxy这样节点.当我们在2节点上写数据,2节点会将数据同步到其它节点。主节点主要管理分片、比如分片多少个,哪个分片是主,哪个是备等。
提示: 虚拟机是NAT模式,可能会对组播有影响。我们可以手动将组播修改成单播
[[email protected] ~]# vim /etc/elasticsearch/elasticsearch.ymldiscovery.zen.ping.unicast.hosts: ["192.168.56.11", "192.168.56.12"][[email protected] ~]# systemctl restart elasticsearch.service或者使用/etc/init.d/elasticsearch restart
单播后面可以添加端口(不修改端口默认就是9200) 我们只需要在第二台服务器上进行修改
我们在进入head插件中,点击连接。这时候我们会看到集群的状态,一个主,一个备。集群的状态也发生变化
提示: 这个状态是主节点展示,主节点会掌握整个集群的状态,来给我们显示集群健康值状态。主节点还会检查这些分片,那个分片丢了,主节点会在复制一个分片出来。
ELKStack相关问题
1.问题:如果在正常工作的情况下,节点丢失怎么办?
答: 此时主节点会看故障节点有哪些分片丢失掉了,主节点就会从剩余的分片副本上去选举一个当做主分片,在进行复制一份。
提示:如果我们想让某个节点只存放数据不进行选举可以在配置文件进行修改
无论我们查询数据连接那个节点,es会把所有数据汇聚在一台节点发送给我们。例如我们请求abcdocker1节点,但是abcdocker1上的节点有一些数据在abcdocker2上。这时abcdocker1节点回去同步abcdocker2节点上的数据。然后返回给客户端
2.监控
如果我们想监控es集群状态可以使用api的方式
[[email protected] ~]# curl -XGET 'http://192.168.56.11:9200/_cluster/health?pretty=true'{"cluster_name" : "myes","status" : "green","timed_out" : false,"number_of_nodes" : 2,"number_of_data_nodes" : 2,"active_primary_shards" : 5,"active_shards" : 10,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0}然后我们通过脚本的方式可以进行判断,是否为true以及状态是否为green等
关于zabbix监控es可以继续关注我博客zabbix模块,近期会进行添加。关于更多监控可以查看官方文档
管理监控和部署
https://www.elastic.co/guide/en/elasticsearch/guide/current/administration.html
https://www.elastic.co/guide/en/elasticsearch/guide/current/_cat_api.html
elastic官方文档
https://www.elastic.co/guide/en/elasticsearch/guide/
关于线上服务器硬件介绍
https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html
3.启动报错
es启动报错
es日志显示如下
marvel plugin requires the license plugin to be installed,于是想到那个插件没有安装成功,去plugin目录下面把marvel-agent目录移除了,重启就正常了
错误提示: es错误几种,首先是端口被占用,其次是es数据权限不足。