Crie o hábito de escrever juntos! Este é o 8º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .
Modificar a configuração do sistema
- Modifique a configuração do limit.conf: /etc/security/limits.conf
新增或修改成
soft nofile 65536 # 大于等于65536
hard nofile 65536 # 大于等于65536
soft nproc 2048 # 大于等于2048
hard nproc 4096 # 大于等于4096
soft memlock unlimited
hard memlock unlimited
复制代码
复制代码
- Modifique a configuração do sysctl.conf: /etc/sysctl.conf
## 新增或修改成,运行sysctl -p 生效
vm.max_map_count=262144 # 大于等于262144
复制代码
复制代码
- Modifique a configuração do 90-nproc.conf: /etc/security/limits.d/90-nproc.conf
## 新增或修改成
* soft nproc 2048 # 大于等于2048
复制代码
复制代码
Executar Elasticsearch
Puxe a imagem:docker pull elasticsearch:5.6.5
Execute o comando de inicialização:
docker run --name=es-1 --net=host --restart on-failure:10 --log-opt max-size=128m --ulimit nofile=65536:65536 --ulimit nproc=4096:4096 --ulimit memlock=-1:-1 -m 9000m \
-v "$PWD/elasticsearch/esdata":/usr/share/elasticsearch/data \
-v "$PWD/elasticsearch/logs":/usr/share/elasticsearch/logs \
-e ES_JAVA_OPTS="-Xms4000m -Xmx4000m -Xss16m" \
-d elasticsearch:5.6.5 \
-Ediscovery.zen.minimum_master_nodes=1 \
-Ediscovery.zen.ping.unicast.hosts=ip:9300,ip:9300 \
-Ecluster.name=es-log \ ## 集群的名称
-Enetwork.host=内网IP
复制代码
复制代码
Nota: Ao iniciar aqui, a memória que pode ser usada pelo contêiner docker é limitada a 800m, o tamanho do heap jvm, o número mínimo de nós mestres no cluster, o IP do nó do cluster e o nome do cluster. devem ser ajustados de acordo com a situação real e são muito críticos.
Nome do nó, nenhuma configuração adicional é necessária, o padrão é o nome da máquina do host atual
Verificar cluster do Elasticsearch
- Execute o seguinte comando em qualquer servidor de cluster para
curl 内网IP:9200/_cat/nodes?v
retornar as informações de todos os nós do cluster atual, indicando que o cluster foi construído
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
ip1 32 93 1 0.66 0.48 0.45 mdi * node2
ip2 68 92 3 0.72 0.65 0.61 mdi - node1
ip3 35 92 1 0.77 0.72 0.53 mdi - node3
复制代码
复制代码
- Verifique o status de integridade do cluster
curl -XGET 内网IP:9200/_cluster/health?pretty
retorna informações de chave semelhantes
{
"cluster_name" : "es-log",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 10,
"active_shards" : 20,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
复制代码
复制代码
A informação de resposta mais importante é o campo de status. O status pode ser um dos três valores:
- verde Todos os shards primários e de réplica são alocados. Seu cluster está 100% disponível.
- amarelo Todos os estilhaços primários são estilhaçados, mas pelo menos uma réplica está ausente. Nenhum dado é perdido, portanto, os resultados da pesquisa ainda estão intactos. No entanto, sua alta disponibilidade está um pouco enfraquecida. Se mais fragmentos desaparecerem, você perderá dados. Pense no amarelo como um aviso que precisa ser investigado imediatamente.
- vermelho Pelo menos um estilhaço primário (e todas as suas réplicas) está ausente. Isso significa que estão faltando dados: as pesquisas só podem retornar dados parciais e as solicitações de gravação alocadas para esse fragmento retornarão uma exceção.
Modelo de criação de cluster
Depois que o cluster for iniciado com êxito, execute o comando a seguir em qualquer nó do Elasticsearch para criar um modelo.
curl -XPUT '内网IP:9200/_template/test_template' -H 'Content-Type: application/json' -d'
{
"template": "ctu-*",
"settings": {
"index": {
"refresh_interval": "120s",
"number_of_shards": "5",
"max_result_window": "50000",
"number_of_replicas": "1"
}
},
"mappings": {
"engineLog": {
"dynamic_templates": [{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}]
}
},
"aliases": {
"es-log": {}
}
}
'
复制代码
复制代码
No modelo, max_result_window
representa o maior item que pode ser retornado quando es consulta. Ao configurar, deve-se observar que a situação real da memória não deve ser muito grande
. Verifique as informações de configuração de um índice e executecurl ip:9200/indexName/_settings?pretty
possíveis problemas
- Após modificar o parâmetro limit.conf, você pode passar na
ulimit -a
verificação, caso não surta efeito, abrir uma nova janela de sessão ou reiniciar osshd
serviço (service sshd restart
) - Depois de modificar limit.conf e entrar em vigor, iniciar o contêiner elasticsearch ainda falha, o log do contêiner mostra
max file descriptors[4096] for elasticsearch process is to low , increase to at least[65536]
, tente reiniciar o serviço docker - Se os dois métodos acima não funcionarem, você pode tentar adicionar parâmetros ao iniciar o contêiner elasticsearch
--ulimit nofile=65536:65536 --ulimit nproc=2048:4096 --ulimit memlock=unlimited:unlimited