示例
http://localhost:9200/article_ik_pinyin
{
“settings”: {
“number_of_shards”:“6”,
“number_of_replicas”:“1”,
“index”:{
“analysis”: {
“analyzer”: {
“ik_pinyin_analyzer”: {
“type”:“custom”,
“tokenizer”:“ik_max_word”,
“filter”:“pinyin_filter”
}
},
“filter”:{
“pinyin_filter”:{
“type”:“pinyin”,
“keep_first_letter”:false
}
}
}
}
},
“mappings”: {
“article_ik_pinyin”: {
“properties”: {
“id”: {
“type”:“text”
},
“title”: {
“analyzer”:“ik_pinyin_analyzer”,
“type”:“text”
}
}
}
}
}
elasticsearch-sql
地址:https://github.com/NLPchina/elasticsearch-sql/
内核参数设置
设置内核参数
vim /etc/sysctl.conf
添加如下内容:
fs.file-max=65536
vm.max_map_count=262144
之后可以使用sysctl –a查看 –p刷新
设置资源参数
[root@hadoop3 opt]# vi /etc/security/limits.conf
添加一下内容:
-
soft nofile 65536
-
hard nofile 131072
-
soft nproc 2048
-
hard nproc 4096
修改进程数
[root@hadoop3 opt]# vi /etc/security/limits.d/20-nproc.conf
-
soft nproc 4096
节点分为四个类型:
-
主节点:即 Master 节点。主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。
-
数据节点:即 Data 节点。数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对 CPU、内存、IO 要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
-
负载均衡节点:也称作 Client 节点,也称作客户端节点。当一个节点既不配置为主节点,也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
-
预处理节点:也称作 Ingest 节点,在索引数据之前可以先对数据做预处理操作,所有节点其实默认都是支持 Ingest 操作的,也可以专门将某个节点配置为 Ingest 节点。
常规配置
cluster.name: laker # 集群名称,同名称为集群节点
node.name: node-1 # 节点名称,默认会随机取名称 仅仅是描述名称,用于在日志中区分
node.master: true # 是否为master节点
node.data: true # 是否为数据节点
network.host: 0.0.0.0
在elasticsearch.yml增加配置:
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
transport.tcp.compress: true
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。
#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host
#(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。
#请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]
discovery.zen.ping.unicast.hosts: [“192.168.8.101:9300”, “192.168.8.103:9300”, “192.168.8.104:9300”]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
#为了避免脑裂,集群节点数最少为 半数+1
discovery.zen.minimum_master_nodes: 2
添加优化配置,只在master节点配置即可
discovery.zen.ping_timeout: 200s
discovery.zen.fd.ping_timeout: 200s
discovery.zen.fd.ping_interval: 30s
discovery.zen.fd.ping_retries: 5
脑裂问题
假设使用两个节点, 启动后, 集群会选举一个master, 一切ok. 但是如果存在网络问题或者某个节点无响应(负载过高), 就会认为对方dead了, 然后两个节点自动选举为master, 在后续建索引的时候造成数据不一致.
两个节点防脑裂的配置, minimum_master_nodes决定了选主需要的最少节点数, N/2+1, 两个节点即2
discovery.zen.minimum_master_nodes: 2
索引查看
http://ip:9200/_cat/indices?v
kibana
es官方提供的可视化套件,集成了es开发工具、报表、仪表盘、数据挖掘等功能https://www.elastic.co/guide/en/kibana/current/targz.html
kibana6.7+才支持汉化
-
集群规划
-
存储策略
-
索引拆分
-
压缩
-
冷热分区等
什么是时序索引?其主要特点体现在如下两个方面:
- **存,**以时间为轴,数据只有增加,没有变更,并且必须包含 timestamp(日期时间,名称随意)字段。
其作用和意义要大于数据的 id 字段,常见的数据比如我们通常要记录的操作日志、用户行为日志、或股市行情数据、服务器 CPU、内存、网络的使用率等。
- **取,**一定是以时间范围为第一过滤条件,然后是其他查询条件,比如近一天、一周、本月等等,然后在这个范围内进行二次过滤。
比如性别或地域等,查询结果中比较关注的是每条数据和 timestamp 字段具体发生的时间点,而非 id。
集群规划
Elasticsearch(下称 ES)集群中有两个主要角色:Master Node 和 Data Node
Master Node
Master Node,整个集群的管理者,负有对 index 的管理、shards 的分配,以及整个集群拓扑信息的管理等功能。
Master Node 可以通过 Data Node 兼任,但是,如果对群集规模和稳定要求很高的话,就要职责分离,Master Node 推荐独立,它的状态关乎整个集群的存活。
Master 的配置:
node.master: true
node.data: false
node.ingest: false
这样 Master 不参与 I、O,从数据的搜索和索引操作中解脱出来,专门负责集群的管理工作,因此 Master Node 的节点配置可以相对低一些。
防止 ES 集群 split brain(脑裂),合理配置 discovery.zen.minimum_master_nodes
参数,官方推荐 master-eligible nodes / 2 + 1
向下取整的个数。
这个参数决定选举 Master 的 Node 个数,太小容易发生“脑裂”,可能会出现多个 Master,太大 Master 将无法选举。
Data Node
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
[外链图片转存中…(img-JtXnKnUT-1712411963452)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算