Elasticsearch8集群Debug模式启动

488 阅读2分钟

Debug集群配置

集群配置文件:build-tools-internal/src/main/groovy/elasticsearch.run.gradle

testClusters.register("runTask") {
     ...
    //配置节点数 
    numberOfNodes = 2
    def cluster = testClusters.named("runTask").get()
    //配置集群中每一个节点
    cluster.getNodes().each { node ->
      node.setting('cluster.initial_master_nodes', cluster.getLastNode().getName())
      node.setting('node.roles', '[master,data_hot,data_content]')
    }
    //配置第一个节点,比如设置第一个节点为仅协调节点。
    cluster.getFirstNode().setting('node.roles', '[]')
   ...
}

配置Remote JVM Debug

配置多少个节点就可以启动多少个Debug,每个Debug监听一个节点。端口号按5007、5008、5009...这样依次递增。比如我启动两个节点的集群,配置两个Debug如下即可.

image.png

image.png

debug模式启动集群

在源代码工程根目录下运行如下命令:

./gradlew run --debug-jvm

测试集群

创建两个分片一个副本的索引

PUT /user
{
  "settings": {
    "index": {
      "number_of_shards": 2,
      "number_of_replicas": 1
    }
  }
}

查看索引分片信息

GET /user/_search_shards
{
  "nodes": {
    "ay9EBbUFTti8TceQ1_SgKQ": {
      "name": "runTask-1",
      "ephemeral_id": "jcKUSqmkTO-0g4gg1VeFmw",
      "transport_address": "127.0.0.1:9301",
      "external_id": "runTask-1",
      "attributes": {
        "ml.allocated_processors_double": "8.0",
        "ml.machine_memory": "17050939392",
        "xpack.installed": "true",
        "testattr": "test",
        "ml.max_jvm_size": "536870912",
        "ml.allocated_processors": "8"
      },
      "roles": [
        "data",
        "data_cold",
        "data_content",
        "data_frozen",
        "data_hot",
        "data_warm",
        "ingest",
        "master",
        "ml",
        "remote_cluster_client",
        "transform"
      ]
    },
    "taX2r0R_R5O8eQvtlVlj0w": {
      "name": "runTask-0",
      "ephemeral_id": "DhYK1ZgjTz-whish7SO-uQ",
      "transport_address": "127.0.0.1:9300",
      "external_id": "runTask-0",
      "attributes": {
        "ml.machine_memory": "17050939392",
        "xpack.installed": "true",
        "ml.max_jvm_size": "536870912",
        "ml.allocated_processors": "8",
        "testattr": "test",
        "ml.allocated_processors_double": "8.0"
      },
      "roles": [
        "data",
        "data_cold",
        "data_content",
        "data_frozen",
        "data_hot",
        "data_warm",
        "ingest",
        "master",
        "ml",
        "remote_cluster_client",
        "transform"
      ]
    }
  },
  "indices": {
    "user": {}
  },
  "shards": [
    [
      {
        "state": "STARTED",
        "primary": false,
        "node": "taX2r0R_R5O8eQvtlVlj0w",
        "relocating_node": null,
        "shard": 0,
        "index": "user",
        "allocation_id": {
          "id": "n78DcLAkQqeamN0U_2YkPQ"
        }
      },
      {
        "state": "STARTED",
        "primary": true,
        "node": "ay9EBbUFTti8TceQ1_SgKQ",
        "relocating_node": null,
        "shard": 0,
        "index": "user",
        "allocation_id": {
          "id": "x-MY5B92RKaWdmYY5a0ujg"
        }
      }
    ],
    [
      {
        "state": "STARTED",
        "primary": false,
        "node": "ay9EBbUFTti8TceQ1_SgKQ",
        "relocating_node": null,
        "shard": 1,
        "index": "user",
        "allocation_id": {
          "id": "XqE64a0hQyy9azZyW-i-UA"
        }
      },
      {
        "state": "STARTED",
        "primary": true,
        "node": "taX2r0R_R5O8eQvtlVlj0w",
        "relocating_node": null,
        "shard": 1,
        "index": "user",
        "allocation_id": {
          "id": "8B2mpJ_uQEy4dWjNV-zvZw"
        }
      }
    ]
  ]
}

查看索引分片数据

GET /_cat/shards/user?v
index shard prirep state   docs store ip        node
user  0     p      STARTED    0  225b 127.0.0.1 runTask-1
user  0     r      STARTED    0  225b 127.0.0.1 runTask-0
user  1     r      STARTED    0  225b 127.0.0.1 runTask-1
user  1     p      STARTED    0  225b 127.0.0.1 runTask-0

插入数据

POST /user/_bulk?refresh
{"index":{"_id":1,"routing": "A"}}
{"name": "001"}
{"index":{"_id":2,"routing": "A"}}
{"name": "002"}
{"index":{"_id":3,"routing": "B"}}
{"name": "003"}
{"index":{"_id":4,"routing": "B"}}
{"name": "004"}

查询数据

GET /user/_search

image.png

查看数据分片分布

GET /_cat/shards/user?v
index shard prirep state   docs  store ip        node
user  0     p      STARTED    2 28.6kb 127.0.0.1 runTask-1
user  0     r      STARTED    2 31.2kb 127.0.0.1 runTask-0
user  1     r      STARTED    2   35kb 127.0.0.1 runTask-1
user  1     p      STARTED    2 37.7kb 127.0.0.1 runTask-0

debug查看id=1的数据

TransportSingleShardAction.AsyncSingleAction.start()方法打个断点

GET /user/_doc/1

image.png

如图所示,分片ID:0,两个不同名称的节点,一个主分片,一个副本分片

debug查看id=4的数据

GET /user/_doc/4

image.png

如图所示,分片ID:1,同样是两个不同名称的节点,一个主分片,一个副本分片,不过和上面相比主副分片的位置交换了。