Elastic Search 04_集群

ES集群:
1.多台机器
2.处于同一个组里
准备两台服务器,都安装好elasticsearch
本次实验环境:
elk01 192.168.189.118 节点名称:node-1
elk02 192.168.189.119 节点名称:node-2
+++++++
修改配置文件:
vim /etc/elasticsearch/elasticsearch.yml




vim----> 小技巧,快速删除符号(双引号,中括号)内里的内容
在默认模式下,光标定位到第一个符号上,按 di + 第一个符号,
比如,删除双引号里面的内容,定位到第一个双引号,按di键盘上的双引号,就可以快速删除。



master-eligible nodes(可能成为主节点的节点数) / 2 + 1

公式就是:(可能成为主节点的节点数/2) + 1

集群---->副本,设计到一个选举,至少要大多数同意,一般这种集群,节点数都是奇数。


保存,退出。重启elasticsearch
+++++++++++++
集群配置文件说明:
grep "^[a-z]" elasticsearch.yml
cluster.name: Linux            #集群名称,同一个集群内所有节点集群名称要一模一样
node.name: node-1            #节点名称,同一个集群内所有节点的节点名称不能重复

path.data: /data/elasticsearch            #数据目录

path.logs: /var/log/elasticsearch        #日志目录

bootstrap.memory_lock: true                #内存锁定

network.host: 10.0.0.51,127.0.0.1        #绑定监听地址

http.port: 9200                            #默认端口号

discovery.zen.ping.unicast.hosts: ["192.168.189.118", "192.168.189.119"]    #集群发现节点配置

discovery.zen.minimum_master_nodes: 2    #选项相关参数,有公式 master/2 +1

++++++++++++

tail -f /var/log/elasticsearch/linuxes.log

## 这时候的日志,不再是elasticsearch.log,而是我们在配置文件里面配置的集群名称.log

++++++++++++++++++++++
修改第二台服务器192.168.189.119的配置:

直接把第一台189.118的配置文件拷贝过去,进行修改。

##(在 189.118上拷贝配置文件到119)

scp /etc/elasticsearch/elasticsearch.yml root@192.168.189.119:/etc/elasticsearch/

vim /etc/elasticsearch/elasticsearch.yml ##(在189.119上面操作)





重启elasticsearch

systemctl restart elasticsearch.service ##189.119上重启

查看 日志:



这时再看 189.118上面的日志,


集群正常了。




集群状态颜色:
绿色: 所有条件都满足,数据完整,副本满足
黄色: 数据完整,副本不满足
红色: 有索引里的数据出现不完整了
紫色: 有分片正在同步中

查看集群信息:




节点角色:
主节点        :负责调度数据,返回数据。
工作节点 :负责处理数据

默认情况下:
1、所有节点都是工作节点
2、主节点即负责调度又负责处理数据

操作指令:
curl -XGET 'http://192.168.189.118:9200/_nodes/procese?human&pretty'



curl -XGET 'http://192.168.189.118:9200/_nodes/_all/info/jvm,process?human&pretty'

打印节点的所有信息,很详细。

curl -XGET 'http://192.168.189.118:9200/_cluster/health?pretty'
## 查看集群健康信息:
{
 "cluster_name" : "linuxes",
 "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
}

curl -XGET 'http://192.168.189.118:9200/_cat/indices?pretty'

查询集群中有那些索引


curl -XGET 'http://192.168.189.118:9200/_cat/nodes?human&pretty'
打印当前集群节点数


问题1:
2个节点,master设置为2的时候,一台出现故障会导致集群不可用

解决方案:
把还存活的节点的配置文件集群选举相关的选项注释掉或者改成1
discovery.zen.minimum_master_nodes: 1
重启elasticsearch服务

两边没有配置这个参数:discovery.zen.minimum_master_nodes 当网络发生抖动时,会出现脑裂。

集群出现脑裂:(两边成为独立的集群)

恢复时:
两个节点数据不一致会导致查询结果不一致
找出不一致的数据,清空一个节点,以另一个节点的数据为准
然后手动插入修改后的数据
++++++++++++++++++++++
增加第三台节点:(192.168.189.120 主机名:elk03 节点名称:node-3)

新增节点配置步骤:

1、安装好软件
rpm -ivh elasticsearch-6.6.0.rpm

2、修改配置文件
vim /etc/elasticsearch/elasticsearch.yml

cluster.name: linuxes
node.name: node-3
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 192.168.189.120
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.189.118", "192.168.189.120"]
discovery.zen.minimum_master_nodes: 2

+++++++++注意:
discovery.zen.ping.unicast.hosts: ["192.168.189.118", "192.168.189.120"]
只需要填写,集群中任意一台节点地址,和自己的地址,就可以了。因为整个集群中的信息都是共享的,连接一台,也就能知道其他节点信息。

discovery.zen.minimum_master_nodes: 2

根据公式:master-eligible nodes(可能成为主节点的节点数) / 2 + 1

3/2 + 1 =2.5 取整数

++++++++
重启elasticsearch

查看日志:
tail -f /var/log/elasticsearch/linuxes.log


192.168.189.118 上面:
tail -f /var/log/elasticsearch/linuxes.log



++++++++++++++
默认数据分配:
5分片
1副本




停掉:192.168.189.118 主节点的elasticsearch
systemctl stop elasticsearch







+++++++
这时,再把node-3 192.168.189.120 的ES 关掉

看集群是否能正常启动
 [root@elk03 ~]# systemctl stop elasticsearch.service



发现集群挂掉了,

这是因为集群配置文件中的这个参数:discovery.zen.minimum_master_nodes: 2

现在只剩下一个节点了,不够节点数,所以集群不能启动了。

189.119 上面查看日志,就会发现:
tail -f /var/log/elasticsearch/linuxes.log




这时,修改 189.119 上面的配置文件,把discovery.zen.minimum_master_nodes: 2 改为 1

重启 elasticsearch
systemctl restart elasticsearch.service






+++++++++++

这时,把其他两个节点(189.118、189.120)的数据,删除。

rm -rf /data/elasticsearch/*

systemctl start elasticsearch.service










一个集群,三个节点,极限是可以坏两个节点,但是不能同时坏。
+++++++
同时,关闭两个节点:
systemctl stop elasticsearch


要解决这个问题,要启动几台节点,这取决于,你丢的数据是在那一个节点
启动 189.118 上面的es -----------> systemctl start elasticsearch






这时虽然集群是好的,但是,丢失了一个节点,所以监控的时候,不能只监控,集群的状态,还应该监控的节点数。


监控leasticsearch:

1、监控集群健康状态 不是 green

or [两个节点,只需要满足一个,就要报警,才对。]

2、监控集群节点数量 不是 3(总的节点数)

curl -s -XGET 'http://192.168.189.118:9200/_cat/nodes?human&pretty'|wc -l



最后,把189.119的discovery.zen.minimum_master_nodes: 1 改为 2

重启elasticsearch

++++++++++++++ 集群分片与复制

默认创建数据:
curl -XPUT '192.168.189.118:9200/index1?pretty'




创建索引的时候指定分片和副本

curl -XPUT '192.168.189.118:9200/index2?pretty' -H 'Content-Type: application/json' -d'

{
 "settings" : {
 "number_of_shards" : 3,
 "number_of_replicas" : 1
 }
}'






分片数一旦创建就不能再更改了,但是我们可以调整副本数
curl -XPUT '192.168.189.118:9200/index2/_settings?pretty' -H 'Content-Type: application/json' -d'
{
 "settings" : {
 "number_of_replicas" : 2
 }
}'





分片多,对于读来说,速度快,磁盘空间占用得大一些。
分片少,对于读来说,速度慢一些,磁盘占用空间少一些。
++++
此时集群的状态是绿色的,正常的,


我们这时,将node-1 192.168.189.118 的elasticsearch 关掉,集群状态 会是什么颜色?





为什么集群状态是黄色?
集群状态为黄色表示:数据完整,副本不满足

因为我们刚才创建的索引 index2 ,副本调整为 两个了,现在node-1 es 关掉了,就少了一个副本,所以集群状态颜色变成了黄色。
这时集群的数据并没有丢失,那把集群状态 的颜色改为绿色,应该如何操作?
我们可以调整索引index2的副本数为1,即可。
在node-2 189.119 或者 node-3 189.120 上面都可以修改index2的副本
curl -XPUT '192.168.189.119:9200/index2/_settings?pretty' -H 'Content-Type: application/json' -d'
{
 "settings" : {
 "number_of_replicas" : 1
 }
}'





我们再将index2的副本,改为2,再把关掉的node-1 189.118 es 启动起来,让集群恢复正常。