本文最后更新于 2024年3月26日 下午
介绍 本教程客户端API关闭HTTPS认证,但传输使用HTTPS。(为了接入日志监控 )
主要介绍了ES集群的搭建。ELK单机使用可参考:https://songxwn.com/elk/
Elasticsearch版本:8.x
系统版本:Rocky Linux 8.7 (关闭SE Linux和防火墙)
配置要求:建议4核8G以上,存储空间按照存储的文档大小规划。
Elasticsearch 集群建议至少要有三个节点,两个以上的master节点。
本教程也同样适用于也适用于其他RHEL8-9版本衍生版系统:如Centos stream、AlmaLinux等。
概念 (1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。
(2)节点(Node): 形成集群的每个服务器称为节点。
(3)索引(index): 在 ES 中, 索引是一组文档的集合。
(4)分片(shard)
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
(5)副本(Replia)
为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
区别 分片与副本的区别在于:
当你分片设置为5,数据量为30G时,es会自动帮我们把数据均衡地分配到5个分片上,即每个分片大概有6G数据,当你查询数据时,ES会把查询发送给每个相关的分片,并将结果组合在一起。
而副本,就是对分布在5个分片的数据进行复制。因为分片是把数据进行分割而已,数据依然只有一份,这样的目的是保障查询的高效性,副本则是多复制几份分片的数据,这样的目的是保障数据的高可靠性,防止数据丢失。
注意
索引建立后,分片个数是不可以更改的。
安装 系统参数调整 NTP 所有节点必须配置NTP服务器,集群之类的必须有此操作,确认相互时间差低于3秒。
修改虚拟内存大小 1 2 3 4 5 6 7 8 9 cat >> /etc/sysctl.conf <<EOF vm.max_map_count=655360 fs.file-max=655360 EOF sysctl -p
修改所有用户限制 1 2 3 4 5 6 7 8 9 cat >> /etc/security/limits.conf <<EOF * soft nofile 924000 * hard nofile 924000 * soft nproc 4096 * hard nproc 4096 EOF
正式安装 yum源配置 1 2 3 4 5 6 7 8 9 10 11 12 vim /etc/yum.repos.d/elasticsearch.repo [elasticsearch]name =Elasticsearch repository for 8.x packagesbaseurl =https://mirrors.tuna.tsinghua.edu.cn/elasticstack/8.x/yumgpgcheck =0enabled =1autorefresh =1type =rpm-md
集群规划,集群名字为ES-CU1
节点名字
IP
角色规划
ES-01
100.64.128.101
master、data
ES-02
100.64.128.102
master、data
ES-03
100.64.128.103
master、data
1 2 3 4 5 6 7 8 9 vim /etc/hosts100.64.128.101 ES-01 100.64.128.102 ES-02 100.64.128.103 ES-03 # 配置本地主机名解析,通过ping验证。每个节点都要配置
安装 1 2 3 4 5 dnf install elasticsearch logstash kibana -y 注意配置前不要启动ES。
关闭HTTPS认证(每台节点配置) 1 2 3 4 5 6 7 8 9 10 vim /etc/elasticsearch/elasticsearch.yml xpack.security.http.ssl: enabled: false
xpack.security.http.ssl 改为false,并注释证书路径。
配置集群(每台节点配置,但node.name和IP需要修改) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 ##ES-01 配置################################################# vim /etc/elasticsearch/elasticsearch.yml cluster.name: ES-CU1 node.name: ES-01 http.host: 100.64 .128 .101 transport.host: 100.64 .128 .101 network.host: 100.64 .128 .101 node.roles: [master,data] discovery.seed_hosts: ["100.64.128.101:9300" ,"100.64.128.102:9300" ,"100.64.128.103:9300" ] cluster.initial_master_nodes: ["ES-01" ] ##ES-02 配置################################################# vim /etc/elasticsearch/elasticsearch.yml cluster.name: ES-CU1 node.name: ES-02 http.host: 100.64 .128 .102 transport.host: 100.64 .128 .102 network.host: 100.64 .128 .102 node.roles: [master,data] discovery.seed_hosts: ["100.64.128.101:9300" ,"100.64.128.102:9300" ,"100.64.128.103:9300" ] cluster.initial_master_nodes: ["ES-01" ] ##ES-03 配置################################################# vim /etc/elasticsearch/elasticsearch.yml cluster.name: ES-CU1 node.name: ES-03 http.host: 100.64 .128 .103 transport.host: 100.64 .128 .103 network.host: 100.64 .128 .103 node.roles: [master,data] discovery.seed_hosts: ["100.64.128.101:9300" ,"100.64.128.102:9300" ,"100.64.128.103:9300" ] cluster.initial_master_nodes: ["ES-01" ] # 注意防火墙开放端口 9200 和 9300 端口。 # 注意默认配置文件有http.host 和 cluster.initial_master_nodes配置,注意删除或修改。
cluster.name为集群名字,集群内所有节点必须统一。
node.name为节点名字,每个节点不能一样。
http.host、transport.host、network.host配置为主机的IP地址。
node.roles: [master,data],为配置节点角色,目前为主节点和存储节点。说明文档
discovery.seed_hosts 配置发现其他节点,一般写所有节点的地址,后面加上传输节点的端口号。默认为9300.
cluster.initial_master_nodes节点初始化默认主节点选定。
启动ES-01,验证并配置其他节点同步证书。 ES-01 (第一个启动,其他节点先不要启动。使用ES-01自动生成的证书) 1 2 3 4 5 6 7 8 9 10 11 12 systemctl enable elasticsearch.service # 设置开机启动 systemctl restart elasticsearch.service# 启动 curl -q http:# 验证启动
注意:安装之后其他节点不能启动,要等配置好集群配置和证书后启动。
如果启动过了,建议按照教程最后的教程清理按照。
ES-02 SCP教程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 scp -r ES -01 :/etc/elasticsearch/certs/ /etc/elasticsearch/ scp -r ES -01 :/etc/elasticsearch/elasticsearch .keystore /etc/elasticsearch/ systemctl enable elasticsearch.service systemctl restart elasticsearch.service curl -q http: //100.64 .128.102 : 9200
ES-03 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 scp -r ES -01 :/etc/elasticsearch/certs/ /etc/elasticsearch/ scp -r ES -01 :/etc/elasticsearch/elasticsearch .keystore /etc/elasticsearch/ systemctl enable elasticsearch.service systemctl restart elasticsearch.service curl -q http: //100.64 .128.103 : 9200
默认文件目录说明 配置文件目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 tree -L 2 /etc/elasticsearch/ /etc/elasticsearch/ ├── certs │ ├── http_ca.crt │ ├── http.p12 │ └── transport.p12 ├── elasticsearch.keystore ├── elasticsearch-plugins.example.yml ├── elasticsearch.yml ├── jvm.options ├── jvm.options.d ├── log4j2.properties ├── role_mapping.yml ├── roles.yml ├── users └── users_roles
程序目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 tree -L 1 /usr/ share/elasticsearch/usr/ share/elasticsearch ├── bin ├── jdk ├── lib ├── LICENSE.txt ├── modules ├── NOTICE.txt ├── plugins └── README.asciidoc
日志目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 tree -L 1 /var/log /elasticsearch/ /var/log /elasticsearch/ ├── elasticsearch_audit.json ├── elasticsearch_deprecation.json ├── elasticsearch_index_indexing_slowlog.json ├── elasticsearch_index_search_slowlog.json ├── elasticsearch.log ├── elasticsearch_server.json ├── ES-CU1_audit.json ├── ES-CU1_deprecation.json ├── ES-CU1_index_indexing_slowlog.json ├── ES-CU1_index_search_slowlog.json ├── ES-CU1.log ├── ES-CU1_server.json ├── gc.log ├── gc.log .00 # 可用于排错
数据存储目录 1 2 3 4 5 6 7 8 9 10 tree -L 1 /var/ lib/elasticsearch/ /var/ lib/elasticsearch/ ├── indices ├── node.lock ├── nodes ├── snapshot_cache └── _state
重置管理员密码和验证集群数量 重置密码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 usr/share /elasticsearch/bin/elasticsearch-reset -password -u elastic # 重置最高管理员elastic密码,全节点同步 /usr/share /elasticsearch/bin/elasticsearch-reset -password -u kibana_system # 重置 kibana_system密码,全节点同步,下面接入kibana使用。 curl -k -u elastic http://100.64 .128 .101 :9200 Enter host password for user 'elastic' : { "name" : "ES-01", "cluster_name" : "ES-CU1", "cluster_uuid" : "UNCqtG1YTeuHSNgDHOHkIw", "version" : { "number" : "8.7.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "09520b59b6bc1057340b55750186466ea715e30e", "build_date" : "2023-03-27T16:31:09.816451435Z", "build_snapshot" : false , "lucene_version" : "9.5.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" } # 使用上面重置的密码,查看ES是否可用。 curl -k -u elastic http://100.64 .128 .101 :9200 /_cat/nodes?v Enter host password for user 'elastic' : ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 100.64 .128 .102 5 92 1 0.01 0.03 0.00 dm - ES-02 100.64 .128 .101 18 93 5 0.20 0.35 0.17 dm * ES-01 100.64 .128 .103 17 89 1 0.02 0.05 0.02 dm - ES-03 # 使用上面重置的密码,可以查看所有在线的集群。
配置Kibana接入集群 Kibana 数据基本都存储在ES数据库,且为data角色的。
默认配置 默认为 5601 端口,默认绑定为127.0.0.1 地址。使用HTTP协议。
可以修改kibana.yml 文件修改绑定地址,或者使用Nginx反向代理。
修改语言和监听IP 1 2 3 4 5 6 7 8 9 10 11 12 vim /etc/kibana/kibana.yml i18n.locale: "zh-CN" server.host: "0.0.0.0" systemctl enable --now kibana.service
基本认证配置 1 2 3 4 5 6 7 8 9 10 11 12 vim /etc/kibana/kibana.yml elasticsearch.hosts: ["http://100.64.128.101:9200" ,"http://100.64.128.102:9200" ,"http://100.64.128.103:9200" ]elasticsearch.username: "kibana_system" elasticsearch.password: "EVecudsC4vvlcR6QT4mR"
修改文件,配置ES所有访问地址,配置系统默认账号kibana_system的密码,填入配置文件。(必须为此账号)
使用systemctl restart kibana.service
重启服务,使配置生效。
在Kibana上查看和监测ES集群 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 vim /etc/ kibana/kibana.yml monitoring.ui.ccs.enabled: false# 添加配置文件,重启生效。 /usr/ share/elasticsearch/ bin/elasticsearch-reset-password -u beats_system# 重置自带的beats_system的密码,在下面使用。 dnf install metricbeat -y systemctl enable --now metricbeat.service metricbeat modules enable elasticsearch-xpack# 安装metricbeat并启用监控ES模块。 vim /etc/ metricbeat/metricbeat.yml output.elasticsearch: hosts: ["http://100.64.128.101:9200" ,"http://100.64.128.102:9200" ,"http://100.64.128.103:9200" ] username: "beats_system" password: "1@PASSWORD" # 配置集群地址,账号密码,接入ES。 systemctl restart metricbeat.service
访问 http://100.64.128.101:5601/app/monitoring
路径
即可查看监控,使用elastic账号登录。
彻底清理卸载ES 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 systemctl stop elasticsearch dnf remove elasticsearch -yrm -rf /var/lib/elasticsearchrm -rf /etc/elasticsearchrm -rf /usr/share/elasticsearchrm -rf /var/log/elasticsearch
相关教程 单机部署ELK,接收syslogr日志
接入ES做日志告警系统
配置接收SNMP-Trap日志
参考 https://qiita.com/mingchun_zhao/items/b229addd5697ad571d94
https://www.zsjweblog.com/2022/03/09/elasticsearch8-1-0%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/
https://blog.51cto.com/feirenraoyuan/5716392
http://dbaselife.com/doc/831/