`Elasticsearch 6.0 Liunx环境安装
Elasti 官网
https://www.elastic.co/cn/
中文社区
https://elasticsearch.cn/
官网api
https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html
Elasticsearch简单介绍
Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。
Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。
Elasticsearch优势 三大扩展性
横向可扩展性
:只需要增加台服务器,做一点儿配置,启动一下Elasticsearch就可以并入集群。
分片机制提供更好的分布性
:同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制;分而治之的方式可提升处理效率。
高可用
:提供复制( replica) 机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其他可用节点上。
口使用简单:共需一条命令就可以下载文件,然后很快就能搭建一一个站内搜索引擎。
Elasticsearch应用场景
大型分布式日志分析系统ELK elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)
大型电商商品搜索系统、网盘搜索引擎等。
Elasticsearch存储结构
Elasticsearch是文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:
{
"name" : "yushengjun",
"sex" : 0,
"age" : 25
}
存储结构
**关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
Linux环境安装Elasticsearch**
1、
安装JDK环境变量
安装jdk出现的问题
解决 因为权限不够
1)进入存放jdk文件的文件夹路径
我这里是 usr/local/
2)输入命令 chmod 777 jdk1.8.0_181/bin/java修改权限
注意(jdk1.8.0_181 是你jdk的名字)
3)再次输入 java -version 成功
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
2、
下载elasticsearch安装包
**下载elasticsearch安装包 官方文档https://www.elastic.co/downloads/elasticsearch
注意:linux安装内存建议1g内存以上 3、上传elasticsearch安装包 4、解压elasticsearch tar -zxvf
elasticsearch-6.4.3.tar.gz
5、修改elasticsearch.yml、
安装在/usr/local
进入 cd config
进入cat jvm options
jvm options(这里面有jvm内存)默认启动内存1g
-xms 1g 初始化内存 最小内存
-Xmx 1g 最大内存
进入 elasticsearch.yml 修改文件
network.host: 118.25.11.4实际ip地址
http.port: 9200** es外部端口号 9300 是es内部端口号
启动 ./elasticsearch
启动elasticsearch报错
Cd /usr/local/elasticsearch-6.4.3/bin ./elasticsearch can not run
elasticsearch as root
**
解决方案
:
**
**因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户
第一步:先创建一个分组 groupadd XXX (分组名字 eswd )
第二步: 创建一个用户 useradd XXX(名字eswdd) -p XXXX(分组的名字 eswd ) -p 密码()
第三部 : 要给当前用户一个 Elasticsearch 文件 chown -R XXX(名字):(分组名字) Elasticsearch 文件
在根目录授权
切换es 创建的用户 : su (名字)
继续错误
第一种解决 看jvm 虚拟内存是否一G
第二种 以root 账号 进去 vi/etc/sysctl.conf 修改 添加
#For more information, see sysctl.conf(5) and sysctl.d(5).下面添加
vm.max_map_count=655360
第二步 sysctl -p
第一步:liunx创建新用户 adduser XXX 然后给创建的用户加密码 passwd XXX 输入两次密码。
第二步:切换刚才创建的用户 su XXX 然后执行elasticsearch 会显示Permission denied 权限不足。
第三步:给新建的XXX赋权限,chmod 777 * 这个不行,因为这个用户本身就没有权限,肯定自己不能给自己付权限。所以要用root用户登录付权限。
第四步:root给XXX赋权限,chown -R XXX /你的elasticsearch安装目录。
然后执行成功。**
创建一个分组
groupadd esmayikt
useradd esyushengjun -g esmayikt -p 123456
chown -R esyushengjun:esmayikt elasticsearch-6.4.3
su esyushengjun 切换用户
继续报错
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] is
vi /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
重启服务器即可
报错
解决
:后面要加空格
network.host: 118.25.11.4实际ip地址
http.port: 9200** es外部端口号 9300 是es内部端口号
重启
./elasticsearch -d
7、
访问elasticsearch
关闭防火墙 systemctl stop firewalld.service
http://192.168.212.151:9200
9300与9200区别
9300端口: ES节点之间通讯使用
9200端口: ES节点 和 外部 通讯使用
Linux环境安装Kibana
Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。
**
Kibana环境安装
**
Tar -zxvf kibana-6.4.3-linux-x86_64.tar.gz
vim config/kibana.yml
将默认配置改成如下:
server.port: 5601
server.host: "192.168.212.151"
elasticsearch.url: "http:// 192.168.212.151:9200"
启动Kibana
./bin/kibana
http://192.168.212.179:5601/app/kibana
Kibana实现增删改查
###创建索引
PUT /mymayikt
####查询索引
GET /mymayikt
####添加文档 /索引名称/类型/id
PUT /mymayikt/user/1
{
“name”:“yushengjun”,
“sex”:0,
“age”:22
}
查询文档
GET /mymayikt/user/1
删除索引
DELETE /mymayikt
Elasticsearch版本控制
1.为什么要进行版本控制
为了保证数据再多线程操作下的准确性
2.悲观锁和乐观锁
悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据准确性的操作
悲观锁:假设不会发生并发冲突,只在提交操作是检查是否违反数据完整性。
3.内部版本控制和外部版本控制
内部版本控制:_version自增长,修改数据后,_version会自动的加1
外部版本控制:为了保持_version与外部版本控制的数值一致
使用version_type=external检查数据当前的version值是否小于请求中的version值
PUT /mymayikt/user/1?version=2
{
“name”:“yushengjun”,
“sex”:0,
“age”:22
}
SpringBoot整合Elasticsearch
maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
application.yml
spring:
data:
elasticsearch:
####集群名称
cluster-name: myes
####地址
cluster-nodes: 192.168.212.151:9300
实体类层
@Document(indexName = "mymayikt", type = "user")
@Data
public class UserEntity {
@Id
private String id;
private String name;
private int sex;
private int age;
}
Dao类层
public interface UserReposiory extends CrudRepository<UserEntity, String> {
}
控制器层
@RestController
public class EsController {
@Autowired
private UserReposiory userReposiory;
@RequestMapping("/addUser")
public UserEntity addUser(@RequestBody UserEntity user) {
return userReposiory.save(user);
}
@RequestMapping("/findUser")
public Optional<UserEntity> findUser(String id) {
return userReposiory.findById(id);
}
}
启动项目
@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.mayikt.repository")
public class AppEs {
public static void main(String[] args) {
SpringApplication.run(AppEs.class, args);
}
}
报错以下错误
None of the configured nodes are available:
解决方案
:
Vi /usr/local/elasticsearch-6.4.3/config/elasticsearch.yml
cluster.name: myes