Elasticsearch 是一个分布式搜索服务,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。它可以快速的存储、搜索和分析海量数据。提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型的站点也是采用了ElasticSearch作为其搜索服务。
用途:检索,日志处理和分析,基础设施指标和容器监测,安全分析,业务分析等。
ES和Mysql 进行类比
1、Index(索引)
动词,相当于MySQL中的 insert;
名词,相当于MySQL中的 Database;
2、Type(类型)
在 Index(索引)中,可以定义一个或多个类型。
类似于 MySQL中的 Table;每一种类型的数据放在一起。
3、Document(文档)
保存在某个索引(index)下,某种类型(Type)的一个数据(Document),文档是 JSON 格式的,Document就是MySQL中的某个 Table 里面的内容;
类似关系:
索引—数据库
类型—表
文档—表中的记录
属性—列
4、倒排索引机制
分词:将整句分拆为单词,在检索的时候然后会给每个记录做相关性得分,然后从高到低情况排除给出。
Docker安装ES#
1、下载镜像文件
sudo docker pull elasticsearch:7.4.2 # 存储和检索数据
sudo docker pull kibana:7.4.2 # 可视化检索数据
在安装的时候看一下虚拟机内存是否够用,ES非常的吃内存
free -m
2、创建实例
切换到root用户
su root
> vagrant
2.1、ElasticSearch
创建配置文件目录,将docker内部es的配置文件挂载到外部,方便修改。
mkdir /mydata/elasticsearch/config
mkdir /mydata/elasticsearch/data
# 任何IP都可以访问,注意host和IP中间有空格
echo "http.host: 0.0.0.0" >>/mydata/elasticsearch/config/elasticsearch.yml
创建好目录之后,需要给该目录访问、执行的权限:
chmod -R 777 /mydata/elasticsearch/
运行镜像:
#运行ES
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
与ES交互的端口说明
9200端口
RESTful API通过HTTP通信
9300端口
Java客户端与ES的原生传输协议和集群交互
ES_JAVA_OPTS指定java虚拟机相关参数
-Xms128m 初始堆内存大小为128m
-Xmx256m 最大堆内存大小为256m
discovery.type=single-node 设置为单点启动
ES默认占内存很大,默认占2G,所以,一般在启动时需要指定固定的内存大小,这里我们设置为 128M。
启动之后,可以查看docker 的ES进程:
[root@localhost mydata]# docker ps
docker启动时加载出现了问题,使用 docker logs 查看启动日志:
然后通过浏览器访问ES:
Kibana
docker run --name kibana -e ELASTICSEARCH_URL=http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.4.2
http://192.168.56.10:9200 一定要改为自己ES虚拟机的地址。
查看是否运行成功:
docker ps
运行kibana
注意写自己的虚拟机ip
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.4.2
docker命令回顾
#列出正在运行的容器
docker ps
#显示所有的容器,包括未运行的
docker ps -a
#列出本地镜像
docker images
#docker删除容器
docker rm containerId
#docker删除镜像
docker rmi IMAGE ID
#启动容器
docker start CONTAINER ID
docker启动容器
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c628be051a39 kibana:7.4.2 "/usr/local/bin/dumb…" 15 hours ago Exited (255) 45 minutes ago 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
ff4f308525ca elasticsearch:7.4.2 "/usr/local/bin/dock…" 16 hours ago Exited (255) 45 minutes ago 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
e9687b99f262 redis "docker-entrypoint.s…" 2 weeks ago Up 35 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis
799d0d600e70 mysql:5.7 "docker-entrypoint.s…" 2 weeks ago Up 35 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
[root@localhost /]# docker start ff4f308525ca
ff4f308525ca
[root@localhost /]# docker start c628be051a39
c628be051a39
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c628be051a39 kibana:7.4.2 "/usr/local/bin/dumb…" 15 hours ago Up 6 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
ff4f308525ca elasticsearch:7.4.2 "/usr/local/bin/dock…" 16 hours ago Up 33 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
e9687b99f262 redis "docker-entrypoint.s…" 2 weeks ago Up 36 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis
799d0d600e70 mysql:5.7 "docker-entrypoint.s…" 2 weeks ago Up 36 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
[root@localhost /]#
因为每次启动虚拟机都需要重新启动es和kibana,所以做如下设置,开启虚拟机es和kibana自动启动
[root@localhost /]# docker update ff4f308525ca --restart=always
ff4f308525ca
[root@localhost /]# docker update c628be051a39 --restart=always
c628be051a39
[root@localhost /]#
ik分词器
官网下载
https://github.com/medcl/elasticsearch-analysis-ik/
(1)下载和ES对应的7.4.2版本。将文件解压后放到ES的插件挂载目录下
/mydata/elasticsearch/plugins/ik
(2)修改解压包权限:
chmod -R 777 ik/
(3)进入Es容器内部,查看安装好的插件
# 进入容器的bin目录
bin/
# 查看插件列表
[root@eba6d9092da5 bin]# elasticsearch-plugin list
ik
(4)重启es
(5)测试
POST _analyze
{
"tokenizer": "ik_smart",
"text": "天龙八部"
}
使用xshell连接vm
[root@localhost plugins]# vi /etc/ssh/sshd_config
[root@localhost plugins]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
进入 /etc/ssh/sshd_config
开启yes
# “PasswordAuthentication”设置是否允许口令验证
PasswordAuthentication yes
再次用xshell连接vm即可