Skip to content

Latest commit

 

History

History
219 lines (169 loc) · 5.44 KB

README.md

File metadata and controls

219 lines (169 loc) · 5.44 KB

springboot2 es

docker 安装常见报错

Docker安装 elasticsearch 报错max virtual memory areas vm.max_map_count [65530] is too low

max virtual memory areas vm.max_map_count [65530] is too low

vim /etc/sysctl.conf

# 一个进程可以拥有的 VMA( 虚拟内存区域 的数量 默认值为 65536
vm.max_map_count=655360


vim /etc/security/limits.conf

# 每个进程可以打开文件数限制
elastic soft nofile 65536
elastic hard nofile 65536

vim /etc/security/limits.d/20-nproc.conf

# 每个进程可以打开文件数限制
elastic soft nofile 65536
elastic hard nofile 65536

# 操作系统级别对每个用户创建的进程数限制
elastic hard nproc 10240

# 重新加载
sysctl -p

dockercompose部署ES遇到 Error opening log file ‘logs/gc.log’: Permission denied

elasticsearch-head 需要跨域访问

application/x-www-form-urlencoded 不支持JSON格式的内容体,需要修改 _site/vendor.js 中的内容
采用 `docker cp vendor.js container_id:/usr/src/app/_site` 的方法临时修改

elasticsearch-head 6.x 问题application/x-www-form-urlencoded

java.lang.IncompatibleClassChangeError: Found class org.elasticsearch.common.bytes.BytesReference, but interface was expected...

Caused by: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Fielddata is disabled on text fields by default...

参考用例

docker-compose搭建Elasticsearch集群和Kibana

docker-compose搭建elasticsearch集群

docker自定义elasticsearch镜像——集成IK分词器

配置项

# 集群名称,节点之间要保持一致
cluster.name: es-cluster

# 节点名称,集群内要唯一
node.name: node-9201
node.master: true
node.data: true

# ip 地址
network.host: localhost

# http 端口
http.port: 9201

# tcp 监听端口
transport.tcp.port: 9301

# 从节点配置
# discovery.seed_hosts: ["localhost:9301", "localhost:9302", "localhost:9303"]
# discovery.zen.fd.ping_timeout: 1m
# discovery.zen.fd.ping_retries: 5

# 集群内的可以被选为主节点的节点列表
# cluster.initial_master_nodes: ["node-9201", "node-9202", "node-9203"]

# 跨域配置
http.cors.enabled: true
http.cors.allow origin: "*"

读写流程

场景:
{
    number_of_shards: 3,
    number_of_replicas: 1
}

写流程:
1、客户端请求任意集群节点(协调节点)
2、协调节点将请求转换到指定节点
3、主分片保存数据
4、主分片将数据发送至副本(可通过配置修改,满足超过一半副本保存好数据就可以进行反馈)
5、副本保存后进行反馈
6、主分片进行反馈
7、客户端接收反馈

读流程:
1、客户端发送请求到协调节点
2、协调节点计算数据所在分片以及全部的副本位置
3、为了能够负载均衡,可以轮询所有节点
4、将请求转发给具体的节点
5、节点返回查询结果,将结果反馈给客户端

相关优化

JVM 内存

1、不超过物理内存的50%,Lucene会把文件缓存至内存中,如果物理内存设置过大,会导致Lucene可使用的内存变小 2、堆内存不超过32G,如果内存充足,设置到31G。指针在主内存和缓存器之间移动数据时,会占用带宽,设置过大,造成浪费。

分片策略

1、一个分片就是一个Lucene索引,会消耗文件句柄,内存,cpu资源 2、每个分片不超过ES最大内存,如果索引文件500G,那么分片就是500/32=16 3、分片数不超过节点数的3倍,比如3个节点,那么设置9个分片,在第2点中,需要16个分片,那么就需要申请至少5台服务器 4、节点数<=主分片数*(副本数+1)

路由公式

shard = hash(routing)%number_of_primary_shards

Bulk

批量提交数据量不能超过100M,单次批处理数据量从5M~15M逐渐增加

script

POST /blog/_doc/1
{
  "title": "我的第一篇博客",
  "body": "我是博客的内容",
  "createUser": "占钊"
}

# 更新
PUT /blog/_doc/1
{
  "title": "我的第一篇博客",
  "body": "我是博客的内容111",
  "createUser": "占钊"
}

# 更新body字段
POST /blog/_update/1
{
  "script" : {
        "source": "ctx._source.body = '我是博客的内容222'"
        
    }
}

GET /blog/_doc/1

# 查询所有
GET /blog/_search
{
  "query":{
    "match_all" : {}
  }
}
GET /notice/_search
{
  "query":{
    "match_all" : {}
  }
}
GET /notice/_search
{
  "query":{
    "match": {
      "contentCN": "服"
    }
  }
}
GET /notice/_search
{
  "query":{
    "match": {
      "content": "服务"
    }
  },
  "explain": true
}

GET /notice/_analyze
{
   "text":"商品和服务",
   "analyzer":"ik_max_word"
}
GET /notice/_analyze
{
   "text":"商品和服务",
   "analyzer":"ik_smart"
}
GET /notice/_mapping
PUT /notice/_mapping
{
  "properties": {
    "content_cn" : {
      "type" : "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    }
  }
}


# 删除
DELETE /blog/_doc/Ak-tvnEBIjNygBUDQ7pL
DELETE /notice