建设网站教程论坛,学院网站信息化建设总结,网站关于我们怎么做单页面,公司网站管理制度文章目录 一、ES是什么1.1、ES概念介绍1.2、技术架构1.2.1、Lucene介绍 1.3、ES的工作原理1.4、ES的适用场景 二、安装前的配置2.1、创建普通用户2.2、调整文件描述符数量和虚拟内存2.3、设置shell会话的资源限制#xff08;软限制和硬限制#xff09;2.4、增加虚拟内存的设置… 文章目录 一、ES是什么1.1、ES概念介绍1.2、技术架构1.2.1、Lucene介绍 1.3、ES的工作原理1.4、ES的适用场景 二、安装前的配置2.1、创建普通用户2.2、调整文件描述符数量和虚拟内存2.3、设置shell会话的资源限制软限制和硬限制2.4、增加虚拟内存的设置2.5、使虚拟内存配置立即生效 三、ES安装3.1、下载与解压3.2、配置文件修改3.3、依赖安装3.4、启动ES服务 一、ES是什么
1.1、ES概念介绍 ESElasticsearch是一种基于Lucene的搜索服务器具有实时分布式存储、搜索和分析引擎的功能。 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎可以快速地对大数据进行存储、搜索和分析。它是基于Java开发的作为Apache许可条款下的开放源码发布成为流行的企业级搜索引擎。 ES不仅具备强大的搜索能力还支持模糊查询和相关性搜索这使得它在处理大量数据时表现出色。相对于传统数据库ES能够更高效地进行模糊查询因为它内部使用倒排索引inverted index结构这种结构特别适用于快速的文本搜索。倒排索引将数据分词并建立索引使得搜索时能够快速找到相关文档而不是遍历整个数据集。 1.2、技术架构 ES的技术架构是一个高度可扩展的分布式系统旨在处理大规模的数据搜索和分析任务。 ES的底层依赖于Lucene这是一个高性能、全功能的搜索引擎库。然而Lucene的使用门槛较高需要开发者具备一定的信息检索知识并且直接集成到应用程序中。为了简化这一过程ES应运而生它使用Java编写内部采用Lucene进行索引和搜索并提供一套简单的RESTful API供用户使用。 在ES的架构中集群不需要依赖任何外部组件即可实现高可用性HA。集群中的节点通过自建的选举算法来选择master节点无需额外的系统如Zookeeper。 节点类型 Master节点负责保存和更新集群的元数据包括集群配置、节点信息、索引设置等。这些信息同步到所有节点以保持数据的一致性。Data节点负责数据的存储和查询操作。这些节点实际持有数据分片执行数据的读写操作。Coordinator节点负责路由索引请求和聚合搜索结果集以及分发批量索引请求起到负载均衡的作用。 Ingestor节点类似于Logstash用于处理和转换输入数据。 Master选举 选举策略如果集群中已存在master则认可该master如果不存在则从具有master资格的节点中选举出ID最小的节点作为master。选举时机包括集群启动时和现有master离开集群时。后台线程会定时检测master的状态若master异常离开则会重新进行选举。选举流程通过“过半原则”避免脑裂问题即任何新的master必须得到超过半数节点的票数才能当选确保集群稳定性。 数据存储 分片与副本ES通过分片方式实现数据的分布式存储每个索引被分成若干个分片均匀分布在不同节点上。同时通过副本分片提高数据的可用性和并发处理能力。写入过程数据先写入主分片成功后异步复制到副本分片。通过translog保证数据的持久性确保服务器宕机时数据不丢失。 数据查询 查询过程任意节点都可以作为查询请求的协调节点将请求转发到相关分片进行查询最后汇总各个分片的结果返回给客户端。负载均衡通过合理配置分片数量和副本数实现数据存储的负载均衡和高可用性。
1.2.1、Lucene介绍 Lucene是一个高性能、可扩展的开源Java库用于实现全文检索和搜寻功能。 Lucene最初由Doug Cutting开发他也是Hadoop的创始人之一。作为一个开源项目Lucene主要由Apache软件基金会支持并在Java开发社区中广泛使用。它提供了一个强大的应用程序接口API允许开发者在自己的应用程序中实现全文索引和搜索功能。 Lucene的核心功能包括全文搜索和索引建立这两者是实现高效数据检索的基础。在全文搜索中Lucene能够对非结构化数据进行快速查找和匹配这得益于其内部使用的“倒排索引”结构。倒排索引是一种数据结构通过将文档内容分词并建立索引从而快速定位相关文档位置而不需要遍历整个数据集。 索引过程 分词组件Tokenizer处理输入的文档将其分解成单词或词元Tokens去除标点符号和停用词如英文中的the、an等。例如文章 “Tom lives in Guangzhou, I live in Guangzhou too.” 经过分词后得到的结果为[Tom] [lives] [Guangzhou] [I] [live] [Guangzhou]。语言处理组件对得到的词元进行进一步处理如转换为小写、词根还原reduce to root form等。处理完的结果为[tom] [live] [guangzhou] [i] [live] [guangzhou]。索引组件Indexer将处理后的词构建成索引索引结构包含关键词、文章号[出现频率]、出现位置等信息。例如关键词 “guangzhou” 可能被存储为
关键词文章号[出现频率]出现位置guangzhou1[2]3, 6 搜索过程 词典查找用户输入查询字符串后Lucene会在词典中进行二元查找定位到该词的频率文件和位置文件。结果返回通过指针读出所有文章号并在具体文章中根据出现位置找到该词最终返回结果给用户。这种索引方式使得Lucene在首次建立索引时可能较慢但之后的搜索会非常迅速。 Lucene不仅提供强大的索引和搜索能力还具有高扩展性。其索引结构主要采用FST有限状态机实现这一结构具有查询速度快、内存占用少、结合内存和磁盘存储的优点。这使得Lucene能够支持大规模数据的检索同时在内存利用率和查询速度上都有优异表现。 1.3、ES的工作原理 ESElasticsearch的工作原理基于分布式、可扩展的架构和倒排索引机制能够实现高效的数据存储和检索功能。 分布式架构 节点类型ES集群由多个节点组成这些节点可以分成不同的类型包括Master节点、Data节点、Coordinator节点和Ingestor节点。Master节点负责保存和更新集群的元数据信息如集群配置、节点信息、索引设置等。Data节点则负责数据的存储和查询操作。分片与副本为了支持大规模数据ES将索引划分为多个分片每个分片可以独立存储和处理数据。同时每个分片可以有多个副本用于提供数据冗余、故障恢复和读取负载均衡。 数据写入流程 内存缓冲区与Translog当文档被写入ES时它们首先被放置在内存中的一个缓冲区中并同时记录到事务日志Translog中以确保数据的持久性。刷新操作随着时间的推移缓冲区中的数据会积累到一定量此时需要将这些数据刷新Refresh到Lucene的索引中形成新的段Segment。刷新操作会创建一个新的Lucene段并将缓冲区中的数据写入这个段中。Flush操作与刷新不同Flush操作会将内存中的数据以及Translog中的更改持久化到磁盘上。这是通过一个称为Flush的操作完成的该操作将所有缓冲的数据和Translog内容写入磁盘。 数据搜索过程 倒排索引ES使用Lucene作为其底层的搜索库Lucene构建倒排索引来加速搜索过程。倒排索引将文档中的单词映射到包含这些单词的文档列表从而实现快速查找和检索。查询执行当客户端发送搜索请求时请求首先到达一个协调节点。协调节点解析查询语句确定需要访问的分片并将请求转发给相应的数据节点。数据节点在本地执行查询并将结果返回给协调节点协调节点聚合来自各个数据节点的结果并进行排序、分页等处理最终将结果返回给客户端。 倒排索引结构 词条索引里面最小的存储和查询单元对于英文来说是一个单词对于中文则是分词后的一个词。词典是词条的集合记录单词到倒排列表的关联关系一般通过B树或哈希表实现。倒排列表记录了单词对应的文档结合由倒排索引项组成包括文档ID、词频TF、位置和偏移信息用于实现相关性评分、语句搜索和高亮显示。 数据副本机制 同步机制一旦文档被写入到主分片主分片会开始将数据同步到其对应的副本分片上。这个过程是异步进行的因此写入请求可以在主分片处理完毕后就返回给客户端。写入确认当主分片和足够数量的副本分片都成功写入了文档后协调节点会收到确认信息并向客户端发送成功的响应。 ES通过其分布式架构、倒排索引机制以及复杂的写入和查询流程确保了数据的高效存储和快速检索。这种设计不仅提高了系统的可用性和稳定性还带来了良好的扩展性和灵活的配置选项适应了现代大数据环境下的各种复杂应用场景。 1.4、ES的适用场景 全文搜索 网站搜索ES在网站搜索中表现出色能够提供快速、准确的搜索结果。例如电商网站的商品搜索功能可以通过ES实现支持对商品名称、描述、类别等信息的高效检索。文档管理系统在文档管理系统中ES能够实现对大量文档的快速搜索和分类。例如企业的内部知识库可以通过ES来构建员工可以迅速找到需要的资料。电子商务搜索电商平台通过ES提供强大的商品搜索功能用户可以进行关键词搜索、过滤和排序快速找到所需商品。例如京东、淘宝和拼多多等电商平台都使用ES来处理海量商品数据的搜索。 实时分析 实时监控系统ES能够实时处理和分析数据适用于实时监控系统。例如企业的实时销售数据可以通过ES进行追踪和分析帮助管理层及时调整销售策略。业务分析在业务分析中ES提供了低延迟的数据存储和查询功能使得企业能够实时分析业务数据发现潜在的机会和问题。例如金融行业可以利用ES进行交易数据的实时分析和预警。物联网数据处理ES在物联网场景中也有广泛应用能够处理来自传感器和设备的大量实时数据。例如工厂的生产线可以通过ES监控设备状态实时分析生产数据提高生产效率。 日志和事件数据分析 系统监控ES常用于系统监控通过收集和分析各种日志数据帮助识别系统问题和优化系统性能。例如公司的IT部门可以使用ES构建日志分析平台实时监控服务器和应用程序的运行状态。应用日志分析在应用日志分析中ES能够汇总和分析来自不同来源的应用日志帮助开发者定位问题和改进应用。例如软件开发团队可以使用ES分析应用的错误日志快速定位并修复bug。安全事件管理ES在安全事件管理中也有重要应用能够收集和分析安全事件数据帮助企业及时发现和应对安全威胁。例如网络安全公司可以使用ES构建SIEM安全信息和事件管理系统实时监测网络攻击和异常行为。 机器学习 异常检测ES的机器学习功能可以自动检测数据中的异常和异常行为有助于及时发现潜在的问题。例如银行的信用卡欺诈检测系统可以通过ES来实现自动识别异常交易行为。预测维护在工业领域ES的机器学习功能可以用于预测设备的维护需求减少设备故障和停机时间。例如制造企业可以利用ES分析设备的运行数据预测并提前进行设备维护。用户行为分析在用户行为分析中ES可以分析用户的行为数据挖掘用户的兴趣和偏好提升用户体验和营销效果。例如新闻推荐系统可以利用ES分析用户的阅读历史推荐感兴趣的内容。 地理数据应用 地图服务ES支持地理空间索引和搜索可以在地图服务中应用提供基于位置的搜索和可视化功能。例如旅游平台可以使用ES构建地图搜索功能帮助用户查找附近的景点和餐馆。物流管理在物流管理中ES可以用于优化配送路线和调度。例如快递公司可以利用ES实现智能路由规划提高配送效率。位置服务位置服务中ES可以帮助管理和分析大量的地理数据提供基于位置的服务和推荐。例如共享单车平台可以使用ES管理车辆的位置信息优化车辆分布和调度。 安全信息和事件管理 网络安全监控ES在网络安全监控中扮演着重要角色能够实时分析网络流量和日志识别潜在的网络威胁。例如企业的安全团队可以使用ES构建网络安全防护系统实时监测并应对网络攻击。入侵检测在入侵检测系统中ES能够分析各种安全事件数据识别异常行为和潜在的入侵行为。例如金融机构可以使用ES构建入侵检测系统保护客户资金和数据安全。威胁分析ES还可以用于威胁分析帮助安全专家分析复杂的安全事件找出潜在的攻击模式和源头。例如国家安全部门可以使用ES分析大量的网络情报数据识别并防范潜在的恐怖威胁。
二、安装前的配置
2.1、创建普通用户 由于ES禁止使用root用户启动需要创建一个普通用户来运行ES 创建一个组
[rootiZbp129gypomkv7w7deqpqZ ~]# groupadd elasticsearch创建一个普通用户并配置密码
[rootiZbp129gypomkv7w7deqpqZ ~]# useradd esroot
[rootiZbp129gypomkv7w7deqpqZ ~]# passwd esroot
Changing password for user esroot.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.将新用户添加到elasticsearch用户组
[rootiZbp129gypomkv7w7deqpqZ ~]# usermod -G elasticsearch esroot给esroot用户设置sudo权限 在 在root ALL(ALL) ALL一行下面添加esroot ALL(ALL) ALL [rootiZbp129gypomkv7w7deqpqZ /]# visudo
## Allow root to run any commands anywhere
root ALL(ALL) ALL
esroot ALL(ALL) ALL2.2、调整文件描述符数量和虚拟内存
[rootiZbp129gypomkv7w7deqpqZ /]# ulimit -n 65536
[rootiZbp129gypomkv7w7deqpqZ /]# ulimit -u 40962.3、设置shell会话的资源限制软限制和硬限制 在文本最后添加下面两段代码 [rootiZbp129gypomkv7w7deqpqZ /]# vi /etc/security/limits.conf
shcms soft nofile 65536
shcms hard nofile 655362.4、增加虚拟内存的设置 添加vm.max_map_count262144 [rootiZbp129gypomkv7w7deqpqZ /]# vi /etc/sysctl.conf
vm.swappiness 0
kernel.sysrq 1
vm.max_map_count262144net.ipv4.neigh.default.gc_stale_time 120# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter 0
net.ipv4.conf.default.rp_filter 0
net.ipv4.conf.default.arp_announce 2
net.ipv4.conf.lo.arp_announce 2
net.ipv4.conf.all.arp_announce 2# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets 5000
net.ipv4.tcp_syncookies 1
net.ipv4.tcp_max_syn_backlog 1024
net.ipv4.tcp_synack_retries 2
net.ipv4.tcp_slow_start_after_idle 02.5、使虚拟内存配置立即生效
[rootiZbp129gypomkv7w7deqpqZ /]# sysctl -p
vm.swappiness 0
kernel.sysrq 1
vm.max_map_count 262144
net.ipv4.neigh.default.gc_stale_time 120
net.ipv4.conf.all.rp_filter 0
net.ipv4.conf.default.rp_filter 0
net.ipv4.conf.default.arp_announce 2
net.ipv4.conf.lo.arp_announce 2
net.ipv4.conf.all.arp_announce 2
net.ipv4.tcp_max_tw_buckets 5000
net.ipv4.tcp_syncookies 1
net.ipv4.tcp_max_syn_backlog 1024
net.ipv4.tcp_synack_retries 2
net.ipv4.tcp_slow_start_after_idle 0三、ES安装
3.1、下载与解压
创建一个software文件夹
[rootiZbp129gypomkv7w7deqpqZ home]# mkdir software下载
[rootiZbp129gypomkv7w7deqpqZ software]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
--2024-08-11 14:56:47-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
Resolving artifacts.elastic.co (artifacts.elastic.co)... 34.120.127.130, 2600:1901:0:1d7::
Connecting to artifacts.elastic.co (artifacts.elastic.co)|34.120.127.130|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 296454172 (283M) [application/x-gzip]
Saving to: ‘elasticsearch-7.6.1-linux-x86_64.tar.gz’100%[] 296,454,172 6.65MB/s in 37s 2024-08-11 14:57:25 (7.56 MB/s) - ‘elasticsearch-7.6.1-linux-x86_64.tar.gz’ saved [296454172/296454172]解压
[rootiZbp129gypomkv7w7deqpqZ software]# mkdir /opt/es
[rootiZbp129gypomkv7w7deqpqZ software]# ls /opt
es
[rootiZbp129gypomkv7w7deqpqZ software]# tar -zxvf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /opt/es/
elasticsearch-7.6.1/
elasticsearch-7.6.1/lib/
elasticsearch-7.6.1/lib/elasticsearch-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-x-content-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-cli-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-core-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-secure-sm-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-geo-7.6.1.jar
elasticsearch-7.6.1/lib/lucene-core-8.4.0.jar3.2、配置文件修改
需要先切换到esroot用户
[rootiZbp129gypomkv7w7deqpqZ /]# su - esroot
[esrootiZbp129gypomkv7w7deqpqZ ~]$ 创建log和data目录
[esrootiZbp129gypomkv7w7deqpqZ ~]$ sudo mkdir -p /opt/es/elasticsearch-7.6.1/log
[sudo] password for esroot:
[esrootiZbp129gypomkv7w7deqpqZ ~]$ sudo mkdir -p mkdir -p /opt/es/elasticsearch-7.6.1/data
[esrootiZbp129gypomkv7w7deqpqZ ~]$ ls /opt/es/elasticsearch-7.6.1/
bin config data jdk lib LICENSE.txt log logs modules NOTICE.txt plugins README.asciidoc
[rootiZbp129gypomkv7w7deqpqZ ~]# cd /opt/es/elasticsearch-7.6.1/config
[rootiZbp129gypomkv7w7deqpqZ config]# ls
elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles
[rootiZbp129gypomkv7w7deqpqZ config]# rm -rf elasticsearch.yml
[rootiZbp129gypomkv7w7deqpqZ config]# ls
jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles
[rootiZbp129gypomkv7w7deqpqZ config]# vi elasticsearch.yml
[rootiZbp129gypomkv7w7deqpqZ config]# cat elasticsearch.yml
cluster.name: my-cluster
node.name: my-node
path.data: /opt/es/elasticsearch-7.6.1/data
path.logs: /opt/es/elasticsearch-7.6.1/log
network.host: 0.0.0.0cluster.name: my-cluster这是设置集群名称用于标识这个 Elasticsearch 集群。所有的节点都将共享这个名称。node.name: my-node这是设置每个节点的名称。在集群中每个节点都需要一个唯一的名称以便能够相互识别path.data: /opt/es/elasticsearch-7.6.1/data这是设置数据文件的存储路径。Elasticsearch 将使用这个路径来存储索引和快照path.logs: /opt/es/elasticsearch-7.6.1/log这是设置日志文件的存储路径。Elasticsearch 将使用这个路径来存储日志文件network.host: 0.0.0.0这是设置节点的网络主机。这意味着节点将监听所有网络接口。这对于分布式环境中的节点是必要的因为它们需要能够与其他节点通信 jvm.options文件可以根据自己的实际情况修改配置-Xms2g 是一个 Java 虚拟机JVM选项用于设置Java堆的初始大小最小值。在这个例子中初始堆大小被设置为 2GB2048MB。 3.3、依赖安装 ES的某些版本对JDK有特定要求需要确保系统中JDK的版本与ES版本兼容。ES 7.x以上通常内置了JDK环境不需要本地JDK支持。如果需要指定JDK版本可以在ES的bin目录中修改elasticsearch脚本设置正确的JAVA_HOME路径。 安装java环境
[rootiZbp129gypomkv7w7deqpqZ yum.repos.d]# vi CentOS-Base.repo
[rootiZbp129gypomkv7w7deqpqZ yum.repos.d]# cat CentOS-Base.repo
[base]
nameCentOS-$releasever - Base
mirrorlisthttp://mirror.centos.org/centos/$releasever/os/$basearch/mirror.lst
#baseurlhttp://mirror.centos.org/centos/$releasever/os/$basearch/
baseurlhttps://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck1
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7[updates]
nameCentOS-$releasever
enabled1
failovermethodpriority
baseurlhttp://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck1
gpgkeyhttp://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7[extras]
nameCentOS-$releasever
enabled1
failovermethodpriority
baseurlhttp://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck1
gpgkeyhttp://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
[rootiZbp129gypomkv7w7deqpqZ yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel extras mysql-connectors-community mysql-tools-community mysql57-community updates
Cleaning up list of fastest mirrors
[rootiZbp129gypomkv7w7deqpqZ yum.repos.d]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
[rootiZbp129gypomkv7w7deqpqZ /]# yum install java-11-openjdk-devel
[rootiZbp129gypomkv7w7deqpqZ /]# source /etc/profile
[esrootiZbp129gypomkv7w7deqpqZ /]$ vi /etc/profile
export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91.x86_64
export CLASSPATH.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH$PATH:$JAVA_HOME/bin3.4、启动ES服务
[esrootiZbp129gypomkv7w7deqpqZ /]$ su esroot
[esrootiZbp129gypomkv7w7deqpqZ /]$ cd /opt/es/elasticsearch-7.6.1/bin
[esrootiZbp129gypomkv7w7deqpqZ /]$ ./elasticsearch