ElasticSearch22:Docker搭建集群ES

ElasticSearch22:Docker搭建集群ES

1. 集群规划

节点
IP
ES
redis01
192.168.92.145
node-1
redis02
192.168.92.146
node-2
redis03
192.168.92.147
node-3

2. 准备:

2.1 Docker安装

root@redis01:~# docker -v Docker version 20.10.14, build a224086

2.2 Docker Compose安装

root@redis01:~# docker compose version Docker Compose version v2.2.3

2.3 ES镜像拉取

root@redis03:~# docker pull elasticsearch root@redis03:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE elasticsearch 8.1.2 0652ab468732 2 weeks ago 1.19GB

2.4 修改内核参数

登录到每一台服务器,修改内核参数(三台都需要设置)
# 切换到root root@redis01:/etc# vim sysctl.conf
sysctl.conf添加如下内容
# 自己添加的配置,用于解决ElasticSearch的内存问题 vm.max_map_count=655360
加载配置
# 加载参数 root@redis02:/etc# sysctl -p
notion image

3. 安装

3.1 创建集群对应目录

# 创建目录 root@redis01:/usr/local# mkdir -p docker/es/{logs,data,config,plugins} root@redis02:/usr/local# mkdir -p docker/es/{logs,data,config,plugins} root@redis03:/usr/local# mkdir -p docker/es/{logs,data,config,plugins} # 赋予权限 root@redis01:/usr/local# chmod 777 -R docker/ root@redis02:/usr/local# chmod 777 -R docker/ root@redis03:/usr/local# chmod 777 -R docker/

3.2 配置文件

配置挂载启动文件/usr/local/docker/es/config/elasticsearch.yml三台机器。
network.host: 0.0.0.0 http.port: 9200 # Enable security features xpack.security.enabled: false xpack.security.enrollment.enabled: true http.cors.enabled: true # 设置跨域,主要用于head插件访问es http.cors.allow-origin: "*" # 允许所有域名访问

redis01机器

/usr/local/docker/es/docker-compose.yml
version: '1.1.0' services: es10: # 服务名称 image: elasticsearch:8.1.2 # 使用的镜像 container_name: elasticsearch # 容器名称 restart: always # 失败自动重启策略 environment: - node.name=node-1 # 节点名称,集群模式下每个节点名称唯一 - network.publish_host=192.168.92.145 # 用于集群内各机器间通信,其他机器访问本机器的es服务 - network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0, - discovery.seed_hosts=192.168.92.145,192.168.92.146,192.168.92.147 # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点 - cluster.initial_master_nodes=192.168.92.145 # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master - cluster.name=ms-es-cluster # 集群名称,相同名称为一个集群 - bootstrap.memory_lock=false # 内存交换的选项,官网建议为true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存 ulimits: memlock: soft: -1 hard: -1 volumes: - /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点 - /usr/local/docker/es/data:/usr/share/elasticsearch/data # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。 - /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins #插件目录 - /usr/local/docker/es/logs:/usr/share/elasticsearch/logs #插日志目录 ports: - 9200:9200 # http端口 - 9300:9300 # es节点直接交互的端口,非http

redis02

/usr/local/docker/es/docker-compose.yml ,其中node.namenetwork.publish_host 不一样,其他都一样
version: '1.1.0' services: es10: # 服务名称 image: elasticsearch:8.1.2 # 使用的镜像 container_name: elasticsearch # 容器名称 restart: always # 失败自动重启策略 environment: - node.name=node-2 # 节点名称,集群模式下每个节点名称唯一 - network.publish_host=192.168.92.146 # 用于集群内各机器间通信,其他机器访问本机器的es服务 - network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0, - discovery.seed_hosts=192.168.92.145,192.168.92.146,192.168.92.147 # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点 - cluster.initial_master_nodes=192.168.92.145 # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master - cluster.name=ms-es-cluster # 集群名称,相同名称为一个集群 - bootstrap.memory_lock=false # 内存交换的选项,官网建议为true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存 ulimits: memlock: soft: -1 hard: -1 volumes: - /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点 - /usr/local/docker/es/data:/usr/share/elasticsearch/data # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。 - /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins #插件目录 - /usr/local/docker/es/logs:/usr/share/elasticsearch/logs #插日志目录 ports: - 9200:9200 # http端口 - 9300:9300 # es节点直接交互的端口,非http

redis03

/usr/local/docker/es/docker-compose.yml ,其中node.namenetwork.publish_host 不一样,其他都一样
version: '1.1.0' services: es10: # 服务名称 image: elasticsearch:8.1.2 # 使用的镜像 container_name: elasticsearch # 容器名称 restart: always # 失败自动重启策略 environment: - node.name=node-3 # 节点名称,集群模式下每个节点名称唯一 - network.publish_host=192.168.92.147 # 用于集群内各机器间通信,其他机器访问本机器的es服务 - network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0, - discovery.seed_hosts=192.168.92.145,192.168.92.146,192.168.92.147 # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点 - cluster.initial_master_nodes=192.168.92.145 # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master - cluster.name=ms-es-cluster # 集群名称,相同名称为一个集群 - bootstrap.memory_lock=false # 内存交换的选项,官网建议为true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存 ulimits: memlock: soft: -1 hard: -1 volumes: - /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点 - /usr/local/docker/es/data:/usr/share/elasticsearch/data # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。 - /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins #插件目录 - /usr/local/docker/es/logs:/usr/share/elasticsearch/logs #插日志目录 ports: - 9200:9200 # http端口 - 9300:9300 # es节点直接交互的端口,非http
 

3.3 启动

# 赋予权限 chmod 777 docker-compose.yml # 在/usr/local/docker/es目录下启动 root@redis01:/usr/local/docker/es# docker compose up -d
 

3.4 访问

notion image