Цель этой статьи: Практикуйте планирование кластеров данных миллиардного уровня.
Ментальное путешествие: миллионы стресс-тестов данных -> Параметры оптимизации -> Предполагаемая емкость данных в миллиардах -> Запланируйте размер кластера.
Давайте сначала поймем,ES
Кластерное планирование: 3 узлы,ES
Память -Xms8g -Xmx8g
,Оставшаяся Память должна быть зарезервирована для Давата. PageCache
Имя кластера | Имя узла | порт | Конфигурация машины |
---|---|---|---|
escluster | esnode-1 | 9300 9800 | 8C16G |
escluster | esnode-2 | 9300 9800 | 8C16G |
escluster | esnode-3 | 9300 9800 | 8C16G |
kibana | 9000 | 2C4G | |
es-service | 8080 | 4C8G |
Согласно предыдущему испытанию под давлением 100W Результаты данных показывают: Общее количество занятых первичных шардов 200MB
дискового пространства.
0.2048 KB
20000 MB ≈ 19.5 GB
19.5 * 2 = 39GB
(приблизительная стоимость)Имеется три экземпляра, каждый экземпляр на диске. 40 ГБ, всего 120GB
,для 100 миллионов Сценарий с объемом данных вполне достаточен.
ES
Написать оптимизациюв соответствии с Официальный документ сайтаНаписать оптимизациюиметь:
Use bulk requests
:Использовать пакетный режим bulk
Загрузить.Use multiple workers/threads to send data to Elasticsearch
:Используйте многопоточность。Unset or increase the refresh interval
:<font color=red>настраивать refresh_interval
значение, по умолчанию 1s。 </font>
ES
Поиск в режиме реального времени: После написания 1s Вы можете поискать его. То есть по умолчанию он обновляется каждую секунду.Чтобы оптимизировать скорость записи, увеличьте это значение, чтобы уменьшить частые
refresh
иlucene
Сегменты объединены.
Элементы конфигурации | значение по умолчанию | оптимизация |
---|---|---|
| 1s | 30 с (официальная рекомендация), 120 с |
Disable replicas fo initial loads
:<font color=red>Изначально измените количество копий на 0, а затем измените его обратно после завершения записи данных.</font> (огромное улучшение), эта конфигурация может Динамическая регулировка 。Элементы конфигурации | значение по умолчанию | оптимизация |
---|---|---|
| 1 | 0 |
Disable swapping
:закрыть зону подкачки。Give memory to the filesystem cache
:Давать PageCache
Хватит Память. (Необходим как для записи данных, так и для чтения данных)Use auto-generated ids
:Используйте автоматически сгенерированные id
。Use faster hardware
:Облачный хостиметьпредел,Текущий облачный диск имеет самую низкую производительность PL0
уровень производительности ESSD
Облачный диск.Indexing buffer size
: размер буфера индекса ,по умолчанию 10%, то есть JVM
10 ГБ, индексный буфер 1GB。Элементы конфигурации | значение по умолчанию | оптимизация |
---|---|---|
| 10% | 30% |
| 48MB | 128MB |
| Безлимитный | Безлимитный |
Другие моменты оптимизации:
translog
:Приходи записывайся дважды flush
(fsync
) Все промежуточные операции, когда машина восстанавливается после сбоя или перезагружается, могут быть соответствии с Это восстановлениеtranslog
это файл,существует в Память,Он будет утерян в случае отключения электроэнергии.Элементы конфигурации | значение по умолчанию | оптимизация |
---|---|---|
| request | async |
| 5s | 120s |
| 512MB | 2048MB |
Этапы написания следующие:
PUT /sku_index
{
"settings":{
"number_of_shards":3,
"number_of_replicas":0,
"index.refresh_interval": "120s",
"index.translog.durability": "async",
"index.translog.sync_interval": "120s",
"index.translog.flush_threshold_size": "2048mb"
},
"mappings":{
"properties":{
"skuId":{
"type":"keyword"
},
"skuName":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
},
"category":{
"type":"keyword"
},
"basePrice":{
"type":"integer"
},
"vipPrice":{
"type":"integer"
},
"saleCount":{
"type":"integer"
},
"commentCount":{
"type":"integer"
},
"skuImgUrl":{
"type":"keyword",
"index":false
},
"createTime":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss"
},
"updateTime":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}
}
Можно использовать Kibana
создать:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "sku_index"
}
sku_index
индексPOST http://47.99.221.206:8080/api/mockData/mockData2
{
"indexName": "sku_index",
"batchSize": 1000,
"batchTimes": 100000,
"threadCount": 60
}
Содержание ответа:
{
"success": true,
"data": {
"startTime": "2022-04-09 18:17:07",
"endTime": "2022-04-09 18:25:39",
"totalCount": 100000000,
"elapsedSeconds": 512,
"perSecond": 195312
},
"errorCode": null,
"errorMessage": null
}
# Посмотреть количество документов под индексом
GET /_cat/count/sku_index?v&h=count
count
100000000
# Посмотреть количество документов под индексом,Дисковое пространство, занимаемое индексом и т. д.
ПОЛУЧИТЬ /_cat/indices/sku_index?v
индекс состояния здоровья uuid pri Rep docs.count docs.deleted store.size pri.store.size
зеленый открытый sku_index Wv9u23BLQueI7R0dYQjv5w 3 0 100000000 0 27,3 ГБ 27,3 ГБ
2022-04-09 18:25:40.077 INFO 1650 --- [nio-8080-exec-7] c.c.e.controller.MockDataController : На этот раз было импортировано в общей сложности [100000000]предметов данных, кропотливый[512]Второй, в среднем, было импортировано [195312] единиц данных на каждый континент.
На этот раз было импортировано в общей сложности [100000000]предметов данных, кропотливый[512]Второй, в среднем, было импортировано [195312] единиц данных на каждый континент.
Количество потоков | Объем импортированных данных | кропотливый | QPS | Использование процессора | Использование пропускной способности сети | Использование пропускной способности облачного диска |
---|---|---|---|---|---|---|
1 | 100000000 | 512S | 195312 шт./с | 42.52% | 699.89 Mbit/s | 12,12 раз/с |
Способы модификации смотрите в документации:Официальная документация
PUT /sku_index/_settings
{
"settings": {
"number_of_replicas": 1
}
}
ответ:
{
"acknowledged" : true
}
На этом этапе статус индекса изменится на yellow
состояние.
проходить Kibana
См.: Инструментирование стека. -> индекс
После распределения: