一、 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

注意事项:

  1. 需安装Java运行环境,因为Elasticsearch基于Java语言开发的。
  2. RAM至少需要1G以上,因为Elasticsearch启动默认1G运行内存
  1. 下载安装包
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
  2. 解压文件
    tar -zxvf elasticsearch-6.2.4.tar.gz
  3. 修改配置文件
    进入解压后的config目录,vim elasticsearch.yml,找到network取消注释并将ip修改为本机ip
    network.host: 192.168.2.102
  4. 启动,进入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个错:

es可视化管理工具 windows11 es可视化界面_kibana


解决方案:

切换回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命令,启动成功 !
注:若还是启动失败,重启下系统再试应该没问题了。

es可视化管理工具 windows11 es可视化界面_es可视化管理工具 windows11_02



测试是否启动成功

浏览器访问 http://192.168.2.102:9200,响应如下 :

注:这种方式使用不太方便,后面使用Kibana可视化操作

es可视化管理工具 windows11 es可视化界面_Elastic_03

9300与9200端口区别

9300端口:ES节点之间通讯使用,是tcp协议端口号
9200端口:ES节点和外部通讯使用,暴露ES RESTful接口端口号

三、Linux环境安装Kibana(ES可视化界面)

Kibana是什么?

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
你可以用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。

安装Kibana(注意:Kibana版本不要高于Elasticsearch版本,尽量保持一致)

  1. 下载Kibana压缩包
    wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
  2. 解压
    tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
  3. 进入解压后的目录,修改配置 vim config/kibana.yml,将默认配置改成如下:
    server.port: 5601 # Kibana端口server.host: "192.168.2.102" # 你本机ipelasticsearch.url: "http:// 192.168.2.102:9200" # Elasticsearch地址
  4. 启动
    ./bin/kibana     后台启动:./bin/kibana &

浏览器访问: http://192.168.2.102:5601/app/kibana

es可视化管理工具 windows11 es可视化界面_es可视化管理工具 windows11_04


若页面提示:

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

es可视化管理工具 windows11 es可视化界面_Elastic_05

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)
  1. 为什么要进行版本控制
    为了保证数据再多线程操作下的准确性
  2. 悲观锁和乐观锁
    悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据准确性的操作
    乐观锁:假设不会发生并发冲突,只在提交操作是检查是否违反数据完整性。
  3. 内部版本控制和外部版本控制
    内部版本控制:_version自增长,修改数据后,_version会自动的加1
    外部版本控制:为了保持_version与外部版本控制的数值一致
    使用version_type=external检查数据当前的version值是否小于请求中的version值
### 如果当前文档(数据行)的version≠2, 则会更新失败
PUT /myindex/user/1?version=2   
{
  "name":"wangxu",
  "sex":0,
  "age":22
}