1. 安装与部署
1.1 安装JavaJDK
1.1.1 解压
tar -xvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.8_10.tar.gz
1.1.2 更改目录名称java
mv jdk-11.0.8+10 java
1.1.3 配置环境变量
使用vim /etc/profile 编辑profile文件 输入: vim /etc/profile 向文件里面追加以下内容:
#set java environment
JAVA_HOME=/soft/es/java
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
1.1.4 使文件生效
source /etc/profile
1.1.5 测试配置是否成功
java -version
1.2 安装ES
1.2.1 解压
tar -xvf elasticsearch-7.6.1-linux-x86_64.tar.gz
1.2.2 更改名称
mv elasticsearch-7.6.1 es
2. 启动ES
2.1 ES不能用root用户登录
需要创建用户,创建一个名叫es的用户
useradd es
为es用户设置密码
passwd es
给用户es访问es目录的权限
chown -R es /usr/local/jdk/es
2.2 jvm的内存需要重新配置
启动内存默认1G 如果配置低需要修改启动内存
可以更改成256m
2.3 因为2.1 权限问题需要更改一些文件
/etc/security/limits.conf
增加内容
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
/etc/security/limits.d/20-nproc.conf
增加内容
es soft nproc 4096
root soft nproc unlimited
/etc/sysctl.conf
增加内容
vm.max_map_count=655360
已root 用户执行命令
sysctl -p
2.4 启动es
2.4.1 切换用户
su es
2.4.2 修改es配置文件
/usr/local/jdk/es/config/elasticsearch.yml
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /usr/local/jdk/es/data
#
# Path to log files:
#
path.logs: /usr/local/jdk/es/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["node-1"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
http.cors.enabled: true # elasticsearch中启用CORS
http.cors.allow-origin: "*" # 允许访问的IP地址段,* 为所有IP都可以访问
2.4.3 正式启动ES
./bin/elasticsearch
3. 安装es-head 可视化插件
3.1 安装nodeJs
# 下载安装包
wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz
# 解压
tar -xvf node-v12.18.1-linux-x64.tar.xz
# 重命名
mv node-v12.18.1-linux-x64.tar.xz node
# 添加环境变量
vim /etc/profile -- 编辑文件
# 添加以下内容
export PATH=$PATH:/usr/local/jdk/node/bin
# 刷新
source /etc/profile
# 测试
node -v
npm -v
3.2 上传 elasticsearch-head-master.zip
# 解压
unzip elasticsearch-head-master.zip
# 重命名
mv elasticsearch-head-master es-head
# 进入目录
cd es-head
# 安装依赖
npm install
# 关闭防火墙
firewall-cmd --add-port=9100/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 启动
npm run start
3.3 安装kibana
也会存在不能root 启动
# 解压
tar -xvf kibana-7.6.1-linux-x86_64.tar.gz
# 重命名
mv kibana-7.6.1-linux-x86_64 kibana
# 创建用户 密码 和 权限
useradd kibana
passwd lsn25511042
chown -R kibana /usr/local/jdk/kibana
# 关闭防火墙
firewall-cmd --add-port=5601/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 允许外部访问
/usr/local/jdk/kibana/config/kibana.yml
修改 server.host "0.0.0.0"
# 启动
进入./kibana/bin目录启动 ./kibana
4 ES的基本概念
4.1 Es和关系型数据库的区别
| 关系型数据库 | ElasticSearch |
|---|---|
| 数据库 | 索引 |
| 表 | 类型 |
| 行 | 文档 |
| 字段 | 字段 |
elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包 含多 个文档(行),每个文档中又包含多个字段(列)。
物理设计
elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移 一个人就是 一个集群!默认的集群名称就是 elaticsearh
逻辑设计
一个索引类型中,包含多个文档,比如说文档1,文档2。 当我们索引一篇文档时,可以通过这样的一各 顺 序找到 它: 索引 ▷ 类型 ▷ 文档ID ,通过这个组合我们就能索引到某个具体的文档。 注意:ID不必是整 数, 实际上它是个字 符串。
之前说elasticsearch是面向文档的,那么就意味着索引和搜索数据的最小单位是文档,elasticsearch 中,文档有几个 重要属性 :
- 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含 key:value!
- 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的! {就是一个json对象! fastjson进行自动转换}
- 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用, 在 elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个 新的字 段。
尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类 型, 可以是字符 串也可以是整形。因为elasticsearch会保存字段和类型之间的映射及其他的设置。这种 映射具 体到每个映射的每种类型,这也是为什么在elasticsearch中,类型有时候也称为映射类型。
索引
就是数据库!
索引是映射类型的容器,elasticsearch中的索引是一个非常大的文档集合。索引存储了映射类型的字段 和其他设置。 然后它们被存储到了各个分片上了。 我们来研究下分片是如何工作的。
一个集群至少有一个节点,而一个节点就是一个elasricsearch进程,节点可以有多个索引默认的,如果 你创 建索引,那么索引将会有个5个分片 ( primary shard ,又称主分片 ) 构成的,每一个主分片会有一个 副本 ( replica shard ,又称复制分片 )
上图是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某 个 节点挂掉 了,数据也不至于丢失。 实际上,一个分片是一个Lucene索引,一个包含倒排索引的文件 目 录,倒排索引的结构使 得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的 关键 字。 不过,等等,倒排索引是什 么鬼?
倒排索引
elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层。这种结构适用于快速的 全文 搜索, 一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。
如果要搜索含有 python 标签的文章,那相对于查找所有原始数据而言,查找倒排索引后的数据将会快 的 多。只需要 查看标签这一栏,然后获取相关的文章ID即可。完全过滤掉无关的所有数据,提高效率!
elasticsearch的索引和Lucene的索引对比
在elasticsearch中, 索引 (库)这个词被频繁使用,这就是术语的使用。 在elasticsearch中,索引被 分为 多个分片,每份 分片是一个Lucene的索引。所以一个elasticsearch索引是由多个Lucene索引组成 的。别问 为什么,谁让elasticsearch使用Lucene作为底层呢! 如无特指,说起索引都是指elasticsearch 的索引。
接下来的一切操作都在kibana中Dev Tools下的Console里完成。基础操作!
4.2 ik分词器
4.2.1 安装
在elasticsearch目录的plugins解压elasticsearch-analysis-ik-7.6.1.zip
unzip elasticsearch-analysis-ik-7.6.1.zip
分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中 或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如:
"中国的花"会被分为"中","国","的","花",这显然是不符合要求的,所以我们需要安装中文分词器ik来解决这个问题
如果要使用中文,建议使用ik分词器!
IK提供了两个分词算法:ik_smart 和 ik_max_word,其中 ik_smart 为最少切分,ik_max_word为最细 粒度划分!
4.2.2 分词
ik_smart为最少切分
ik_max_word为最细粒度划分!穷尽词库的可能!字典!
5 elasticsearch基本操作
一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交 互 类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
基本Rest命令说明:
| method | url地址 | 描述 |
|---|---|---|
| PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
| POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
| POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
| DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
| GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |
| POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
关于索引的基本操作
1、创建一个索引!
PUT /索引名/~类型名~/文档id {请求体}
- 指定字段类型
- 字符串类型 text 、 keyword
- 数值类型 long, integer, short, byte, double, float, half_float, scaled_float
- 日期类型 date PUT /索引名/
类型名/文档id {请求体} - 布尔值类型 boolean
- 二进制类型 binary
- 等等
6 后台启动Es
Elasticsearch在linux下使用命令sh elasticsearch start,按键ctrl+c的时候程序就会stop掉,如何 将程序在后台启动呢?
需要使用:./elasticsearch -d
这时执行的时候会出现没有权限./elasticsearch: Permission denied
需要授权执行命令:chmod +x bin/elasticsearch
再次执行./elasticsearch -d即可启动
使用ps aux|grep elasticsearch可以查看是否启动
7 npm 后台启动
yum provides */nohup
nohup npm start &
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
停止程序
ps -ef | grep npm
ps -ef | grep node