一、 Elasticsearch简介
1.1 ES定义
ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
1.2 Lucene与ES关系?
1)Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
1.3 Elasticsearch优势
1)横向可扩展性:只需要增加台服务器,做一点儿配置,启动一下Elasticsearch就可以并入集群。
2)分片机制提供更好的分布性:同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制;分而治之的方式可提升处理效率。
3)高可用:提供复制( replica) 机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其他可用节点上。
口使用简单:共需一条命令就可以下载文件,然后很快就能搭建一一个站内搜索引擎。
1.4 ES应用场景:
1)大型分布式日志分析系统ELK elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)
2)大型电商商品搜索系统、网盘搜索引擎等。
1.5 ES存储结构:
Elasticsearch是文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:
{
“name” : “wangxu”,
“sex” : 0,
“age” : 25
}关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
二、Linux环境安装Elasticsearch
注意事项:
- 需安装Java运行环境,因为Elasticsearch基于Java语言开发的。
- RAM至少需要1G以上,因为Elasticsearch启动默认1G运行内存
- 下载安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
- 解压文件
tar -zxvf elasticsearch-6.2.4.tar.gz
- 修改配置文件
进入解压后的config目录,vim elasticsearch.yml
,找到network取消注释并将ip修改为本机ipnetwork.host: 192.168.2.102
- 启动,进入bin目录
./elasticsearch
后台启动:./elasticsearch &
启动报错:
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.2.4.jar:6.2.4]
原因:因为安全问题Elasticsearch不让用root用户直接运行,所以要创建新用户。
解决方案:
groupadd eswangxu #添加用户组
useradd esuser -g eswangxu -p 123456 #添加用户
chown -R esuser:eswangxu elasticsearch-6.2.4 #授权该用户文件目录
su esuser #切换用户
然后进入bin目录启动继续报2个错:
解决方案:
切换回root用户(需要输入登录密码)
su root
1.修改配置文件
vim /etc/sysctl.conf
新增如下内容
vm.max_map_count=655360
进入etc目录执行 sysctl -p
2.修改配置文件vim /etc/security/limits.conf
新增如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
最后进入elasticsearch的bin目录,切换esuser用户,执行./elasticsearch
命令,启动成功 !
注:若还是启动失败,重启下系统再试应该没问题了。
测试是否启动成功
浏览器访问 http://192.168.2.102:9200,响应如下 :
注:这种方式使用不太方便,后面使用Kibana可视化操作
9300与9200端口区别
9300端口:ES节点之间通讯使用,是tcp协议端口号
9200端口:ES节点和外部通讯使用,暴露ES RESTful接口端口号
三、Linux环境安装Kibana(ES可视化界面)
Kibana是什么?
Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
你可以用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。
安装Kibana(注意:Kibana版本不要高于Elasticsearch版本,尽量保持一致)
- 下载Kibana压缩包
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
- 解压
tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
- 进入解压后的目录,修改配置
vim config/kibana.yml
,将默认配置改成如下:server.port: 5601 # Kibana端口
server.host: "192.168.2.102" # 你本机ip
elasticsearch.url: "http:// 192.168.2.102:9200" # Elasticsearch地址
- 启动
./bin/kibana
后台启动:./bin/kibana &
浏览器访问: http://192.168.2.102:5601/app/kibana
若页面提示:
t appears you’re running the oss-only distribution of Elasticsearch.
To use the full set of free features in this distribution of Kibana, please update Elasticsearch to the default distribution.
原因:Kibana 的版本号不能比 ElasticSerach 的版本号高,否则不支持。大版本号相同的情况下,中版本号可以比 ElasticSearch 低,但是会有警告。版本尽量保持一致即可避免这个问题。
测试检查集群健康状态(使用Dev Tools)
GET _cat/health?v
Kibana实现增删改查
# 创建索引
PUT /myindex
# 查询索引
GET /myindex
# 添加文档 /索引名称/类型/id
PUT /myindex/user/1
{
"name":"wangxu",
"sex":0,
"age":22
}
# 修改文档,将name修改为张三(注意:修改后_version会自增1) /索引名称/类型/id
PUT /myindex/user/1
{
"name":"zhangsan",
"sex":0,
"age":22
}
# 查询文档
GET /myindex/user/1
# 删除索引
DELETE /myindex
Elasticsearch版本控制(CAS)
- 为什么要进行版本控制
为了保证数据再多线程操作下的准确性 - 悲观锁和乐观锁
悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据准确性的操作
乐观锁:假设不会发生并发冲突,只在提交操作是检查是否违反数据完整性。 - 内部版本控制和外部版本控制
内部版本控制:_version自增长,修改数据后,_version会自动的加1
外部版本控制:为了保持_version与外部版本控制的数值一致
使用version_type=external检查数据当前的version值是否小于请求中的version值
### 如果当前文档(数据行)的version≠2, 则会更新失败
PUT /myindex/user/1?version=2
{
"name":"wangxu",
"sex":0,
"age":22
}