ElasticSearch分布式特性
分布式特性es支持集群模式,是一个分布式系统,主要有以下好处:
增大系统容量,如内存、磁盘,使得es集群可以支持PB级的数据
提高系统可用性,即使部分节点停止服务,整个集群依然可以提供正常服务
es集群由多个es实例组成:
不同集群通过集群名称来区分,可通过cluster.name进行配置
每个es实例本质上是一个JVM进程,通过node.name配置实例名称
Cluster Statees集群相关的数据称为cluster state,主要记录如下信息:
节点信息,比如索引名称、连接地址等
索引信息:比如索引名称、配置等
……
Master Node一个集群只能有一个Master,只有master可以修改cluster state
cluster state存储在每个节点上,master维护最新版本并同步给其他节点
master节点是通过集群中所有节点选举产生的,可以被选举的节点称为master-eligible,可以通过node.master配置哪些节点可以被选举
Coordinating Node处理请求的节点称为coordinating节点,该节点为所有节点的默认角色 ...
ElasticSearch集群org.elasticsearch.discovery.MasterNotDiscoveredException问题
三台es实例的集群日志出现org.elasticsearch.discovery.MasterNotDiscoveredException问题
[WARN ][r.suppressed] [elasticsearch-01] path: /_cat/health, params: {pretty=, v=}org.elasticsearch.discovery.MasterNotDiscoveredException: null at org.elasticsearch.action.support.master.TransportMasterNodeAction$AsyncSingleAction$4.onTimeout(TransportMasterNodeAction.java:259) [elasticsearch-7.1.0.jar:7.1.0] at org.elasticsearch.cluster.ClusterStateObserver$ContextPreservingListener.onTimeo ...
ElasticSearch之Search
es提供Search API使我们能够对es中存储的数据进行查询分析,endpoint为_search,有以下查询形式:
GET /_search
GET /my_index/_search
GET /my_index1,my_index2/_search
GET /my_*/_search
URI Search通过url query参数来实现查询,常用参数如下:
q 指定查询的语句,默认语法 Query String Syntax
df q中不指定字段时默认查询的字段,如果不指定,es会查询所有字段
sort 排序,asc升序 desc降序
timeout 指定超时时间,默认不超时
from,size 用于分页
范查询在所有字段中匹配 alfred 的值,返回相关匹配的文档
# 开启profile参数可以对查询效率优化GET test_search/_search?q=alfred{ "profile": true}
指定字段查询查找username含有alfred的文档
GET test_search/_ ...
ElasticSearch之mapping
Mapping类似于数据库中的表结构定义,主要作用如下:
定义 Index 下的字段名(Field Name)
定义字段的类型,比如数值型、字符型、布尔型等
定义倒排索引相关的配置,比如是否索引、记录position等
数据类型核心数据类型:
字符串型 text、keyword
数值型:log、integer、short、byte、double、float、half_float、scaled_float
布尔:boolean
日期:date
二进制:binary
范围类型:integer_range、float_range、long_range、double_range、date_range
复杂数据类型:
数组类型 array
对象类型 object
嵌套类型 nested object
地理位置数据类型:
geo_point
geo_shape
专用类型:
记录ip地址 ip
实现自动补全 completion
记录分词数 token_count
记录字符串hash值 murmur3
percolator
join
多字段特征 multi-field ...
ElasticSearch分词
分词器是es中专门处理分词的组件,就是按照一定的逻辑,将一段文本分析成多个词语的工具
分词器组成如下:
character filters:针对原始文本进行处理,比如去除html特殊标记符
tokenizer:将原始文本按照一定规则切分为单词
token filters:针对tokenizer处理的单词进行再加工,比如转小写、删除或新增等处理
分词器es自带了以下的分词器:
standard(默认)
simple
whitespace
stop
keyword
pattern
language
Standard Analyzer标准分词器是默认分词器,如未指定,则使用该分词器
描述&特征:
默认分词器,如果未指定,则使用该分词器
按词切分,支持多语言
小写处理,它删除大多数标点符号、小写术语,并支持删除停止词
standard由以下组成:
tokenizer:standard tokenizer
token filter:standard token filter 、lower case token filter、stop token filter
curl - ...
ElasticSearch基本知识
ElasticSearch是一个基于Lucene的搜索服务器,它提供一个分布式多用户的全文搜索引擎,基于REST风格的web接口
常用术语
文档Document:es存储的数据是文档型的,一条数据对应一篇文档,即可以理解为mysql中的一行数据,一个文档可以有多个字段,即mysql数据库一行可以有多个列
索引Index:有具有相同字段的文档列表组成,一个文档的集合,对应mysql中的table。在es6.0之前一个index下可以创建多种type,有人将index比作database,type比作table,es6.0之后,index下只能创建一种类型的type,所以将index比作table会更好理解一点
节点Node:一个es的运行实例,是集群的构成单元
集群Cluster:由一个或多个节点组成
DocumentDocument其实就是一个Json Object,由字段(Field)组成,常见的数据类型如下:
字符串:text、keyword
数值型:log、integer、short、byte、double、float、half_float、scaled_float
布尔:b ...
Kubernetes部署filebeat
kubernetes部署filebeat搜集日志的方案大致分为两种:
daemonset模式:在每个节点跑一个filebeat用来采集标准输出和标准错误输出的日志,然后发送出去,也就是通过kubectl logs 能看到的日志,默认会存储在/var/log/containers/目录下
sidecar模式:就是在pod中再额外增加一个filebeat容器,通过emptdir共享目录使得filebeat能够采集到日志
我们使用第一种方式部署filebeat
应用 filebeat-kubernetes.yaml
# 修改下面内容 es地址,因为都在 log-system 名称空间下,es使用stafulset+headless部署 # - name: ELASTICSEARCH_HOST# value: es-out ---apiVersion: v1kind: ConfigMapmetadata: name: filebeat-config namespace: log-system labels: k8s-app: filebeatdata: fil ...
Ingress-nginx配置basic认证
创建用户密码文件安装htpasswd工具
yum install -y httpd-tools
创建认证文件,输入密码
# 名称一定要是 auth# -c表示创建文件htpasswd -c auth admin# 在增加一个用户htpasswd auth tangweifeng# 删除用户htpasswd -D auth admin
查看文件内容
# cat authtangweifeng:$apr1$u8Oa4OvD$Is5bWmcOveLex.TFgHB9c1admin:$apr1$ESHmtuXv$hVSij4XjWTAnhzFmNxjkg1
创建secretkubectl create secret generic basic-auth --from-file=authfile
在Ingress中使用apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: web annotations: kubernetes.io/ingress.class: " ...
Kubernetes部署kafka集群
kafka需要依赖zookeeper,所以需要先部署zk
准备存储参考文章:https://1335402049.github.io/2020/09/16/Kubernetes%E4%B8%AD%E4%BD%BF%E7%94%A8NFS%E7%9A%84StorageClass/
名称空间kubectl create ns log-system
部署zookeeper集群
应用 service
apiVersion: v1kind: Servicemetadata: name: zk-hs namespace: log-system labels: app: zkspec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None selector: app: zk---apiVersion: v1kind: Servicemetadata: name: zk-cs namespace: kafka labels: app ...
Kubernetes部署kibana
本文介绍在Kubernetes集群上的名称空间设置Kibana的过程
Namespacekubectl create ns log-system
Configmap# es-out 是es集群的headless svcapiVersion: v1kind: ConfigMapmetadata: name: kibana namespace: log-systemdata: kibana.yml: | server.name: kibana.twf.com server.host: "0.0.0.0" elasticsearch.hosts: ["http://es-out:9200/"]
DeploymentapiVersion: apps/v1kind: Deploymentmetadata: name: kibana namespace: log-systemspec: replicas: 1 selector: matchLabels: app: k ...