Home>Article>Operation and Maintenance> Can es be deployed with docker?
es can be deployed using docker; deploying es clusters can be done directly using "docker-compose". "docker-compose" is a docker tool used to define and run complex applications, an application using docker containers , usually composed of multiple containers, using "docker-compose" eliminates the need to use shell scripts to start containers.
The operating environment of this tutorial: linux7.3 system, docker version 19.03, Dell G3 computer.
Deployment of es cluster can be done directly using docker-compose
Docker Compose is a Docker tool used to define and run complex applications. An application using Docker containers usually consists of multiple containers. Using Docker Compose no longer requires shell scripts to start containers.
Compose manages multiple Docker containers through a configuration file. In the configuration file, all containers are defined through services, and then the docker-compose script is used to start, stop and restart the application, and the services in the application. As well as all containers that rely on services, it is very suitable for scenarios where multiple containers are combined for development.
Expand knowledge
Introduction to ES cluster
Why a cluster is needed
Single-machine elasticsearch When doing data storage, you will inevitably face two problems: massive data storage problem and single point of failure problem.
Massive data storage problem: Logically split the index library into N shards and store them on multiple nodes
Single point failure problem: Split the shard data in different locations Node backup (replica)
ES cluster related concepts
Cluster (cluster): a group of nodes with a common cluster name.
Node: An Elasticearch instance in the cluster
Shard: The index can be split into different parts Storage is called sharding. In a cluster environment, different shards of an index can be split into different nodes
Solve the problem: the amount of data is too large and the single-point storage capacity is limited.
Here, we divide the data into 3 shards: shard0, shard1, shard2
Primary shard: Definition relative to replica shards.
Replica shard (Replica shard) Each primary shard can have one or more replicas, and the data is the same as the primary shard.
Data backup can ensure high availability, but one copy of each shard will double the number of nodes required, and the cost is too high!
In order to find a balance between high availability and cost, we can do this:
First shard the data and store it in different nodes
Then back up each shard and put it on the other node to complete mutual backup
This can greatly reduce the number of service nodes required, as shown in the figure, we use 3 shards, one copy of each shard is backed up as an example:
Build an ES cluster
Deploying an es cluster can be done directly using docker-compose, but your Linux virtual machine is required to have at least 4G of memory space
First write a docker-compose file with the following content:
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:9200 volumes: data01: driver: local data02: driver: local data03: driver: local networks: elastic: driver: bridge
File content introduction:
version: complse version
es01: node
image: mirror
container_name: container name
environment: environment variable
node.name: node name
cluster.name: cluster name, es automatically creates a cluster
discovery.seed_hosts: the other two Address, you can use the container name to interconnect
cluster.initial_master_nodes: initialized master node, can participate in the election
"ES_JAVA_OPTS=-Xms512m -Xmx512m": minimum and maximum JVM memory
volumes: Data volume address
ports: Port mapping
Recommended learning: "docker video tutorial"
The above is the detailed content of Can es be deployed with docker?. For more information, please follow other related articles on the PHP Chinese website!