1. 集群规划2. 准备:2.1 Docker安装2.2 Docker Compose安装2.3 ES镜像拉取2.4 修改内核参数3. 安装3.1 创建集群对应目录3.2 配置文件redis01机器redis02redis033.3 启动3.4 访问
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
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.name
和network.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.name
和network.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