鼎鼎小筑

ES1.7.1升级5.0.0调研

2017/08/13 Share

Breaking changes:

  • 2.0:

    1. 默认的发现机制变为单播,多播需要用插件(./bin/plugin install discovery-multicast)
      • 配置文件中必须提供一个unicast hosts的列表discovery.zen.ping.unicast.hosts: [ 192.168.1.2, 192.168.1.3 ]
    2. 2.x默认值只绑定localhost,并且将试图绑定到IPv4和IPv6,但是只有当IPv4和IPv6只有一个可用时,es才能更好的运行;生产环境中需要配置一个newwork.host:

      1
      bin/elasticsearch --network.host 192.168.1.5bin/elasticsearch --network.host _non_loopback_
    3. Mapping changes:

      1. 动态增加field前,必须通过master node的mapping确认,这样可以避免在同一个index,且不同的shards中,为相同的field(field name相同)增添不同的mapping;这种有冲突的mapping可能会导致es返回错误的结果,且有可能导致进行错误的indexing;这样经常添加新的field,可能导致indexing过程变慢,但安全为上吧;
      2. 直到解决了mapping的冲突,indexing才能继续;废除了Ignore_conflicts,conflict将不能再被忽略;
      3. field需要通过full path方式来引用,比如必须用person.name,而不是直接用name,这样可以避免混淆;
      4. 不同types但具有相同name的field,以前在query中需要通过type.name的形式进行区分,2.x之后只需要在url中增加type就可以了,例如:

        • 1.x:

          1
          2
          3
          4
          5
          6
          7
          8
          GET my_index/_search
          {
          "query": {
          "match": {
          "my_type.some_field": "quick brown fox"
          }
          }
          }
        • 2.x:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          GET my_index/my_type/_search 
          {
          "query": {
          "match": {
          "some_field": "quick brown fox"

          }
          }
          }
      5. field name不要包含“.”;

      6. type name不能以“.”开头;
      7. type name不能超过255个字符,已存在的、name超过255个字符的type可以在升级后继续使用,但是升级后不能再创建name超过255个字符的type;
      8. type mapping不能再通过API直接删除,如果要删除,应该重新indexing;如果只需要删除某type下的所有documents,可以通过delete-by-query插件实现;

两种方案:

  1. 先升级到2.4.x,然后在升级到5.0.0
  2. 从1.7.1直接升级到5.0.0(因为数据量不大,可选择直接升级,全量build)

    1. 当关闭一个node时,es的数据分配进程会立即把这个node的shard复制到集群的其他node,这样会占用大量的I/O,所以可以先关闭默认的分配进程:

      1
      2
      3
      4
      5
      6
      7
      PUT _cluster/settings
      {
      "persistent":
      {
      "cluster.routing.allocation.enable": "none”
      }
      }
    2. 当重建索引完成后,通过如下命令,可以很快的恢复分片:

      1
      POST _flush/synced
    3. 关闭所有node的es服务,为每个节点升级

CATALOG
  1. 1. Breaking changes:
  2. 2. 两种方案: