ES是一个非常流行的基于lucene的搜索和分析引擎,它提供了resetful的api非常适用于搜索、推荐、日志分析等场景,社区生态丰富,是分布式架构中非常重要的一环。下面从一个docker-compose部署一个最小化集群,并用Kibana和cerebro可视化的来一窥它的能力。
version: '3.9'
services:
cerebro:
image: lmenezes/cerebro
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://host.docker.internal:9200
# 因为我是mac所以用host.docker.internal代替主机名
kibana:
image: docker.elastic.co/kibana/kibana:7.7.0
container_name: kibana7
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
- ELASTICSEARCH_HOSTS=http://host.docker.internal:9200
ports:
- "5601:5601"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
container_name: es7_01
environment:
- cluster.name=cnblogs
- node.name=es7_01
- bootstrap.memory_lock=true
# 避免使用swap,减少磁盘IO
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# 防止JVM内存回收
- discovery.seed_hosts=172.19.0.5,172.19.0.4
# 默认ES只搜索本机的其他节点,如果节点在其他主机上则需要在这里给出地址
- cluster.initial_master_nodes=es7_01,es7_02
# 初始化时符合主节点的节点方便选举
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
container_name: es7_02
environment:
- cluster.name=cnblogs
- node.name=es7_02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=172.19.0.5,172.19.0.4
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data2:/usr/share/elasticsearch/data
expose:
- 9200
volumes:
es7data1:
driver: local
es7data2:
driver: local
networks:
default:
external: true
name: es7net
运行上述代码前请先创建一个名为es7net的网络: docker network create es7net
下面是配置集群几个常见配置的原则
- bootstrap.memory_lock一般设置为true,避免使用swap
- ES_JAVA_OPTS中Xms和Xmx设置为一致,避免jvm内存重新分配
- cerebro起来比较快,kinaba很慢要等一下,多刷新就好了
- 运行上面的集群请至少保证docker拥有3g以上,因为Elasticsearch by default deploys with a 1GB heap,开始只使用了2g时就会出现内存不足导致es启动失败,如果是下面几种错误信息可以尝试增加内存
master not discovered or elected yet, an election requires a node with id
或
master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes
或
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
启动后可以按照以下步骤逐步检查部署
1检查ES运行状态
http://localhost:9200/_cat/health?v
2 登录cerebro
cb的概览非常适合作为看板,对于刚接触es的同学来说能更好的理解es集群的状态,虽然它不是官方的
3 登录kinaba,官方
官方样例数据就可以创建非常漂亮的看板/报表
可以查看非常细节的数据,并支持完整的索引操作