ES高性能集群

2022-11-14  本文已影响0人  右耳菌

1. 集群规划

1.1 集群规划问题

1.需要多大规模的集群?
2.集群中的节点角色如何分配?
3.如何避免脑裂问题?
4.索引应该设置多少个分片?
5.分片应该设置几个副本?

1.2 我们需要多大规模的集群?

1.当前的数据量有多大?数据增长情况如何?
2.你的机器配置如何? cpu、多大内存、多大硬盘容量?

推算依据:来自官方建议
ES JVM heap最大32G.30G heap大概能处理的数据量10T。如果内存很大如128G,可在一台机器上运行多个ES节点实例。


1.3 集群中的节点角色如何分配?

1.4 如何避免脑裂问题?

脑裂是指,出现了多个master节点

为尽量避免脑裂,可配置

discovery.zen.minimum_master_nodes:(有master资格节点数/2)+1

常用做法(中大规模集群);
1、Master和 dataNode角色分开,配置奇数个master,如3
2、配置选举发现数,及延长ping master的等待时长

discovery.zen.ping_timeout: 30(默认值是3秒)

1.5 索引应该设置多少个分片?

思考:

  1. 分片对应的存储实体是什么?
    答:Lucene的index
  2. 分片是不是越多越好,分片过多有什么影响?
    答:不是越多越好,过多会导致消耗过多的文件句柄和内存以及CPU资源。此外也会导致词频统计出现偏差(因为都拆分到不同的分片中去了)

1.6 索引应该设置多少个分片?

分片设置的可参考原则:


1.7 分片应该设置几个副本?

思考:

  1. 副本的用途是什么?
    答:备份冗余数据,提供数据的可用性。提供数据查询的并发度。
  2. 集群规模没变的情况下副本过多会有什么影响?
    答:会占用磁盘的存储。消耗写入的性能。消耗文件的句柄、内存和CPU等硬件的资源。

设置的基本原则:

  1. 为保证高可用,副本数设置为2即可。要求集群至少要有3个节点,来分开存放主分片、副本。
  2. 如发现并发量大时,查询性能会下降,可增加副本数,来提升并发查询能力。

2. 搭建ES集群

  1. 假设有以下三台服务器

192.168.1.6
192.168.1.8
192.168.1.9

  1. 按照 Linux安装Elasticsearch(ES) 中的方式安装ES,但是elasticsearch.yml 先不要做太大的修改。

  2. 修改各台服务器的elasticsearch.yml

cluster.name: elasticsearch #集群名称
node.name: node-1 #节点名称     
network.host: 192.168.1.6 
http.port: 9200   # 这个端口如果没有变化,其实可以不用管,因为默认就是9200
discovery.zen.ping.unicast.hosts: ["192.168.1.6", "192.168.1.8", "192.168.1.9"]
discovery.zen.minimum_master_nodes: 2 # 因为这里共三台,那么 3/2+1 = 2
cluster.name: elasticsearch #集群名称,这个要保证一致
node.name: node-2 #节点名称
network.host: 192.168.1.8 
http.port: 9200 # 这个端口如果没有变化,其实可以不用管,因为默认就是9200
discovery.zen.ping.unicast.hosts: ["192.168.1.6", "192.168.1.8", "192.168.1.9"]
discovery.zen.minimum_master_nodes: 2 # 因为这里共三台,那么 3/2+1 = 2
cluster.name: elasticsearch #集群名称,这个要保证一致
node.name: node-3 #节点名称
network.host: 192.168.1.9
http.port: 9200 # 这个端口如果没有变化,其实可以不用管,因为默认就是9200
discovery.zen.ping.unicast.hosts: ["192.168.1.6", "192.168.1.8", "192.168.1.9"]
discovery.zen.minimum_master_nodes: 2 # 因为这里共三台,那么 3/2+1 = 2
  1. 注意,如果服务器的防火墙没有关闭的话,可能会集群创建失败,所以如果遇到这个问题,可以找你们的运维协助解决,或者关闭防火墙。这里我尝试管开发某一个指定端口,但是还是提示访问路由失败,关闭防火墙后,确定是可以成功访问的。
# root用户
systemctl stop firewalld
  1. 然后分别启动即可
cd bin
# 非后台启动
./elasticsearch

# 后台启动记得加上 -d,即的deamon的意思
./elasticsearch -d

6.这里要注意,安装的过程中,可能会遇到一些问题,这里大概描述一下并且大概讲述一下解决方法

出现该错误表示内存不够,可以修改config下的jvm.options文件把内存改小。

解决办法:
切换到root用户修改配置/etc/sysctl.conf

su root
vim /etc/sysctl.conf

加入

# 总之要大于262144
vm.max_map_count=655360

然后使其生效

sysctl -p

文件描述符太低,解决办法如下:
切换到root用户修改/etc/security/limits.conf

su root
vim /etc/security/limits.conf

加入,记得前面的 * 也是要输入的哦

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
  1. 访问测试一下

http://192.168.1.6:9200/_cat/nodes?v

http://192.168.1.6:9200/_cluster/health?pretty


3. ES集群架构

3.1 集群组成
  1. 首先启动的节点会自动成为主节点


  2. 第二个节点启动后会向第一个节点单播信息,然后将新的节点信息加入到节点一的集群元信息中,并且也会返回给节点二,记得cluster-name的名字一定要一致。如果又来了一个node3,那么其实执行的步骤也和节点的是一样。



  3. 如果node3 接收到了下面的请求信息,但是其本身是没有资格处理这个请求的,那么它会讲这个请求发送给node1,也就是master节点,由master来处理创建这个index请求。
  1. 上边的请求中,要创建的是三个分片和一个副本,一共是 3个分片加上3个副本共6个。此时master会根据一定的算法来决定这些分片和副本分别在哪个机器,并且记录到matser节点。然后master会通知不同的节点应该做什么操作,比如应该创建分片,或者副本等等。这些节点创建完成后悔通知主节点已经创建完成。主节点等待一定时间后就会向其他的节点反馈创建的情况,或者在等待时间内创建完了就会反馈给对应的节点。
  1. 最后将集群元信息同步到其他的机器。



4. 集群管理

4.1 x-pack

为集群提供安全防护、监控、告警、报告等功能的收费组件;6.3开始已开源,并并入了elasticsearch核心中。

# 开启X-Pack试用
POST /_xpack/license/start_trial?acknowledge=true

返回结果

{
  "acknowledged" : true,
  "trial_was_started" : true,
  "type" : "trial"
}

如果要看到效果,需要修改一些elasticsearch.yml的一些内容,即最后下面的内容:

xpack.security.enabled: true
bin/elasticsearch-setup-passwords interactive

1.elastic
2.apm_system
3.kibana
4.logstash_system
5.beats_system
6.remote_monitoring_user

[es@192 bin]$ ./elasticsearch-setup-passwords interactive

Your cluster health is currently RED.
This means that some cluster data is unavailable and your cluster is not fully functional.

It is recommended that you resolve the issues with your cluster before running elasticsearch-setup-passwords.
It is very likely that the password changes will fail when run against an unhealthy cluster.

Do you want to continue with the password setup process [y/N]y

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
[es@192 bin]$ ps -ef | grep kibana
es        3095  2134  0 05:26 pts/1    00:00:00 grep --color=auto kibana
[es@192 bin]$ netstat -tunple |grep 5601
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      1002       196473     17902/bin/../node/b 
[es@192 bin]$ kill -9 17902
[es@192 bin]$ netstat -tunple |grep 5601
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
[es@192 bin]$ 

修改kibana的配置文件kibana.yml,最后加上下面的内容即可

elasticsearch.username: "elastic" # 这里是账号
elasticsearch.password: "elastic"  # 这里是修改的密码哦
xpack.security.enabled: true
xpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93" 

重新启动kibana

nohup ./kibana &

这里说一下,如果启动失败的话,可能是因为yml中的下面的内容冲突了,解决办法就是要么改一下,要么删掉

kibana.index: ".kibana" 
# 尝试改成下面的试试
# kibana.index: ".kibana2" 

启用/禁用x-pack中的特性
默认情况下xpack中的各种特性都是开启的. 你可以通过在elasticsearch.yml、kibana.yml、logstash.yml中配置来开启或关闭他们。


内建用户

内建角色
https://www.elastic.co/guide/en/x-pack/6.8/built-in-roles.html

1、Rest API
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-api-users.html

GET /_xpack/security/user
GET /_xpack/security/user/<username>
DELETE /_xpack/security/user/<username>
POST /_xpack/security/user/<username>
PUT /_xpack/security/user/<username>
PUT /_xpack/security/user/<username>/_disable
PUT /_xpack/security/user/<username>/_enable
PUT /_xpack/security/user/<username>/_password

2、Kibana Management
用有系统管理权限的用户(如 elastic)登录kibana,在 management菜单中进行用户、角色管理。

1、可以避免生产问题导致监控系统失效
2、也能防止监控系统影响生产程序的性能。


开启monitor
1、在es中配置

xpack.monitoring.collection.enabled: true

2、打开监控界面



如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

上一篇 下一篇

猜你喜欢

热点阅读