>首页> IT >

全球百事通!es可以用docker部署吗

时间:2022-08-15 17:06:18       来源:PHP中文网

本教程操作环境:linux7.3系统、docker19.03版、Dell G3电脑。

es可以用docker部署吗

部署es集群可以直接使用docker-compose来完成


(资料图片)

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

扩展知识

ES集群介绍

为什么需要集群

单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。

海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点

单点故障问题:将分片数据在不同节点备份(replica )

ES集群相关概念

集群(cluster):一组拥有共同的 cluster name 的 节点。

节点(node) :集群中的一个 Elasticearch 实例

分片(shard):索引可以被拆分为不同的部分进行存储,称为分片。在集群环境下,一个索引的不同分片可以拆分到不同的节点中

解决问题:数据量太大,单点存储量有限的问题。

此处,我们把数据分成3片:shard0、shard1、shard2

主分片(Primary shard):相对于副本分片的定义。

副本分片(Replica shard)每个主分片可以有一个或者多个副本,数据和主分片一样。

数据备份可以保证高可用,但是每个分片备份一份,所需要的节点数量就会翻一倍,成本实在是太高了!

为了在高可用和成本间寻求平衡,我们可以这样做:

首先对数据分片,存储到不同节点

然后对每个分片进行备份,放到对方节点,完成互相备份

这样可以大大减少所需要的服务节点数量,如图,我们以3分片,每个分片备份一份为例:

搭建ES集群

部署es集群可以直接使用docker-compose来完成,不过要求你的Linux虚拟机至少有4G的内存空间

首先编写一个docker-compose文件,内容如下:

version: "2.2"services:  es01:    image: elasticsearch:7.12.1    container_name: es01    environment:      - node.name=es01      - cluster.name=es-docker-cluster      - discovery.seed_hosts=es02,es03      - cluster.initial_master_nodes=es01,es02,es03      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"    volumes:      - data01:/usr/share/elasticsearch/data    ports:      - 9200:9200    networks:      - elastic  es02:    image: elasticsearch:7.12.1    container_name: es02    environment:      - node.name=es02      - cluster.name=es-docker-cluster      - discovery.seed_hosts=es01,es03      - cluster.initial_master_nodes=es01,es02,es03      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"    volumes:      - data02:/usr/share/elasticsearch/data    ports:      - 9201:9200    networks:      - elastic  es03:    image: elasticsearch:7.12.1    container_name: es03    environment:      - node.name=es03      - cluster.name=es-docker-cluster      - discovery.seed_hosts=es01,es02      - cluster.initial_master_nodes=es01,es02,es03      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"    volumes:      - data03:/usr/share/elasticsearch/data    networks:      - elastic    ports:      - 9202:9200volumes:  data01:    driver: local  data02:    driver: local  data03:    driver: localnetworks:  elastic:    driver: bridge

文件内容介绍:

version: complse版本

es01: 节点

image: 镜像

container_name:容器名称

environment:环境变量

node.name: 节点名称

cluster.name: 集群名称,es自动建立集群

discovery.seed_hosts:另外两个的地址,可以用容器名称互联

cluster.initial_master_nodes:初始化的主节点,可以参与选举

“ES_JAVA_OPTS=-Xms512m -Xmx512m”:最小和最大JVM内存

volumes: 数据卷地址

ports: 端口映射

推荐学习:《docker视频教程》

以上就是es可以用docker部署吗的详细内容,更多请关注php中文网其它相关文章!

关键词: 单点故障 海量数据存储 配置文件