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 启动起来,让集群恢复正常。