PART Ⅰ : 容器云OPENSHIFT
- 安装
- 数据持久化
- 集群管理
- 数据持久化
- 管理
- 网络
- 安全审计
- 工具应用部署
PART Ⅱ:容器云 KUBERNETES
- 基础
- 原理
- 系统应用/网络CNI/TRaefik
- 安装
- 集群管理
- 用户认证ServiceAccount与授权策略RBAC
- K8S应用管理工具Helm
- 问题
- 辅助工具
- Doing:K8S 多集群管理与网络互联
- VM On K8S
PART Ⅲ:持续集成与持续部署
- CICD优化总结
- Jenkins
- Gitlab
- Drone
- Nexus
- 配置
- 使用OrientDB Console在DB层面修改配置
- [设置SMTP邮件服务](https://www.wenjiangs.com/doc/krrcu7ebin9hh
- 仓库管理
- 数据备份恢复
- API
- Jenkins相关插件
- 配置
- SonarQube静态代码扫描分析
- LDAP
- Apollo
- 项目管理工具
- Jira
- Redmine
- Harbor
- Vault
- Alfred
- Web IDE: VSCode
- DolphinScheduler
PART Ⅴ:日志/监控/告警
- Logging
- Kafka/Zookeeper
- Filebeat
- Metrics
- Tracing
- Sentry日志聚合告警平台
PART Ⅵ:基础
- Docker
- Shell脚本
- Mave
- git
- 正则表达式
- SSL/TLS
- Ceph
- 性能压力测试
- PXE+Kickstart
- netboot.xyz
- Tool
- Windows
- MacOS小技巧
- Linux
- Linux排错优化
- iptables详解
- MySQL
- Redis
- 负载均衡与代理
- 代理服务器
- Nginx
- GitBook
- Telegram机器人
- OpenVPN Server
- iDRAC
- vSphere
- Raspberry Pi树莓派
- 钉钉机器人
- Aliyun CLI
- 音、视频处理工具:fffmpeg
- 图片处理工具:Imagemagick
- PDF处理工具:Ghostscript
- Nvidia
- Virtualbox 虚拟机管理
- 阿里云产品使用总结
- RustDesk:可自建远程控制软件
- Poste:自建邮件服务器
- 使用 Jlink构建最小化依赖的 JRE 环境
- Aria2
- Asuswrt-Merlin
- Trap:Shell脚本信号跟踪
- 零散知识汇总
- BarkServer通知
- Synology
PART Ⅶ:数据存储、处理
PART VIII:CODE
- Python学习笔记
- 基础语法
- statik 将静态资源文件打包到二进制文件中
- HTML/CSS 学习笔记
- JavaScript学习笔记
PART X:HACKINTOSH
PART XI:安全
基础知识
Elasticsearch 是面向Document文档的,文档是所有可搜索数据的最小单位
文档会被序列化JSON格式,保存在Elasticsearch中
- JSON对象由字段组成
- 每个字段都有对应的字段类型 (字符串/数值/布尔/日期/二进制/范围类型)
每个文档都有一个Unique ID
- 手动指定ID
- 通过Elasticsearch自动生成
- 一个文档由Meta Data元数据与Source Data原始数据组成
{
"_index": "***", # 文档所存在的索引名
"_type": "_doc", # 文档所属的类型名
"_id": "***", # 文档的唯一ID
"_version": 1, # 文档的版本信息
"_score": null, # 文档相关性打分
"_source": { .... }, # 文档的原始JSON数据
"fields": { "***": [ "***" ] }, # 额外添加的字段
"sort": [ 1575256044058 ] # 排序
}
索引,即一系列documents的集合。
分片是独立的,对于一个Search Request的行为,每个分片都会执行这个Request。
分片分为两种类型:主分片(Primary Shard)和副本分片(Replica Shard)
- 主分片:用以解决数据水平扩展的问题,通过主分片,可以将数据分布到集群内的所有节点上(主从复制)
- 主分片在索引创建时指定,后续不允许修改,除非reindex
- 一个分片是一个运行的Lucene实例,Integer.MAX_VALUE - 128 = 2,147,483,519 个docs。
- 副本分片:用于解决数据高可用的问题,是主分片的拷贝(可以提高读吞吐量)
- 副本分片数,可动态调整
主分片和备分片不会出现在同一个节点上(防止单点故障
一个节点就是一个ElasticSearch的实例,本质上就是一个Java进程。
每个节点都有名字,通过配置文件,或者启动时候 -E node.name = node1指定
每一个节点在启动之后,会分配一个UID,保存在data目录下
生产环境中一个节点应该设置单一的角色(意味着节点可以多角色)
节点类型 | 配置参数 | 默认值 | 作用 | 备注 |
---|---|---|---|---|
master eligible | node.master | true | 每个节点启动后,默认就是一个Master eligible节点(可以设置node.master:false 禁止),Master-eligible节点可以参与选主流程,成为Master节点每个节点上都保存了集群的状态信息(所有节点信息,所有的索引和其相关的Mapping和Setting信息,分片路由信息),只有Master节点可以修改集群状态信息 | 可以参加选主 |
data | node.data | true | 当第一个节点启动,它会将自己选举成Master节点保存包含索引文档的分片数据,执行CRUD、搜索、聚合相关的操作。属于内存、CPU、IO密集型,对硬件资源要求高。 | 存储数据 |
ingest | node.ingest | True | ingest节点可以运行一些pipeline的脚本 | |
Coordinating | 无 | 负责接收Client请求,将请求分发到合适的节点,最终把结果汇聚在一起返回给客户端。每个节点默认都起到了Coordinating Node的职责 | 每个节点默认都是coordinating节点,设置其他类型全部为false | |
machine learning | node.ml | true(需要enable x-pack) | 机器学习 |
ES集群状态有三种:
- Green:所有主分片和备份分片都准备就绪(分配成功),即使有一台机器挂了(假设一台机器一个实例),数据都不会丢失,但会变成Yellow状态
- Yellow:所有主分片准备就绪,但存在至少一个主分片(假设是A)对应的备份分片没有就绪,此时集群属于警告状态,意味着集群高可用和容灾能力下降,如果刚好A所在的机器挂了,并且你只设置了一个备份(已处于未就绪状态),那么A的数据就会丢失(查询结果不完整),此时集群进入Red状态
- Red::至少有一个主分片没有就绪(直接原因是找不到对应的备份分片成为新的主分片),此时查询的结果会出现数据丢失(不完整)
Elasticsearch的写入请求主要包括:index、create、update、delete、bulk。bulk是实现对前四种的批量操作。
在6.x版本以后实际上走的都是bulk接口了。
- create/index是直接新增doc,delete是直接根据_id删除doc。
ES的任意节点都可以作为协调节点(coordinating node)接受请求,当协调节点接受到请求后进行一系列处理,然后通过_routing字段找到对应的primary shard,并将请求转发给primary shard, primary shard完成写入后,将写入并发发送给各replica, raplica执行写入操作后返回给primary shard, primary shard再将请求返回给协调节点
- Elasticsearch中每个index由多个shard组成,默认是5个,每个shard分布在不同的机器上。shard分为主分片和副本分片。
红色:Client Node(客户端节点)绿色:Primary Node(主分片节点)蓝色:Replica Node(副本分片节点)
Elasticsearch的核心优势就是近乎实时,为什么说是近乎实时而非真实意义上的实时呢,因为Elasticsearch能够做到准实时,而并不是完全的实时。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论