Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。
Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。
采用倒排索引
Elasticsearch采用倒排索引实现,把关键字分词保存到搜索列表
横向可扩展性:
只需要增加台服务器,做一点儿配置,启动一下Elasticsearch就可以并入集群。
分片机制提供更好的分布性:同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制;分而治之的方式可提升处理效率。
高可用:
提供复制( replica) 机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其他可用节点上。
口使用简单:共需一条命令就可以下载文件,然后很快就能搭建一一个站内搜索引擎。
大型分布式日志分析系统ELK elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)
大型电商商品搜索系统、网盘搜索引擎等。
Elasticsearch是文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:
{
“name” : “yushengjun”,
“sex” : 0,
“age” : 25
}
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
Linux内存至少1G!
由于Elasticsearch是Java写的,所以需要安装jdk环境。
下载链接:https://pan.baidu.com/s/1RTx6r5wD0jaT1VUS5MUD_Q
提取码:oplr
将安装包使用上传工具上传到 Linux 上面的 /usr/local 目录下并且解压。
执行解压命令
tar -zxvf elasticsearch-6.4.3.tar.gz
进入到es目录下的config文件夹下面,修改 elasticsearch.yml文件
network.host: 192.168.91.7 # 这是当前linux ip地址
http.port:9200 # 访问端口号(HTTP协议外部通信),另外有9300的内部通信端口号
9200端口: ES节点 和 外部 通讯使用,暴露ES RESTful接口端口号
9300端口: ES节点之间通讯使用,TCP协议端口号,ES集群之间通讯端口号
如果此时启动,会报错 root不能启动的哦 不能通过root账号启动 这是属于自身的安全策略,
解决方案:先创建一个非root 用户
cd /usr/local # 切换到local目录
groupadd esxwhy # 创建一个用户分组
useradd esmark -g esxwhy -p 123456 # 创建一个用户,设置密码为123456
passwd esmark # 修改用户密码,用于登录(大于8位,不能纯数字)
chown -R esmark:esxwhy elasticsearch-6.4.3 # 为该用户授权
su esmark # 切换用户
启动
cd /usr/local/elasticsearch-6.4.3/bin
./elasticsearch # 启动
最后添加–> m.max_map_count=655360
执行命令
cd /etc # 进入到/ect目录
sysctl -p
最后添加以下代码(root账户下操作)
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
此时需重启linux 服务器生效
如防火墙未关闭则执行防火墙关闭命令 systemctl stop firewalld.service
启动
cd /usr/local/elasticsearch-6.4.3/bin # 进入bin目录
./elasticsearch # 启动
如下访问:ip+:9200,出现以下启动成功(http://192.168.177.128:9200/)
Elasticsearch在Linux下使用命令sh elasticsearch start,按键ctrl+c的时候程序就会stop掉,如何将程序在后台启动呢?
./elasticsearch: Permission denied # 设置权限
./elasticsearch -d # 后台启动
ps aux|grep elasticsearch # 查看是否启动成功
访问:ip+:9200,查看是否启动成功
上传 kibana-6.4.3-linux-x86_64.tar.gz 到 Linux 服务器
需要root 用户操作,如非root 用户则切换root用户
us root # 切换为root用户
tar -zxvf kibana-6.4.3-linux-x86_64.tar.gz # 解压
chown -R esmark:esxwhy kibana-6.4.3-linux-x86_64 # 为该用户授权(方便操作两个服务,都使用 esmark 用户)
us esmark # 切换用户
进入到kibana的bin目录执行命令
./kibana # 启动
nohup ./kibana & # 如需后台启动 执行该命令
启动成功如下
访问 http://192.168.177.128:5601
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心内容 分片机制、集群发现、分片负载均衡请求路由。
ES集群采用分片模式,取模算法实现索引文件均分到每台服务器
注意:索引的主分片primary shards定义好后,后面不能做修改。也就是服务器数量
1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储。
每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards。
注意:索引的主分片primary shards定义好后,后面不能做修改。
2、为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡。
注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。,主分片primary shards可以和其他replics shards存放在同一个node节点上。
如需Kibana,第三个步骤也重复
注意:使用VM 虚拟机直接克隆服务器,data文件会导致数据不同步,启动报failed to send join request to master错误,需清除每台服务器data文件
准备三台服务器集群
服务器名称 IP地址
node-1 192.168.212.182
node-2 192.168.212.183
node-3 192.168.212.184
vi elasticsearch.yml
cluster.name: myes # 保证三台服务器集群名称一定要相同(分别配置3台服务器)
node.name: node-1 # 每个节点名称不一样 其他两台为 node-2 ,node-3
network.host: 192.168.212.180 # 当前服务器实际 ip地址
discovery.zen.ping.unicast.hosts: ["192.168.212.184", "192.168.212.185","192.168.212.186"] # 多个服务集群ip
discovery.zen.minimum_master_nodes: 1
关闭防火墙分别启动elasticsearch
systemctl stop firewalld.service
默认底层开启9300 集群
随意一台服务器访问 : http://192.168.212.185:9200/_cat/nodes?pretty
出现如下表示配置成功
*号表示为master节点