ES高可用集群搭建
# 环境清单
三台虚拟机:
- 192.168.31.201
- 192.168.31.202
- 192.168.31.203
# 搭建步骤
- 拉取elasticsearch镜像, 配置docker-compose工具
# 拉取elasticsearch镜像
docker pull elasticsearch:7.5.2
# 配置docker-compose工具
curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
1
2
3
4
5
6
2
3
4
5
6
- 环境配置脚本
#!/bin/bash
echo "创建es映射目录及文件 开始..."
mkdir -p /ocean/docker/elasticsearch/config
mkdir -p /ocean/docker/elasticsearch/esdata
touch /ocean/docker/elasticsearch/config/elasticsearch.yml
chmod 777 /ocean/docker/elasticsearch/esdata
echo "创建es映射目录及文件 完成"
echo "配置内存 开始..."
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
echo "配置内存 完成"
touch /ocean/docker/elasticsearch/docker-compose.yml
echo "/ocean/docker/elasticsearch/docker-compose.yml 创建完成"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 编写docker-compose.yml
version: '3'
services:
elasticsearch: # 服务名称
image: elasticsearch:7.5.2 # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
privileged: true # 特权模式,自动生成相应目录
environment:
- node.name=so-node-201 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.31.201 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts=192.168.31.201,192.168.31.202,192.168.31.203 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=192.168.31.201,192.168.31.202,192.168.31.203 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=so-es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /ocean/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
- /ocean/docker/elasticsearch/esdata:/usr/share/elasticsearch/data # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
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
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
无注释版:
version: '3'
services:
elasticsearch:
image: elasticsearch:7.5.2
container_name: elasticsearch
restart: always
privileged: true
environment:
- node.name=so-node-201
- network.publish_host=192.168.31.201
- network.host=0.0.0.0
- discovery.seed_hosts=192.168.31.201,192.168.31.202,192.168.31.203
- cluster.initial_master_nodes=192.168.31.201,192.168.31.202,192.168.31.203
- cluster.name=so-es-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /ocean/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /ocean/docker/elasticsearch/esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
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
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
上次更新: 2020/08/05, 09:08:00
← QA展板 Mysql主备复制架构 →