目录

  • kibana安装 & 增删改查 & es集群搭建
  • 一.kibana安装
  • 二、ES数据操作
  • 1.创建索引
  • 2.创建数据
  • 3.查询数据
  • 1)简单查询
  • 2)条件查询
  • 1>方法一:
  • 2>方法二:
  • 3>方法三:
  • 3)多条件查询
  • 1>must查询(相当远sql中的and)
  • 2>filter查询(和sql中的and差不多)
  • 3>should查询(相当于sql中的or)
  • 4>must_not查询(sql中的!=)
  • 5>must和should结合
  • 6>条件范围查询
  • 4.修改数据
  • 5.删除数据
  • 三、集群
  • 1.集群
  • 1)集群状态
  • 2)节点类型
  • 3)分片
  • 4)集群的特点
  • 5) 注意事项
  • 6)集群相关命令
  • 2.修改集群
  • 3.搭建集群
  • 4.集群监控

kibana安装 & 增删改查 & es集群搭建

一.kibana安装

es官网: https://www.elastic.co/

1)安装kibana

#上传代码包
[root@db01 ~]# rz kibana-6.6.0-x86_64.rpm

#安装
[root@db01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm

2)配置kibana

[root@db01 ~]# vim /etc/kibana/kibana.yml

[root@db01 ~]# grep "^[a-z]" /etc/kibana/kibana.yml
#进程的端口
server.port: 5601
#监听地址
server.host: "10.0.0.51"
#指定ES的地址
elasticsearch.hosts: ["http://10.0.0.51:9200"]
#kibana也会创建索引
kibana.index: ".kibana"

3)启动kibana

[root@db01 ~]# systemctl start kibana.service

#验证
[root@db01 ~]# netstat -lntp       
tcp        0      0 10.0.0.51:5601          0.0.0.0:*               LISTEN      88636/node

4)访问页面

http://10.0.0.51:5601

二、ES数据操作

1.创建索引

#语法:
PUT /<index>

#示例:
PUT /qiudao
PUT zengdao

2.创建数据

1)数据结构

ES存储数据三个必要构成条件

构成条件

说明

_index

索引(数据存储的地方)

_type

类型(数据对应的类)

_id

数据唯一标识符

2)语法

PUT /<index>/_doc/<_id>
POST /<index>/_doc/
PUT /<index>/_create/<_id>
POST /<index>/_create/<_id>

index:索引名称,如果索引不存在,会自动创建
_doc:类型
<_id>:唯一识别符,创建一个数据时,可以自定义ID,也可以让他自动生成

3)使用自定义ID插入数据

PUT /student/user/4
{
  "name":"congtianqi",
  "sex":"male"
}

#企业使用该方式少
	1.需要修改id值
	2.当指定ID时,插入数据时会查询数据对比ID值

4)使用随机ID插入数据

POST /student/user/
{
  "name":"liuxinyu",
  "sex":"fmale"
}

5)添加指定字段

POST /student/user/
{
  "id":"1",
  "name":"liuxinyu",
  "sex":"fmale"
}

#企业应用较多

3.查询数据

1)简单查询

#查看所有索引信息
GET _all
GET /_all

#查看所有索引的数据
GET _all/_search

#查看指定索引信息
GET student

#查看指定索引的数据
GET student/_search

#查看指定数据
GET student/user/1

2)条件查询

# 注意:
match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找,而term会直接对关键词进行查找。一般模糊查找的时候,多用match,而精确查找时可以使用term。
1>方法一:
GET /student/_search
{
  "query": {
    "term": {
      "age": {
        "value": "18"
      }
    }
  }
}
2>方法二:
GET /student/_search
{
  "query": {
    "term": {
      "age":"18"
    }
  }
}
3>方法三:
GET /student/_search
{
  "query": {
    "match": {
      "age": "18"
    }
  }
}

3)多条件查询

1>must查询(相当远sql中的and)
#查询条件必须全部满足
GET /student/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "age": {
              "value": "18"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "lhd"
            }
          }
        }
      ]
    }
  }
}
2>filter查询(和sql中的and差不多)
#跟must一样,只不过在数据量很大时,比must查询快一点
GET /student/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "age": {
              "value": "18"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "lhd"
            }
          }
        }
      ]
    }
  }
}
3>should查询(相当于sql中的or)
#多条件查询时,查询条件只要有一个满足就可以
GET /student/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": {
              "value": "18"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "lhd"
            }
          }
        }
      ]
    }
  }
}
4>must_not查询(sql中的!=)
# 将年龄不为18,名字不为lhd的全部都显示出来
GET /student/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"term": {
          "name": {
            "value": "lhd"
          }
        }},
        {"term": {
          "age": {
            "value": "18"
          }
        }}
      ]
    }
  }
}
5>must和should结合
#查询年龄是21岁或者年龄是18岁并且名字是lhd的数据
GET /student/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": {
              "value": "21"
            }
          }
        },
        {
          "bool": {
            "must": [
              {
                "term": {
                  "age": {
                    "value": "18"
                  }
                }
              },
              {
                "term": {
                  "name": {
                    "value": "lhd"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
6>条件范围查询
# 将年龄大于20小于25的全部显示
GET /student/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "age": {
              "gte": 20,
              "lte": 25
            }
          }
        }
      ]
    }
  }
}

4.修改数据

#修改数据时指定id修改
PUT /student/user/1
{
  "name":"song",
  "sex":"fmale",
  "age":"18"
}

#注意,修改数据时,除了要修改的值。其他的值也要带上,否则其他值直接被删除
PUT /student/user/2
{
  "name":"lhd",
  "sex":"man",
  "age":"19"
}

5.删除数据

#删除指定ID数据
DELETE /student/user/4

#删除索引
DELETE /student

三、集群

es kibana 使用 kibana配置es集群_elasticsearch

1.集群

1)集群状态

1.红色:数据都不完整
2.黄色:数据完整,但是副本有问题
3.绿色:数据和副本全都没有问题

2)节点类型

1.主节点:负责调度分配数据
2.数据节点:处理分配到自己的数据

3)分片

1.主分片:存储数据,负责读写数据
2.副本分片:主分片的备份

4)集群的特点

1.集群中的数据不论在哪一台机器操作,都可以看到
2.使用插件连接任意一台机器,都能看到三个节点
3.数据会自动分配到多个节点
4.如果主分片所在节点挂掉,副本节点的分片会自动升为主分片
5.如果主节点挂了,数据节点会自动提升为主节点

5) 注意事项

1.集群节点的配置,不需要将所有节点的IP都写入配置文件,只需要写本机IP和集群中任意一台机器的IP即可
	52配置:    discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]
	53配置:    discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.53"]

2.集群选举节点配置数量,一定是 集群数量/2+1
	discovery.zen.minimum_master_nodes: 2

3.ES默认5个分片1个副本,索引创建以后,分片数量不得修改,副本数可以修改

4.数据分配时分片颜色
	1)紫色:数据正在迁移
	2)黄色:数据正在复制

5.三个节点时,故障
	1)三个节点,没有副本时,一台机器都不能坏
	2)三个节点,一个副本时,可以坏两台,但是只能一台一台坏
	3)三个节点,两个副本时,可以随便随时坏两台

6)集群相关命令

1.查看主节点
GET _cat/master

2.查看集群健康状态
GET _cat/health

3.查看索引
GET _cat/indices

4.查看所有节点
GET _cat/nodes

5.查看分片
GET _cat/shards

2.修改集群

# 1.配置ES默认分片数和副本数
设置索引的分片数,默认为5 
#index.number_of_shards: 5  

设置索引的副本数,默认为1:  
#index.number_of_replicas: 1 

# 2.修改指定索引的副本数
PUT /index/_settings
{
  "number_of_replicas": 2
}

# 3.修改所有索引副本数
PUT _all/_settings
{
  "number_of_replicas": 2
}

# 4.创建索引时指定分片数和副本数
PUT /qiudao
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

· 注意:
1.分片数不是越多越好,会占用资源
2.每个分片都会占用文件句柄数
3.查询数据时会根据算法去指定节点获取数据,分片数越少,查询成本越低

# 5.企业中一般怎么设置
1.跟开发沟通
2.看一共要几个节点
    2个节点,默认就可以了
    3个节点,重要的数据,2副本5分片,不重要的数据,1副本5分片
3.在开始阶段, 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片. 
    例如:如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个.
4.存储数据量多的可以设置分片多一些,存储数据量少的,可以少分写分片

3.搭建集群

1.时间同步
2.安装Java环境
3.安装ES
4.配置ES
5.启动ES

# 基本安装(三台都需要)
1. 安装ntp时间同步工具
[root@db01 ~]# yum install -y ntpdate

2.时间同步阿里云
[root@db01 ~]# ntpdate time1.aliyun.com

3.上传jdk包,安装jdk
[root@db01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm 

4.上传elasticsearch安装包,并且安装
[root@db01 ~]# rpm -ivh elasticsearch-6.6.0.rpm 

5.修改启动文件,添加内存锁机制
[root@db01 system]# vim /usr/lib/systemd/system/elasticsearch.service 
LimitMEMLOCK=infinity

6.启动服务
注:根据安装操作后提示进行服务启动
[root@db01 ~]# systemctl daemon-reload
[root@db01 ~]# systemctl enable elasticsearch.service
[root@db01 ~]# systemctl start elasticsearch.service

7.集群搭建配置(三台配置有所不同)
[root@db01 system]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: tcy
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52", "10.0.0.53"]
discovery.zen.minimum_master_nodes: 2 

[root@db02 system]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: tcy
node.name: node-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.52,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52", "10.0.0.53"]
discovery.zen.minimum_master_nodes: 2

[root@db03 system]#  grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: tcy
node.name: node-3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.53,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52", "10.0.0.53"]
discovery.zen.minimum_master_nodes: 2 

8.查看端口
[root@db01 system]# netstat -lntup      
tcp6       0      0 10.0.0.51:9200          :::*                    LISTEN      9334/java           
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      9334/java           
tcp6       0      0 10.0.0.51:9300          :::*                    LISTEN      9334/java           
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      9334/java           
 
9.写入数据
[root@db01 system]#  curl -XPUT '10.0.0.51:9200/student?pretty'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "student"
}

4.集群监控

· 监控内容

1.查看集群健康状态
	GET _cat/health

2.查看所有节点
	GET _cat/nodes
	
#两者有一个产生变化,说明集群出现故障