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如下即可.
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
查看数据分片分布
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
如图所示,分片ID:0,两个不同名称的节点,一个主分片,一个副本分片
debug查看id=4的数据
GET /user/_doc/4
如图所示,分片ID:1,同样是两个不同名称的节点,一个主分片,一个副本分片,不过和上面相比主副分片的位置交换了。