Breaking changes:
2.0:
- 默认的发现机制变为单播,多播需要用插件(./bin/plugin install discovery-multicast)
- 配置文件中必须提供一个unicast hosts的列表discovery.zen.ping.unicast.hosts: [ 192.168.1.2, 192.168.1.3 ]
2.x默认值只绑定localhost,并且将试图绑定到IPv4和IPv6,但是只有当IPv4和IPv6只有一个可用时,es才能更好的运行;生产环境中需要配置一个newwork.host:
1
bin/elasticsearch --network.host 192.168.1.5bin/elasticsearch --network.host _non_loopback_
Mapping changes:
- 动态增加field前,必须通过master node的mapping确认,这样可以避免在同一个index,且不同的shards中,为相同的field(field name相同)增添不同的mapping;这种有冲突的mapping可能会导致es返回错误的结果,且有可能导致进行错误的indexing;这样经常添加新的field,可能导致indexing过程变慢,但安全为上吧;
- 直到解决了mapping的冲突,indexing才能继续;废除了Ignore_conflicts,conflict将不能再被忽略;
- field需要通过full path方式来引用,比如必须用person.name,而不是直接用name,这样可以避免混淆;
不同types但具有相同name的field,以前在query中需要通过type.name的形式进行区分,2.x之后只需要在url中增加type就可以了,例如:
1.x:
1
2
3
4
5
6
7
8GET my_index/_search
{
"query": {
"match": {
"my_type.some_field": "quick brown fox"
}
}
}2.x:
1
2
3
4
5
6
7
8
9GET my_index/my_type/_search
{
"query": {
"match": {
"some_field": "quick brown fox"
}
}
}
field name不要包含“.”;
- type name不能以“.”开头;
- type name不能超过255个字符,已存在的、name超过255个字符的type可以在升级后继续使用,但是升级后不能再创建name超过255个字符的type;
- type mapping不能再通过API直接删除,如果要删除,应该重新indexing;如果只需要删除某type下的所有documents,可以通过delete-by-query插件实现;
- 默认的发现机制变为单播,多播需要用插件(./bin/plugin install discovery-multicast)
两种方案:
- 先升级到2.4.x,然后在升级到5.0.0
从1.7.1直接升级到5.0.0(因为数据量不大,可选择直接升级,全量build)
当关闭一个node时,es的数据分配进程会立即把这个node的shard复制到集群的其他node,这样会占用大量的I/O,所以可以先关闭默认的分配进程:
1
2
3
4
5
6
7PUT _cluster/settings
{
"persistent":
{
"cluster.routing.allocation.enable": "none”
}
}当重建索引完成后,通过如下命令,可以很快的恢复分片:
1
POST _flush/synced
关闭所有node的es服务,为每个节点升级