elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/eases_stone/article/details/82467711

一,写在前面的话,elasticsearch 建立索引时的Mapping 设置

建议你在设计索引的初期,就把索引的各个字段设计好,因为,elasticsearch 的各个字段,定义好类型后,就无法进行修改了。
另外需要注意的点有如下

注意1:不要在一个索引中定义多个type。

6.X版本已经不支持,7.X版本彻底不支持。
扩展问题:5.X版本的父子文档实际实现中是一个索引中定义了多个type,到了6.X中实现方式改变为:join方式。

注意2:将Set _source设置为false。

假设你只关心度量结果,不是原始文件内容。
将节省磁盘空间并减少IO。
比如,你可以把原始的数据存储在mysql ,hbase 等其他地方,从es 中得到id 后,去相应的数据库中进行取数据
举例:

“_source”:{
“enabled”:false
},

注意3:将_all设置为false。

假设你确切地知道你对哪个field做查询操作?
能实现性能提升,缩减存储。
举例:

“_all”:{
“enabled”:false },

注意4:设置dynamic = strict。

假设你的数据是结构化数据。
字段设置严格,避免脏数据注入。
举例:

“dynamic”:”strict”,

注意5:使用keyword类型

假设你只关心完全匹配
提高性能和缩小磁盘存储空间
举例:

“CLF_CustomerID”:{
“type”:”keyword”
},

注意6:使用别名

二,elasticsearch 别名处理

首先看一下索引别名的建立和删除

1,建立索引别名(如下显示的是建立test1 的索引别名 alias1)

curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
    "actions" : [
        { "add" : { "index" : "test1", "alias" : "alias1" } }
    ]
}
'

2,删除索引的别名(如下显示的是删除test1 的索引别名 alias1)

curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
    "actions" : [
        { "remove" : { "index" : "test1", "alias" : "alias1" } }
    ]
}
'

3, 索引和索引别名之间的关系是多对多的关系

也就是说1个索引别名可以对应多个索引,一个索引可以有多个索引别名。

三,elasticsearch 别名的使用,实战运用

1,举例子。

首先,
举例,比如你有一个索引,名字叫做zebra_info_data,那么建议你线上的产品,利用别名机制机制,然后,搜索的时候,你就可以用别名进行搜索了

curl -X PUT "master:9200/zebra_info_data/_alias/zebra_info_data_alias"

搜索的时候,你就可以使用别名搜索了,类似如下:

 curl -XGET "master:9200/zebra_info_alias/_search?pretty"

2,另外的例子

1, 建立索引test
2, 建立索引test_2
3, 给索引test_2 添加别名 test, 并且删除 test 索引,Ok, 现在数据搜索由test 到test_2

curl -X PUT "localhost:9200/test"
curl -X PUT "localhost:9200/test_2"
curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
    "actions" : [
        { "add":  { "index": "test_2", "alias": "test" } },
        { "remove_index": { "index": "test" } }  
    ]
}
'

3,另外的例子。

下面的例子,显示了用索引别名进行搜索的优势, 这样就可以不影响线上的服务,而在后台偷偷做手脚了

curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
    "actions": [
        { "remove": { "index": "my_index_v1", "alias": "my_index" }},
        { "add":    { "index": "my_index_v2", "alias": "my_index" }}
    ]
}
'

4, 其他,比如查看,以及删除。

删除logs_20162801指向的别名 current_day
curl -X DELETE "localhost:9200/logs_20162801/_alias/current_day"

删除所有指向current_day 的索引引用
curl -X DELETE "localhost:9200/*/_alias/current_day" 


查看所有指向logs_20162801 的别名
GET /logs_20162801/_alias/*

查看zebra_geo_poi 这个别名指向的所有别名。

curl -XGET 'http://172.16.232.242:9200/_alias/zebra_geo_poi?pretty'

四,写在后面的话。

建议在设计index 的初期,就把索引建立好,后期就不用进行修改了。应为这里的零停机升级服务,或者说重新索引的的数据,是花费巨大的资源为代价的。
另外,附上官网中的别名api 一份,不要太感谢本小生了。
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

猜你喜欢

转载自blog.csdn.net/eases_stone/article/details/82467711