elasticsearch7.2搭建

本文详细介绍了如何在Linux环境下搭建Elasticsearch 7.2的三节点集群,包括下载资源、配置文件、解决权限和内核参数问题。此外,还涉及了Kibana的下载、配置变化及其配置文件解析,以及Filebeat的安装与配置。通过解决各种运行中遇到的问题,确保了Elasticsearch、Kibana和Filebeat的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里使用三节点进行搭建
es1:172.20.0.38
es2:172.20.0.44
es3:172.20.0.16

下载资源

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz

添加内核参数
vim /etc/sysctl.conf

vm.max_map_count=655360

并执行sysctl -p

建立用户es
useadd es
groupadd es
chown -R es:es opt/elasticsearch-7.2.0/

配置文件/opt/elasticsearch-7.2.0/config/elasticsearch.yml(因为是在/opt下下载的)
elasticsearch.yml参数详解

 ################################### Cluster ###################################   

# 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.   

# es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,
# 因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的

cluster.name: elasticsearch

配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,
如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群,cluster.name就成为同一个集群的标识。

node.name: "Franz Kafka"

节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,
其中有很多作者添加的有趣名字,节点名称同理,可自动生成也可手动配置。

node.master: true

指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,
如果这台机挂了就会重新选举master。

node.data: true

指定该节点是否存储索引数据,默认为true。

1. # 配置文件中给出了三种配置高性能集群拓扑结构的模式,如下:   

2. # 1. 如果你想让节点从不选举为主节点,只用来存储数据,可作为负载器   

3. # node.master: **false**   

4. # node.data: **true**   

5. # node.ingest: **false**  

6.   

7. # 2. 如果想让节点成为主节点,且不存储任何数据,并保有空闲资源,可作为协调器   

8. # node.master: **true**   

9. # node.data: **false**  

10. # node.ingest: **false**   

11.   

12. # 3. 如果想让节点既不称为主节点,又不成为数据节点,那么可将他作为搜索器,从节点中获取数据,生成搜索结果等   

13. # node.master: **false**   

14. # node.data: **false**   

15. # node.ingest: **true** (可不指定默认开启)  

16.   

17. # 4. 仅作为协调器   

18. # node.master: **false**   

19. # node.data: **false**  

20. # node.ingest: **false**  

index.number_of_shards: 5

设置默认索引分片个数,默认为5片。

index.number_of_replicas: 1

设置默认索引副本个数,默认为1个副本。

1. # 配置文件中提到的最佳实践是,如果服务器够多,可以将分片提高,尽量将数据平均分布到大集群中去  

2. # 同时,如果增加副本数量可以有效的提高搜索性能   

3. # 需要注意的是,"number_of_shards" 是索引创建后一次生成的,后续不可更改设置   

4. # "number_of_replicas" 是可以通过API去实时修改设置的 


path.conf: /path/to/conf

设置配置文件的存储路径,默认是es根目录下的config文件夹。


path.data: /path/to/data

设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:

path.data: /path/to/data1,/path/to/data2


path.work: /path/to/work

设置临时文件的存储路径,默认是es根目录下的work文件夹。


path.logs: /path/to/logs

设置日志文件的存储路径,默认是es根目录下的logs文件夹


path.plugins: /path/to/plugins

设置插件的存放路径,默认是es根目录下的plugins文件夹


bootstrap.memory_lock:

服务器发生系统swapping的时候ES节点的性能会非常差,也会影响节点的稳定性。
所以要不惜一切代价来避免swapping。swapping会导致Java GC的周期延迟从毫秒级恶化到分钟,
更严重的是会引起节点响应延迟甚至脱离集群。

这个参数的目的是当你无法关闭系统的swap的时候,建议把这个参数设为true。
防止在内存不够用的时候,elasticsearch的内存被交换至交换区,导致性能骤降。


bootstrap.mlockall: true

设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,
可以把ES_MIN_MEM和 ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。
同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。

network.bind_host: 192.168.0.1

设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。


network.publish_host: 192.168.0.1

设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。


network.host: 192.168.0.1

这个参数是用来同时设置bind_host和publish_host上面两个参数。


transport.tcp.port: 9300

设置节点间交互的tcp端口,默认是9300。


transport.tcp.compress: true

设置是否压缩tcp传输时的数据,默认为false,不压缩。


http.port: 9200

设置对外服务的http端口,默认为9200。


http.max_content_length: 100mb

设置内容的最大容量,默认100mb


http.enabled: false

是否使用http协议对外提供服务,默认为true,开启。


1. ###################### 使用head等插件监控集群信息,需要打开以下配置项 ###########  

2. # http.cors.enabled: **true**  

3. # http.cors.allow-origin: "*"  

4. # http.cors.allow-credentials: **true** 

1. # 下面的配置控制怎样以及何时启动一整个集群重启的初始化恢复过程   

2. # (当使用shard gateway时,是为了尽可能的重用local data(本地数据))  


gateway.type: local

gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,Hadoop的HDFS,和amazon的s3服务器。


gateway.recover_after_nodes: 1

集群中N个节点启动后进行数据恢复,默认为1。


gateway.recover_after_time: 5m

设置初始化恢复过程的超时时间,超时时间从上一个配置中配置的N个节点启动后算起,默认是5分钟。


gateway.expected_nodes: 2

设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。


1. # 下面这些配置允许在初始化恢复,副本分配,再平衡,或者添加和删除节点时控制节点间的分片分配   

2. # 设置一个节点的并行恢复数 


cluster.routing.allocation.node_initial_primaries_recoveries: 4

初始化数据恢复时,并发恢复线程的个数,默认为4。


cluster.routing.allocation.node_concurrent_recoveries: 2

添加删除节点或负载均衡时并发恢复线程的个数,默认为4。


indices.recovery.max_size_per_sec: 0

设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。


indices.recovery.concurrent_streams: 5

设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。


discovery.zen.minimum_master_nodes: 1

设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)


discovery.zen.ping.timeout: 3s

设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。


discovery.zen.ping.multicast.enabled: false

设置是否打开多播发现节点,默认是true。


discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]

设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。


###节点ping设置,更多等待时间设置discovery.zen.fd.ping_interval:该属性默认为1s(1秒钟),指定了节点互相ping的时间间隔。


discovery.zen.fd.ping_timeout:该属性默认为30s(30秒钟),指定了节点发送ping信息后等待响应的时间,超过此时间则认为对方节点无响应。


discovery.zen.fd.ping_retries:该属性默认为3,指定了重试次数,超过此次数则认为对方节点已停止工作。

本文elasticsearch.yml配置

cluster.name: es-cluster   #集群名
node.name: es1             #节点名    
cluster.initial_master_nodes: ["172.20.0.38:9301"]   #候选主节点的设备地址,来开启服务时可以被选为主节点
node.master: true   #允许节点是否成为一个master节点,es默认集群中的第一台机器成为master
node.data: true     #允许该节点存储索引数据(默认为开启)
bootstrap.memory_lock: false  #设置elasticsearch的进程锁住内存
bootstrap.system_call_filter: false
network.host: 172.20.0.38     #节点IP
http.port: 9200   
transport.tcp.port: 9300        
discovery.zen.ping.unicast.hosts: ["172.20.0.38","172.20.0.44","172.20.0.16"]   
discovery.zen.minimum_master_nodes: 2   #为了避免脑裂,设置数一般为集群数/2-1
http.cors.enabled: true    
http.cors.allow-origin: "*"   
#node.max_local_storage_nodes: 1       #设置一台机子能运行的节点数目



cluster.name: es-cluster   
node.name: es2  
cluster.initial_master_nodes: ["172.20.0.44:9301"]
bootstrap.memory_lock: false  
bootstrap.system_call_filter: false
network.host: 172.20.0.44  
http.port: 9200 
transport.tcp.port: 9300   
discovery.zen.ping.unicast.hosts: ["172.20.0.38","172.20.0.44","172.20.0.16"] 
discovery.zen.minimum_master_nodes: 2    
http.cors.enabled: true    
http.cors.allow-origin: "*"  
node.max_local_storage_nodes: 1



cluster.name: es-cluster   
node.name: es3  
#cluster.initial_master_nodes: ["172.20.0.16 :9301"]
bootstrap.memory_lock: false  
bootstrap.system_call_filter: false
network.host: 172.20.0.16  
http.port: 9200    
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["172.20.0.38","172.20.0.44","172.20.0.16"]     
discovery.zen.minimum_master_nodes: 2    
http.cors.enabled: true    
http.cors.allow-origin: "*"   
node.max_local_storage_nodes: 1

配置JVM
vim elasticsearch/config/jvm.options

-Xms1g                                                  # JVM最大、最小使用内存-Xmx1g

配置好之后切换es用户运行

su es
cd /opt/elasticsearch-7.2.0/
./bin/elasticsearch

运行出现问题

问题1:
在这里插入图片描述
因为权限问题,不允许用root用户
所以用es用户,但是同时得设置文件目录权限
useradd es
groupadd es
chown -R es:es /opt/elasticsearch-7.2.0

问题二:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

支持的数量太少
所以添加内核参数
vim /etc/sysctl.conf

vm.max_map_count=655360

问题三:
ERROR:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535];

解决方法
[root@elk ~]# vim /etc/security/limits.conf

#在配置文件中添加如下参数:

* soft nofile 65535 
* hard nofile 65535

检查集群状态
curl http://172.20.0.38:9200/_cat/nodes?v

检查健康状态
curl http://172.20.0.38:9200/_cat/health?v

在这里插入图片描述

下载kibana

下载命令

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gz

Kibaka配置发生变化

kibana配置文件详解

server.port:

默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号。

server.host:

默认值: "localhost" 指定后端服务器的主机地址。

server.basePath:

如果启用了代理,指定 Kibana 的路径,该配置项只影响 Kibana 生成的 URLs,转发请求到 Kibana 时代理会移除基础路径值,该配置项不能以斜杠 (/)结尾。

server.maxPayloadBytes:

默认值: 1048576 服务器请求的最大负载,单位字节。

server.name:

默认值: "您的主机名" Kibana 实例对外展示的名称。

server.defaultRoute:

默认值: "/app/kibana" Kibana 的默认路径,该配置项可改变 Kibana 的登录页面。

elasticsearch.url:

默认值: "http://localhost:9200" 用来处理所有查询的 Elasticsearch 实例的 URL 。

elasticsearch.preserveHost:

默认值: true 该设置项的值为 true 时,Kibana 使用 server.host 设定的主机名,该设置项的值为 false时,Kibana 使用主机的主机名来连接 Kibana 实例。

kibana.index:

默认值: ".kibana" Kibana 使用 Elasticsearch 中的索引来存储保存的检索,可视化控件以及仪表板。如果没有索引,Kibana 会创建一个新的索引。

kibana.defaultAppId:

默认值: "discover" 默认加载的应用。

tilemap.url:

Kibana 用来在 tile 地图可视化组件中展示地图服务的 URL。默认时,Kibana 从外部的元数据服务读取 url,用户也可以覆盖该参数,使用自己的 tile 地图服务。例如:"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"

tilemap.options.minZoom:

默认值: 1 最小缩放级别。

tilemap.options.maxZoom:

默认值: 10 最大缩放级别。

tilemap.options.attribution:

默认值: "© [Elastic Tile Service](https://www.elastic.co/elastic-tile-service)" 地图属性字符串。

tilemap.options.subdomains:

服务使用的二级域名列表,用 {s} 指定二级域名的 URL 地址。

elasticsearch.username: 和 elasticsearch.password:

Elasticsearch 设置了基本的权限认证,该配置项提供了用户名和密码,用于 Kibana 启动时维护索引。Kibana 用户仍需要 Elasticsearch 由 Kibana 服务端代理的认证。

server.ssl.enabled

默认值: "false" 对到浏览器端的请求启用 SSL,设为 true 时, server.ssl.certificate 和 server.ssl.key 也要设置。

server.ssl.certificate: 和 server.ssl.key:

PEM 格式 SSL 证书和 SSL 密钥文件的路径。

server.ssl.keyPassphrase

解密私钥的口令,该设置项可选,因为密钥可能没有加密。

server.ssl.certificateAuthorities

可信任 PEM 编码的证书文件路径列表。

server.ssl.supportedProtocols

默认值: TLSv1、TLSv1.1、TLSv1.2 版本支持的协议,有效的协议类型: TLSv1 、 TLSv1.1 、 TLSv1.2 。

server.ssl.cipherSuites

默认值: ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES256-GCM-SHA384, DHE-RSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-SHA256, DHE-RSA-AES128-SHA256, ECDHE-RSA-AES256-SHA384, DHE-RSA-AES256-SHA384, ECDHE-RSA-AES256-SHA256, DHE-RSA-AES256-SHA256, HIGH,!aNULL, !eNULL, !EXPORT, !DES, !RC4, !MD5, !PSK, !SRP, !CAMELLIA. 具体格式和有效参数可通过[OpenSSL cipher list format documentation](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html#CIPHER-LIST-FORMAT) 获得。

elasticsearch.ssl.certificate: 和 elasticsearch.ssl.key:

可选配置项,提供 PEM格式 SSL 证书和密钥文件的路径。这些文件确保 Elasticsearch 后端使用同样的密钥文件。

elasticsearch.ssl.keyPassphrase

解密私钥的口令,该设置项可选,因为密钥可能没有加密。

elasticsearch.ssl.certificateAuthorities:

指定用于 Elasticsearch 实例的 PEM 证书文件路径。

elasticsearch.ssl.verificationMode:

默认值: full 控制证书的认证,可用的值有 none 、 certificate 、 full 。 full 执行主机名验证,certificate 不执行主机名验证。

elasticsearch.pingTimeout:

默认值: elasticsearch.requestTimeout setting 的值,等待 Elasticsearch 的响应时间。

elasticsearch.requestTimeout:

默认值: 30000 等待后端或 Elasticsearch 的响应时间,单位微秒,该值必须为正整数。

elasticsearch.requestHeadersWhitelist:

默认值: [ 'authorization' ] Kibana 客户端发送到 Elasticsearch 头体,发送 no 头体,设置该值为[]。

elasticsearch.customHeaders:

默认值: {} 发往 Elasticsearch的头体和值, 不管 elasticsearch.requestHeadersWhitelist 如何配置,任何自定义的头体不会被客户端头体覆盖。

elasticsearch.shardTimeout:

默认值: 0 Elasticsearch 等待分片响应时间,单位微秒,0即禁用。

elasticsearch.startupTimeout:

默认值: 5000 Kibana 启动时等待 Elasticsearch 的时间,单位微秒。

pid.file:

指定 Kibana 的进程 ID 文件的路径。

logging.dest:

默认值: stdout 指定 Kibana 日志输出的文件。

logging.silent:

默认值: false 该值设为 true 时,禁止所有日志输出。

logging.quiet:

默认值: false 该值设为 true 时,禁止除错误信息除外的所有日志输出。

logging.verbose

默认值: false 该值设为 true 时,记下所有事件包括系统使用信息和所有请求的日志。

ops.interval

默认值: 5000 设置系统和进程取样间隔,单位微妙,最小值100。

status.allowAnonymous

默认值: false 如果启用了权限,该项设置为 true 即允许所有非授权用户访问 Kibana 服务端 API 和状态页面。

cpu.cgroup.path.override

如果挂载点跟 /proc/self/cgroup 不一致,覆盖 cgroup cpu 路径。

cpuacct.cgroup.path.override

如果挂载点跟 /proc/self/cgroup 不一致,覆盖 cgroup cpuacct 路径。

console.enabled

默认值: true 设为 false 来禁用控制台,切换该值后服务端下次启动时会重新生成资源文件,因此会导致页面服务有点延迟。

elasticsearch.tribe.url:

Elasticsearch tribe 实例的 URL,用于所有查询。

elasticsearch.tribe.username: 和 elasticsearch.tribe.password:

Elasticsearch 设置了基本的权限认证,该配置项提供了用户名和密码,用于 Kibana 启动时维护索引。Kibana 用户仍需要 Elasticsearch 由 Kibana 服务端代理的认证。

elasticsearch.tribe.ssl.certificate: 和 elasticsearch.tribe.ssl.key:

可选配置项,提供 PEM 格式 SSL 证书和密钥文件的路径。这些文件确保 Elasticsearch 后端使用同样的密钥文件。

elasticsearch.tribe.ssl.keyPassphrase

解密私钥的口令,该设置项可选,因为密钥可能没有加密。

elasticsearch.tribe.ssl.certificateAuthorities:

指定用于 Elasticsearch tribe 实例的 PEM 证书文件路径。

elasticsearch.tribe.ssl.verificationMode:

默认值: full 控制证书的认证,可用的值有 none 、 certificate 、 full 。 full 执行主机名验证, certificate 不执行主机名验证。

elasticsearch.tribe.pingTimeout:

默认值: elasticsearch.tribe.requestTimeout setting 的值,等待 Elasticsearch 的响应时间。

elasticsearch.tribe.requestTimeout:

Default: 30000 等待后端或 Elasticsearch 的响应时间,单位微秒,该值必须为正整数。

elasticsearch.tribe.requestHeadersWhitelist:

默认值: [ 'authorization' ] Kibana 发往 Elasticsearch 的客户端头体,发送 no 头体,设置该值为[]。

elasticsearch.tribe.customHeaders:

默认值: {} 发往 Elasticsearch的头体和值,不管 elasticsearch.tribe.requestHeadersWhitelist 如何配置,任何自定义的头体不会被客户端头体覆盖。

版本变化

# 在早些版本中,kibana的配置
elasticsearch.url: "http://172.20.0.38:9200"
# 在7.2.0中,kibana的配置
elasticsearch.hosts: ["http://172.20.0.38:9200"]

如果配置错误,会提示:
Error: [elasticsearch.url]: definition for this key is missing
我的kibana.yml文件为

port: 5601
server.host: 172.20.0.38
elasticsearch.hosts: ["172.20.0.38:9200"]

同时也是用es用户进行启动,也得将目录权限改为es,之后启动即可

./bin/kibana.yml

下载filebeat

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-linux-x86_64.tar.gz

之后解压
tar xzvf filebeat-7.2.0-linux-x86_64.tar.gz

进入配置文件进行修改(在/opt/下)filebeat.yml

找到以下设置并修改

filebeat.prospectors:  
- type: log
  enabled: true
  paths:
    - /var/xxx/*.log
    - /var/xxx/*.out
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
setup.kibana:  
  host: "localhost:5601"
output.elasticsearch:  
  hosts: ["localhost:9200"]

之后启动即可 ./filebeat.yml(其中目录路径省略,闲麻烦)

最后 打开浏览器进入 http://127.0.0.1:5601
点击最下方管理项添加pattern,进行添加。(图片就不找了,网上一搜一大堆)

下一篇我们用docker-compose进行搭建efk,但是是另一个版本的efk(fluentd的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值