文章目录
- 架构
- 安装
- docker安装
- 单节点
- 软件包安装
架构
在一个分布式系统里,多个Elasticsearch运行实例可以组成一个集群(cluster),该集群里有一个动态选举出来的主节点(master)。如果主节点失败,会自动选出新的节点作为主节点,所以不存在单点故障。在同一个子网内,只需要在每个节点上设置相同的集群名,这些集群名相同的节点会自动组成一个集群。Elasticsearch包含了节点和节点之间通信模块及节点之间的数据分配和平衡模块。为了实现容错,Elasticsearch会把查询文档集合分解为多个小的索引,每一个小的索引就叫做分片(shards)。每一个分片都可以有0到多个副本(replicas),而每一个副本也都是分片的完整复制品,这样也提高了查询速度。一旦Elasticsearch的某个节点数据损坏或服务不可用的时候,就可以用其他节点来代替坏掉的节点,以达到高可用的目的。当有节点加入或退出时,主节点会根据机器的负载对索引分片进行重新分配,当“挂掉”的节点再次重新启动的时候也会进行数据恢复(recovery)。
基本概念:
es是一个分布式文档数据库,存储复杂数据结构为JSON。
名词 | 解释 |
cluster | 整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。 |
node | 集群中的一个节点,一般只一个进程就是一个node |
shard | 分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。 |
index | 相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。 |
type | 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一Json的格式的数据集合。 |
document | 类似于rdbms的 row、面向对象里的object |
field | 相当于字段、属性 |
安装
docker安装
单节点
docker-compose 文件:
version: '3'
services:
elasticsearch:
image: elasticsearch:7.9.3
container_name: elasticsearch
environment:
- discovery.type=single-node
# - ES_JAVA_OPTS="-Xms128m -Xmx128m"
volumes:
- ./data/esdata:/usr/share/elasticsearch/data
# networks:
# - efknet
ports:
- "9200:9200"
kibana:
image: kibana:7.9.3
deploy:
resources:
limits:
memory: 256m
container_name: kibana
# networks:
# - efknet
ports:
- "5601:5601"
logstash:
image: logstash:7.9.2
container_name: logstash
volumes:
# :ro 只读
- ./data/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./data/logstash/config/:/usr/share/logstash/conf.d/
# - /elk/config/logstash/pipeline/:/usr/share/logstash/pipeline/
ports:
- "5044:5044"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx128m -Xms128m"
depends_on: #标签解决了容器的依赖、启动先后的问题
- elasticsearch
集群模式(参照官网)
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
软件包安装
下载安装包,运行elasticsearch.bat