elasticsearch - 节点、集群分片及副本、CRUD

分布式系统的可用性和扩展性

  • 高可用性
    • 服务可用性 :允许有节点停止服务
    • 数据可用性 :部分节点丢失,不会丢失数据
  • 可扩展性
    • 请求量提升 / 数据的不断增长(将数据分布都所有接点上)

分布式特性

  • elasticsearch的分布式架构的好处
    • 存储的水平扩容
    • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
  • elasticsearch的分布式架构
    • 不同的集群通过不同的名字来区分,默认名字"elasticsearch"
    • 通过配置文件修改,或者在命令行中-E cluster.name=stark进行设定
    • 一个集群可以有一个或多个节点

节点

  • 节点是elasticsearch的实例
    • 本质上就是一个Java进程
    • 一台机器上可以运行多个elasticsearch进程,但是生产环境一般建议一台机器上只运行一个elasticsearch实例
  • 每一个节点都有名字,通过配置文件配置,或者启动的时候-E node.name=node1指定
  • 每一个节点在启动之后,会分配一个UID,保存在data目录下

分片

  • 主分片,用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
    • 一个分片是一个运行的Lucene的实例
    • 主分片数在索引创建时指定,后续不允许修改,除非Reindex
  • 副本 ,用以解决数据高可用的问题,分片是主分片的拷贝
    • 副本分片数,可以动态调整
    • 增加副本数,还可以在一定程度上提高服务的可用性
{
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
    }
}

查看集群的健康状况

  • Green - 主分片与副本都正常分配
  • Yellow - 主分片全部正常分配,有副本分片未能正常分片
  • Red - 有主分片未能分配

CRUD

1.使用PostMan创建一个名字叫stark的索引

http://127.0.0.1:9200/stark?pretty

# 返回值
{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "stark"
}

文档的CRUD

  • Type名,约定都用_doc
  • Create ,如果ID已经存在,会失败
  • Index ,如果ID不存在,创建新的文档。否则先删除现有文档,再创建新的文档,版本会增加。
  • Update ,文档必须已经存在,更新只会对相应字段做增量修改。

Create 一个文档

支持自动生成文档ID和指定文档ID两种方式:

  • 使用POST /indexName/_doc,系统会自动生成Document ID
  • 使用PUT /indexName/_create/ID创建时,URI中显示指定_create,此时如果该ID的文档已经存在,操作失败

GET 一个文档

GET http://127.0.0.1:9200/IndexName/_doc/ID

  • 找到文档,返回Http 200
    • 文档元信息,同一个ID的文档,即使被删除,Version号也会不断增加
    • _source 中默认包含了文档的所有原始信息
  • 找不到文档,返回Http 404

Index 文档

PUT IndexName/_doc/1
{
    "tags":["name","age","sex"]
}

Index和Create不一样的地方:如果文档存在,就索引新的文档。否则现有文档会被删除,新的文档被索引,版本信息(Version) + 1。

Update 文档

Update方法不会删除原来的文档,而是实现真正的数据更新,POST方法 ,Payload需要包含在doc中。

POST IndexNmae/_update/1
{
    "doc":{
        "albums":["aaa","bbb"]
    }
}

删除文档

DELETE IndexName/_doc/ID

Bulk API / 批量读取 mGet / 批量查询 msearch

Bulk Api 支持在一次Api调用中,对不同的索引进行操作,支持四种类型操作,Index\Create\Update\Delete。

可以在URI中指定Index,也可以在请求的Payload中进行,操作单挑操作失败,并不影响其他操作,返回结果包括了每一条操作执行的结果。

//对同一个索引进行操作
POST /IndexName/_doc/_bulk 

//对不同的索引进行操作
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

mGet批量操作,可以减少网络链接所产生的开销,提高性能。

#URI中指定index
GET /IndxName/_mget
{
    "docs" : [
        {

            "_id" : "1"
        },
        {

            "_id" : "2"
        }
    ]
}
//对不同的索引进行操作
GET /_mget
{
    "docs" : [
        {
            "_index" : "test",
            "_id" : "1"
        },
        {
            "_index" : "test",
            "_id" : "2"
        }
    ]
}

批量查询 msearch

### msearch 操作
POST kibana_sample_data_ecommerce/_msearch
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stark张宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值