目录
5.下载 node.js https://nodejs.org/en/download/
7.修改 elasticsearch 文件夹中,压缩文件的属主,属组
9.修改配置文件 elasticsearch.yml(每个节点都要修改)
问题1:Fatal error: Port 9100 is already in use by another process
【1】max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
【2】max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
问题3:显示 http://192.168.232.30:9200/ 集群健康值: 未连接
A.索引
正排索引:
正排索引是指文档ID为key,表中记录每个关键词出现的次数,查找时扫描表中的每个文档中字的信息,直到找到所有包含查询关键字的文档。
易维护;缺点是搜索的耗时太长;
倒排索引:
由于正排的耗时太长缺点,倒排就正好相反,是以word作为关键索引。表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
倒排在构建索引的时候较为耗时且维护成本较高,但是搜索耗时短。
a.html | 小明是一个三好学生 |
b.html | 小明是一个爱国人士 |
c.html | 小明是一个三好学生而且是一个爱国人士 |
拆词 | a.html | 小明 | 是 | 一个 | 三好学生 | ||||
拆词 | b.html | 小明 | 是 | 一个 | 爱国人士 | ||||
拆词 | c.html | 小明 | 是 | 一个 | 三好学生 | 而且 | 是 | 一个 | 爱国人士 |
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
正排索引 | 索引 | 内容 | 出现次数 | 位置 | |
a.html | 小明 | 1 | 1 | ||
是 | 1 | 2 | |||
一个 | 1 | 3 | |||
三好学生 | 1 | 4 | |||
b.html | 小明 | 1 | 1 | ||
是 | 1 | 2 | |||
一个 | 1 | 3 | |||
爱国人士 | 1 | 4 | |||
c.html | 小明 | 1 | 1 | ||
是 | 2 | 2,4 | 2,表示第一次出现的位置是, 4,表示第二次出现的位置是相对第一次出现的位置 | ||
一个 | 2 | 3,4 | |||
三好学生 | 1 | 4 | |||
而且 | 1 | 5 | |||
爱国人士 | 1 | 8 |
倒排索引 | 索引 | 位置 | ||
小明 | (a.html,1){1} | (b.html,1){1} | (c.html,1){1} | |
是 | (a.html,1){2} | (b.html,1){1} | (c.html,2){2,6} | |
一个 | (a.html,1){3} | (b.html,1){3} | (c.html,2){3,7} | |
三好学生 | (a.html,1){4} | (c.html,1){4} | ||
爱国人士 | (b.html,1){4} | (c.html,1){8} | ||
而且 | (c.html,1){5} | |||
(a,b){c,d} | a:表示出现的文章 | |||
b:表示该文章出现的次数 | ||||
c:表示该文章第一次出现的位置 | ||||
d:表示改文章第二次出现的位置 |
查询的数据在多个节点都存在
elsearch 会找到一个空闲的节点,作为临时的主节点,将其他节点的数据汇聚到该主节点
客户端发出请求后,临时的主节点,会向其他节点派发请求,获得所有包含数据的 document,将内容汇聚到主节点
主节点 | 负责计算,做倒排索引 |
备节点 | 数据备份,分担主的搜索压力 |
在一个 lucene 节点,多开启几个 Lucene 进程,这样在后面进行扩展的时候,可以不用对集群重新搭建,
只要将每个节点 Lucene 进程分配到新的节点即可
B.准备工作
1. 安装jdk11(集群中每个节点都要进行安装)
安装jdk https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
a.安装 jdk
rpm -ivh jdk-11.0.9_linux-x64_bin.rpm
b.修改 /etc/profile 文件,并重新加载
2.安装 elasticsearch-head 插件
缺少 head 插件 property [elasticsearch.version] is missing for plugin [head]
3.安装 git
4.使用 git 拉取安装包
git clone git://github.com/mobz/elasticsearch-head.git
5.下载 node.js https://nodejs.org/en/download/
6.上传到服务器,解压缩
tar -xvJf node-v14.15.0-linux-x64.tar.xz
7.修改 profile 配置文件
# set java environment
JAVA_HOME=/usr/java/jdk-11.0.9
JRE_HOME=/usr/java/jdk-11.0.9/jre
NODE_HOME=/app/node-v14.15.0-linux-x64
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$NODE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH NODE_HOME PATH
9.查看 node 的版本
10.下载 head
方法1:
git clone git://github.com/mobz/elasticsearch-head.git
或者
方法2:
直接在 https://github.com/mobz/elasticsearch-head 进行下载,然后进行解压
安装 unzip
yum -y install unzip
解压缩,
unzip elasticsearch-head-master.zip
11.安装head
npm install
使用原有的 npm 源,下载的速度非常的慢
修改 npm 源
npm config set registry https://registry.npm.taobao.org
清空缓存
npm cache clean --force
再次安装安装,下载的速度非常快
npm install
12.开启 head 服务 (在后台工作)
npm run start &
C.安装elasticsearch集群
只允许普通用户操作,不允许root用户
注意:因为elasticsearch有远程执行脚本的功能所以容易中木马病毒,所以不允许用root用户启动,root用户是起不来的,赋权限,用一般的用户启动
要配置network.host才能别的机器或者网卡访问,否则只能是127.0.0.1或者localhost访问,这里配置成自己的局域网ip
注意配置yml结尾的配置文件都需要冒号后面加空格才行
下载安装包 https://www.elastic.co/cn/downloads/elasticsearch
1.创建用户
后面对 elasticsearch 的所有操作,都必须使用该用进行(安装,启动),head 插件可以使用 root 用户进行安装
useradd elastic
2.修改密码
passwd elastic
3.根目录创建文件夹
mkdir elasticsearch
4.修改 文件夹的属组
chgrp elastic elasticsearch/
5.修改文件夹的权限
chmod 775 elasticsearch/
6.移动压缩文件到新建的文件夹
mv elasticsearch-7.10.0-linux-x86_64.tar.gz /elasticsearch/
7.修改 elasticsearch 文件夹中,压缩文件的属主,属组
chown elastic:elastic elasticsearch-7.10.0-linux-x86_64.tar.gz
8.切换用户,使用新建的用户解压缩
tar -xvzf elasticsearch-7.10.0-linux-x86_64.tar.gz
9.修改配置文件 elasticsearch.yml(每个节点都要修改)
cluster.name: yang_es
node.name: yang100
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
http.port: 9200
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.232.100","192.168.232.101", "192.168.232.102"]
discovery.zen.ping_timeout: 120s
client.transport.ping_timeout: 60s
10.启动 elastic 服务
./elasticsearch
11.通过浏览器访问
问题
问题1:Fatal error: Port 9100 is already in use by another process
npm ERR! Failed at the elasticsearch-head@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
显示的是,Fatal error: Port 9100 is already in use by another process. 应该是之前已经开启过服务了
查询端口,发现 elasticsearch-head 已经开启
netstat -ntlp | grep 9100
npm install -g grunt-cli
问题2:ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
【1】max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
vim /etc/security/limits.conf
elastic 代表的是 启动 elasticsearch 的用户
elastic hard nofile 65536
elastic soft nofile 65536
【2】max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
sysctl -w vm.max_map_count=262144
vim /etc/sysctl.conf
vm.max_map_count=262144
问题3:显示 http://192.168.232.30:9200/ 集群健康值: 未连接
通过浏览器访问 http://192.168.232.30:9100/
这个时候,将地址修改为正确的地址,显示集群健康值: 未连接,查看请求,发现请求被拦截
修改 elasticsearch.yml 文件,注意使用 elastic 用户进行
network.host: 0.0.0.0
#xpack.security.transport.ssl.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
再次启动集群,进行访问正常