目录
- 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
三、集群
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
#两者有一个产生变化,说明集群出现故障