【笔记】通过Docker部署Elasticsearch集群

前言

通过Docker部署Elasticsearch集群

创建一个网络

es-network:定义一个网络名称

1
docker network create es-network

拉取镜像

  • 本案例以7.12.1版本部署为例
1
docker pull elasticsearch:7.12.1

创建docker-compose文件

image:指定使用的镜像
container_name:指定镜像名
environment:指定环境配置

cluster.name=:指定集群名称,当集群名称相同时,将组建为一个集群
discovery.seed_hosts=:集群中其他节点的IP地址或域名
cluster.initial_master_nodes=:指定集群中主节点,如果指定多个将自动选举主节点
ES_JAVA_OPTS=-Xms1g -Xmx1g:配置堆内存大小,默认为1G,推荐最小堆内存与最大堆内存设置相同大小

volumes:指定数据卷映射
ports:指定端口映射
networks:指定网络配置

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
version: "2.2"
services:
es01:
image: elasticsearch:7.12.1
container_name: es01
environment:
- node.name=es01
- cluster.name=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:
- 9201:9200
networks:
- es-network
es02:
image: elasticsearch:7.12.1
container_name: es02
environment:
- node.name=es02
- cluster.name=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:
- 9202:9200
networks:
- es-network
es03:
image: elasticsearch:7.12.1
container_name: es03
environment:
- node.name=es03
- cluster.name=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
ports:
- 9203:9200
networks:
- es-network
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
es-network:
driver: bridge

启动容器

1
docker-compose up -d

报错

  • 启动失败,报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

原因

  • 操作系统中elasticsearch用户拥有的内存权限太小,至少需要262144

解决问题(Linux)

1
2
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

解决问题(MacOS)

使用DockerDesktop作为Docker运行时

1
2
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
sysctl -w vm.max_map_count=262144

使用Lima作为Docker运行时

1
2
3
limactl shell docker
sudo sysctl -w vm.max_map_count=262144
exit

完成

参考文献

哔哩哔哩——黑马程序员
博客园——jiu~
CSDN——whatday
Elasticsearch文档
CSDN——jingyu_z