如何做一个api接口?
310
2022-09-13
Elasticsearch 7.x 简要介绍与集群搭建
需求背景
需求背景:
• 业务发展越来越庞大,服务器越来越多
• 各种访问日志、应用日志、错误日志量越来越多
• 开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
• 运维需实时关注业务访问情况
ELK 介绍
ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
Elasticsearch:搜索、分析和存储数据Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储Kibana:数据可视化Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向 Logstash 和
Elasticsearch 发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。
ELK 架构
Filebeat将指定的日志采集,采集到之后推送到logstash,logstash负责对数据格式化处理。然后以键值的形式存储到es里面。Kibana负责对数据进行展示分析。
后面采集使用filebeat使得logstash专注于日志的格式化,过滤,采集还是使用filebeat更加轻量级。因为logstash太重了,消耗的资源是filebeat的几倍。所以使用filebeat代替logstash进行日志采集。
Elasticsearch
Elasticsearch(简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎, 用于集中存储日志数据。
Elasticsearch术语:
Index:索引是多个文档的集合Document:Index里每条记录称为Document,若干文档构建一个IndexType:一个Index可以定义一种或多种类型,将Document逻辑分组Field:ES存储的最小单元
如果你的日志每天上百G,那么es使用集群去部署,日志低于20G找个高性能的服务器跑个单实例也就够了。生产环境如果机器比较富裕使用三台独立的机器去部署三个节点的es。
Logstash不要和es部署在一块,因为logstash是非常消耗资源的。
Elasticsearch 集群可以干嘛?
在生产环境可以支撑起订单搜索,商品推荐,日志管理,风险控制,it运维,安全监控等不同领域的服务。
Elasticsearch可以做什么
是一款非常强大的开源搜索引擎,可以帮你从海量的数据当中找到你所想要的内容。比如你在gthub上进行搜索,它不仅可以帮助你找到相关的代码仓库,还可以帮助你实现代码级的搜索以及高亮显示。
当你在网上购物的时候,它可以帮助你做商品的推荐。
当你下班打车回家,elasticsearch可以帮助你定位附近的乘客和司机,帮助平台优化调度。
除了搜索结合kibana logstash beats。Elastic stack还被广泛应用在大数据实时分析的领域,包括了日志分析,指标监控,信息安全得多个领域。
它可以帮助你探索海量的结构化的,非结构化的数据。按需创建可视化的报表。对监控数据设置报警阈值,甚至使用机器学习技术自动识别异常的情况,及时发出警报。
ES 集群环境配置
(1)采用二进制部署
[root@localhost ~]# lsanaconda-ks.cfg elasticsearch-7.10.0-linux-x86_64.tar.gz[root@localhost ~]# tar xf elasticsearch-7.10.0-linux-x86_64.tar.gz [root@localhost ~]# lsanaconda-ks.cfg elasticsearch-7.10.0 elasticsearch-7.10.0-linux-x86_64.tar.gz[root@localhost ~]# mv elasticsearch-7.10.0 /usr/local/elasticsearch[root@localhost ~]# cd /usr/local/elasticsearch/[root@localhost elasticsearch]# lsbin config jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc
下面操作三台es上面全部修改
(2)创建es普通账号
Es是使用java语言开发的,意味着需要配置jdk,因为es包里面包含的jdk,就不要需要单独去安装了
[root@localhost elasticsearch]# ls jdk/bin conf include jmods legal lib man release
出于安全考虑是不能使用root启动的,因此需要创建普通账号让es去使用
[root@localhost bin]# ./elasticsearchCaused by: java.lang.RuntimeException: can not run elasticsearch as root
创建es账号,并且修改权限
[root@localhost elasticsearch]# useradd es[root@localhost elasticsearch]# su - es[es@localhost ~]$ cd /usr/local/elasticsearch/bin/[es@localhost bin]$ ./elasticsearchcould not find java in bundled jdk at /usr/local/elasticsearch/jdk/bin/java[es@localhost bin]$ ll /usr/local/elasticsearch/jdk/bin/javals: cannot access /usr/local/elasticsearch/jdk/bin/java: Permission denied[root@localhost ~]# chown -R es.es /usr/local/elasticsearch/可以看到有权限读取到了[es@localhost bin]$ ll /usr/local/elasticsearch/jdk/bin/java-rwxr-xr-x. 1 es es 12808 Nov 5 10:50 /usr/local/elasticsearch/jdk/bin/java
(3)配置系统相关参数,对系统有一定要求
整进程最大打开文件数数量
[2020-12-05T11:08:07,809][WARN ][o.e.b.BootstrapChecks ] [localhost.localdomain] max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
查看当前用户最大可用文件描述符
[es@localhost bin]$ ulimit -n 1024
临时生效
[root@localhost ~]# ulimit -n 65535 [root@localhost ~]# ulimit -n 65535
永久生效
[root@localhost ~]# vim /etc/security/limits.conf * hard nofile 65535* soft nofile 65535
调整最大虚拟内存区域数量
2020-12-05T11:08:07,809][WARN ][o.e.b.BootstrapChecks ] [localhost.localdomain] max number of threads [2940] for user [es] is too low, increase to at least [4096][2020-12-05T11:08:07,812][WARN ][o.e.b.BootstrapChecks ] [localhost.localdomain] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
临时设置
[root@localhost ~]# sysctl -w vm.max_map_count=262144vm.max_map_count = 262144
永久生效写在配置文件里面,重启也生效
[root@localhost ~]# echo "vm.max_map_count=262144" >> /etc/sysctl.conf [root@localhost ~]# sysctl -pvm.max_map_count = 262144
ES mater节点部署
因为要搭建集群,所以需要给集群取名,三个节点保持统一
cluster.name: elk-cluster
监听所有网络地址
network.host: 0.0.0.0
数据端口9200,客户端向es里面写数据使用9200端口
9200
集群配置主要有两个参数
这个是发现集群其他节点,也就是集群节点列表
#discovery.seed_hosts: ["host1", "host2"] 修改为discovery.seed_hosts: ["192.168.179.102", "192.168.179.103","192.168.179.104"]
当你第一次搭建集群的时候,启动第一个节点指定的master
cluster.initial_master_nodes: ["node-1"]
不经过选举使用node-1作为master,这样就完成了master节点配置,master配置如下
[root@localhost ~]# cat /usr/local/elasticsearch/config/elasticsearch.yml | grep -v "#"cluster.name: elk-clusternode.name: node-1network.host: 0.0.0.09200discovery.seed_hosts: ["192.168.179.102", "192.168.179.103","192.168.179.104"]cluster.initial_master_nodes: ["node-1"]
配置系统服务管理
[root@localhost ~]# cat /usr/lib/systemd/system/elasticsearch.service[Unit]Description=elasticsearch[Service]User=esLimitNOFILE=65535ExecStart=/usr/local/elasticsearch/bin/elasticsearchExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=on-failure[Install]WantedBy=multi-usertarget
启动并且观察es master的日志
[root@localhost ~]# systemctl daemon-reload[root@localhost ~]# systemctl enable elasticsearch[root@localhost ~]# systemctl start elasticsearch[root@localhost ~]# systemctl status elasticsearch?.elasticsearch.service - elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2020-12-05 20:09:27 CST; 51s ago
可以看启动过程是否异常
[root@localhost ~]# journalctl -u elasticsearch.service-- Logs begin at Sat 2020-12-05 19:15:09 CST, end at Sat 2020-12-05 20:10:24 CST. --Dec 05 20:09:27 localhost.localdomain systemd[1]: Started elasticsearch.Dec 05 20:09:27 localhost.localdomain systemd[1]: Starting elasticsearch...Dec 05 20:09:36 localhost.localdomain elasticsearch[1141]: 2020-12-05 20:09:36,334 main ERROR RollingFileManager (/usr/local/elasticsearch/logsDec 05 20:09:36 localhost.localdomain elasticsearch[1141]: at java.base/java.io.FileOutputStream.open0(Native Method)Dec 05 20:09:36 localhost.localdomain elasticsearch[1141]: at java.base/java.io.FileOutputStream.open(FileOutputStream.java:291)Dec 05 20:09:36 localhost.localdomain elasticsearch[1141]: at java.base/java.io.FileOutputStream.
[root@localhost ~]# ps -ef | grep javaes 1141 1 7 20:09 ? 00:00:55 /usr/local/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -XX:+ShowCodeDetailsInExceptionMessages -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=SPI,COMPAT -Xms1g -Xmx1g -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -Djava.io.tmpdir=/tmp/elasticsearch-18297922288182705720 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m -XX:MaxDirectMemorySize=536870912 -Des.path.home=/usr/local/elasticsearch -Des.path.conf=/usr/local/elasticsearch/config -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=true -cp /usr/local/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearchroot 1332 835 0 20:21 pts/0 00:00:00 grep --color=auto java[root@localhost ~]# netstat -tpln | grep -wE "9200|9300"tcp6 0 0 127.0.0.1:9200 :::* LISTEN 1141/java tcp6 0 0 ::1:9200 :::* LISTEN 1141/java tcp6 0 0 127.0.0.1:9300 :::* LISTEN 1141/java tcp6 0 0 ::1:9300 :::* LISTEN 1141/java
9300是集群节点通信端口 9200是数据端口
9200:9200 作为 Http 协议,主要用于外部通讯9300:9300 作为 Tcp 协议,jar 之间就是通过 tcp 协议通讯。ES 集群之间是通过 9300 进行通讯。
ES slave节点部署
其余两个节点和上面差不多的操作,其余节点不要启用该参数。这个在第一个个节点配置指定master
#cluster.initial_master_nodes: ["node-1", "node-2"]
配置systectl启动
[root@localhost ~]# vim /usr/lib/systemd/system/elasticsearch.service[Unit]Description=elasticsearch[Service]User=esLimitNOFILE=65535ExecStart=/usr/local/elasticsearch/bin/elasticsearchExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=on-failure[Install]WantedBy=multi-usertarget
备1
[root@localhost bin]# cat /usr/local/elasticsearch/config/elasticsearch.yml | grep -v "#"cluster.name: elk-clusternode.name: node-2network.host: 0.0.0.09200discovery.seed_hosts: ["192.168.179.102", "192.168.179.103","192.168.179.104"]
备2
[root@localhost ~]# cat /usr/local/elasticsearch/config/elasticsearch.yml | grep -v "#"cluster.name: elk-clusternode.name: node-3network.host: 0.0.0.09200discovery.seed_hosts: ["192.168.179.102", "192.168.179.103","192.168.179.104"]
验证集群状态
查看集群节点,*号代表master节点 负责整个集群管理的
[root@localhost ~]# curl -XGET '19 95 1 0.06 0.16 0.22 cdhilmrstw * node-1192.168.179.103 24 95 1 0.10 0.20 0.32 cdhilmrstw - node-2192.168.179.104 28 95 2 0.32 0.78 0.54 cdhilmrstw - node-3
访问api接口查看集群状态
[root@localhost ~]# curl -XGET ' "cluster_name" : "elk-cluster", 集群名称 "status" : "green", "timed_out" : false, "number_of_nodes" : 3, 几个节点 "number_of_data_nodes" : 3, 几个数据节点 "active_primary_shards" : 0, "active_shards" : 0, "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}
除了上面api可以查看集群状态,也可以安装图形界面管理es,下篇博客见
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~