索引模板、ES集群迁移

索引模板:
    1)查看所有的索引模板:
GET http://10.0.0.103:9200/_template


    2)创建/修改索引模板索引模板
POST http://10.0.0.103:9200/_template/oldboyedu-linux82
{
    "aliases": {
        "DBA": {},
        "SRE": {},
        "K8S": {}
    },
    "index_patterns": [
        "oldboyedu-linux82*"
    ],
    "settings": {
        "index": {
            "number_of_shards": 3,
            "number_of_replicas": 0
        }
    },
    "mappings": {
        "properties":{
            "ip_addr": {
                "type": "ip"
            },
            "access_time": {
                "type": "date"
            },
            "address": {
                "type" :"text"
            },
            "name": {
                "type": "keyword"
            }
        }
    }
}


    3)创建索引不指定分片和副本验证
PUT http://10.0.0.103:9200/oldboyedu-linux83-222222222222222


    4)创建索引指定分片和副本验证,手动设置的索引参数优先级高于索引模板
PUT http://10.0.0.103:9200/oldboyedu-linu82-3333333333333333333333
{
    "settings":{
        "number_of_shards": 10
    }
}


    5)删除索引模板
DELETE http://10.0.0.103:9200/_template/oldboyedu-linux82
    
    
    6)注意事项
1.创建索引时,若指定了分片数量和副本数量,则优先级高于索引模板的配置;
2.创建索引时,若未制定任何配置,则会使用默认的索引模板配置;
3.创建索引时,若没有和任何自定义的索引模板匹配,对于ES7而言,默认的分片数量是1,副本是1,而对于ES 6而言,分片数是5,副本数是1;

    
    
    
ES集群迁移
    (1)迁移的前提条件是要修改ES的配置文件,指定允许的白名单地址列表
vim /oldboyedu/softwares/elasticsearch-7.17.5/config/elasticsearch.yml 
...
reindex.remote.whitelist: "10.0.0.101:19200"

    (2)同步配置文件到其它节点,并重启服务
data_rsync.sh /oldboyedu/softwares/elasticsearch-7.17.5/config/elasticsearch.yml 
systemctl restart es7

    (3)同一个集群迁移索引-ES6--->ES6
POST http://10.0.0.101:19200/_reindex
{
    "source": {
        "index": "teacher"
    },
    "dest": {
        "index": "oldboyedu-students"
    }
}


    (4)跨集群版本迁移-ES6 ---> ES7
POST http://10.0.0.101:9200/_reindex
{
    "source": {
        "index": "teacher",
        "remote": {
            "host" : "http://10.0.0.101:19200"
        }
    },
    "dest": {
        "index": "oldboyedu-teacher-es7"
    }
}


    (5)迁移集群时过滤数据
POST http://10.0.0.101:19200/_reindex
{
    "source": {
        "index": "teacher",
        "remote": {
            "host": "http://10.0.0.101:19200"
        },
        "query": {
            "match_phrase": {
                "name": "苍老师"
            }
        },
        "_source": ["name","hobby"]
    },
    "dest": {
        "index": "oldboyedu-teacher-es7-002"
    }
}

ES集群监控状态的API:
(1)安装jq工具
yum -y install epel-release
yum -y install jq


(2)测试取数据
curl http://10.0.0.103:9200/_cluster/health 2>/dev/null| jq
curl http://10.0.0.103:9200/_cluster/health 2>/dev/null| jq .status
curl http://10.0.0.103:9200/_cluster/health 2>/dev/null| jq .active_shards_percent_as_number


相关参数说明:
    cluster_name
        集群的名称。

    status
        集群的健康状态,基于其主分片和副本分片的状态。
        ES集群有以下三种状态:
            green
                所有分片都已分配。
            yellow
                所有主分片都已分配,但一个或多个副本分片未分配。
                如果集群中的某个节点发生故障,则在修复该节点之前,某些数据可能不可用。
            red
                一个或多个主分片未分配,因此某些数据不可用。这可能会在集群启动期间短暂发生,因为分配了主分片。

    timed_out
        是否在参数false指定的时间段内返回响应(默认情况下30秒)。

    number_of_nodes
        集群内的节点数。

    number_of_data_nodes
        作为专用数据节点的节点数。

    active_primary_shards
        可用主分片的数量。

    active_shards
        可用主分片和副本分片的总数。

    relocating_shards
        正在重定位的分片数。

    initializing_shards
        正在初始化的分片数。

    unassigned_shards
        未分配的分片数。

    delayed_unassigned_shards
        分配因超时设置而延迟的分片数。

    number_of_pending_tasks
        尚未执行的集群级别更改的数量。

    number_of_in_flight_fetch
        未完成的提取次数。

    task_max_waiting_in_queue_millis
        自最早启动的任务等待执行以来的时间(以毫秒为单位)。

    active_shards_percent_as_number
        集群中活动分片的比率,以百分比表示。

ES集群的设置及优先级(settings):
如果您使用多种方法配置相同的设置,Elasticsearch 会按以下优先顺序应用这些设置:
    (1)Transient setting(临时配置,集群重启后失效)
    (2)Persistent setting(持久化配置,集群重启后依旧生效)
    (3)elasticsearch.yml setting(配置文件)
    (4)Default setting value(默认设置值)


(1)查询集群的所有配置信息
GET http://10.0.0.103:9200/_cluster/settings?include_defaults=true&flat_settings=true 


(2)修改集群的配置信息
PUT http://10.0.0.103:9200/_cluster/settings
{
    "transient": {
        "cluster.routing.allocation.enable": "none"
    }
}


相关参数说明:
"cluster.routing.allocation.enable":
    "all":
        允许所有分片类型进行分配。
    "primaries"
        仅允许分配主分片。
    "new_primaries"
        仅允许新创建索引分配主分片。
    "none":
        不允许分配任何类型的分配。
        
参考链接:
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-get-settings.html
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-update-settings.html

集群状态API(state)
集群状态是一种内部数据结构,它跟踪每个节点所需的各种信息,包括:
    (1)集群中其他节点的身份和属性
    (2)集群范围的设置
    (3)索引元数据,包括每个索引的映射和设置
    (4)集群中每个分片副本的位置和状态
    
    
(1)查看集群的状态信息
GET http://10.0.0.103:9200/_cluster/state


(2)只查看节点信息。
GET http://10.0.0.103:9200/_cluster/state/nodes


(3)查看nodes,version,routing_table这些信息,并且查看以"oldboyedu*"开头的所有索引
http://10.0.0.103:9200/_cluster/state/nodes,version,routing_table/oldboyedu*


推荐阅读:
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-state.html

集群统计API:
Cluster Stats API 允许从集群范围的角度检索统计信息。返回基本索引指标(分片数量、存储大小、内存使用情况)和有关构成集群的当前节点的信息(数量、角色、操作系统、jvm 版本、内存使用情况、cpu 和已安装的插件)。


(1)查看统计信息
GET http://10.0.0.103:9200/_cluster/stats


推荐阅读:
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-stats.html

查看集群的分片分配情况:
集群分配解释API的目的是为集群中的分片分配提供解释。

对于未分配的分片,解释 API 提供了有关未分配分片的原因的解释。

对于分配的分片,解释 API 解释了为什么分片保留在其当前节点上并且没有移动或重新平衡到另一个节点。

当您尝试诊断分片未分配的原因或分片继续保留在其当前节点上的原因时,此 API 可能非常有用,而您可能会对此有所期待。

(1)分析teacher索引的0号分片未分配的原因。
GET http://10.0.0.101:9200/_cluster/allocation/explain
{
  "index": "teacher",
  "shard": 0,
  "primary": true
}


推荐阅读:
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-allocation-explain.html
    
    
    
    
集群分片重路由API:
reroute 命令允许手动更改集群中各个分片的分配。

例如,可以将分片从一个节点显式移动到另一个节点,可以取消分配,并且可以将未分配的分片显式分配给特定节点。


POST http://10.0.0.101:9200/_cluster/reroute  # 将"teacher"索引的0号分片从elk102节点移动到elk101节点。
{
    "commands": [
        {
            "move": {
                "index": "teacher",
                "shard": 0,
                "from_node": "elk102.oldboyedu.com",
                "to_node": "elk101.oldboyedu.com"
            }
        }
    ]
}


POST http://10.0.0.101:9200/_cluster/reroute  # 取消副本分片的分配,其副本会重新初始化分配。
{
    "commands": [
        {
            "cancel": {
                "index": "teacher",
                "shard": 0,
                "node": "elk101.oldboyedu.com"
            }
        }
    ]
}

推荐阅读:
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-reroute.html
    
            
            
            
            

数据流和索引声明周期管理:
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/data-streams.html
    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/index-lifecycle-management.html

倒排索引:

啥是linux?

--- > 1.分词 ----> 啥,是,Linux。


--- > 2.逐一去字典匹配。


--- > 3.查倒排表

    返回文档的ID。
    
--- > 4.获取文档。
    hash(文档ID) % 主分片  ----> 分片编号 ----》 去节点取数据。


乐观锁机制:
两种方法通常被用来解决并发更新时变更不会丢失的解决方案:
    悲观并发控制:
        这种方法被关系型数据库广泛使用,它假定有变更冲突可能发生,因此阻塞访问资源以防止冲突。一个典型的例子是修改一行数据之前像将其锁住,确保只有获得锁的线程能够对这行数据进行修改。

    乐观锁并发控制:
        ES中使用的这种方法假设冲突是不可能发生的,并且不会阻塞正在尝试的操作。然而,如果源数据在读写当中被修改,更新将会失败。应用程序接下来该如果解决冲突。例如,可以重试更新,使用新的数据,或者将相关情况报告给用户。
        
        

(1)创建文档
PUT http://10.0.0.103:9200/oldboyedu_student/_doc/10001
{
    "name": "杨润阔",
    "age":25,
    "hobby":["苍老师","老男孩","欧美"]
}


(2)模拟事物1修改
POST http://10.0.0.103:9200/oldboyedu_student/_doc/10001/_update?if_seq_no=0&if_primary_term=1
{
    "doc": {
        "hobby": [
            "日韩",
            "国内"
        ]
    }
}


(3)模拟事物2修改(如果上面的事物执行成功,则本事物执行失败,因为"_seq_no"发生变化)
POST http://10.0.0.103:9200/oldboyedu_student/_doc/10001/_update?if_seq_no=0&if_primary_term=1
{
    "doc": {
        "hobby": [
            "欧美"
        ]
    }
}


扩展:(基于扩展的version版本来控制)
POST http://10.0.0.103:9200/oldboyedu_student/_doc/10001?version=10&version_type=external
{
    "name": "oldboy",
    "hobby": [
        "日韩",
        "国内"
    ]
}

今日内容回顾:
    (1)索引模板
    (2)集群迁移API
    (3)ES集群常用的API
    (4)ES集群原理,文档的读写流程,倒排索引;     *****
    (5)乐观锁;
    
    

你可能感兴趣的:(es)