image.png
    Es的节点可能分布在不同的机架
    当一个机架断电,可能会同时丢失几个节点
    如果一个索引相同的主分片和副本分片,同时在这个机架上,就有可能导致数据的丢失

    通过 Rack Awareness的机制,就可以尽可能避免将同一个索引的主副分片同时分配在一个机架
    的节点上

    1. # Fore awareness
    2. # 标记一个 rack 1, 标记在那个机架
    3. bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1
    4. # 标记一个 rack 2, 标记在那个机架
    5. bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack1
    6. # 设置主副分片在不同的机架上
    7. PUT _cluster/settings
    8. {
    9. "persistent": {
    10. "cluster.routing.allocation.awareness.attributes": "my_rack_id",
    11. "cluster.routing.allocation.awareness.force.my_rack_id.values": "rack1,rack2"
    12. }
    13. }
    14. GET _cluster/settings
    15. GET _cluster/health
    16. GET _cat/shards?v
    17. GET _cluster/allocation/explain?pretty