docker elasticsearch集群

docker elasticsearch集群

1.安装镜像

# 搜索
docker search elasticsearch

# 拉取官方镜像
docker pull elasticsearch
docker pull elasticsearch:7.7.0

2.修改配置文件(elasticsearch.yml)

# master节点配置文件
# 集群名称,相同名称为一个集群, 三个es节点须一致
cluster.name: elasticsearch-cluster
# 设置一个初始master节点
cluster.initial_master_nodes: es-master
node.name: es-master
network.host: 0.0.0.0
network.publish_host: 172.18.0.2
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 用于配置master节点
discovery.zen.ping.unicast.hosts: ["172.18.0.2"]
discovery.zen.minimum_master_nodes: 1


# slaver节点配置文件
cluster.name: elasticsearch-cluster
cluster.initial_master_nodes: es-master
node.name: es-slaver
network.host: 0.0.0.0
network.publish_host: 172.18.0.3
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: false
node.data: true
# 用于配置master节点
discovery.zen.ping.unicast.hosts: ["172.18.0.2"]
discovery.zen.minimum_master_nodes: 1

  1. 设置docker固定ip
#创建docker固定网络(es-network)
docker network create --subnet=172.18.0.0/16 es-network
  1. 启动docker容器
# 启动master节点。设置挂载目录(日志、数据、配置文件)。同时设置网络组与固定ip
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m"  -itd -p 9200:9200 -p 9300:9300 --net=es-network --ip=172.18.0.2 -v /www/elasticsearch/master/data:/usr/share/elasticsearch/data -v /www/elasticsearch/master/logs:/usr/share/elasticsearch/logs -v /www/elasticsearch/master/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name es_master elasticsearch:7.7.0

# 启动slaver节点。设置挂载目录(日志、数据、配置文件)。同时设置网络组与固定ip
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m"  -itd -p 9201:9200 -p 9301:9300 --net=es-network --ip=172.18.0.3 -v /www/elasticsearch/slaver/data:/usr/share/elasticsearch/data -v /www/elasticsearch/slaver/logs:/usr/share/elasticsearch/logs -v /www/elasticsearch/slaver/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name es_slave elasticsearch:7.7.0


# 启动完成后监控节点信息
curl 127.0.0.1:9200/_cat/nodes

  1. 拉取elasticsearch-head监控
docker pull mobz/elasticsearch-head:5

# 访问监控界面
http://xxx.xxx.xxx.xxx:9100

  1. 注意
如果启动后无法检查到集群状态,报错“master_not_discovered_exception”  
检查配置项cluster.initial_master_nodes: es-master   
在每个配置文件设置一个开始节点

如果启动失败,则也有可能是elasticsearch用户权限不足或者内存不足的问题。

# 增加权限
chown -R elasticsearch.elasticsearch /挂载的目录/


# 修改可用内存
sysctl -w vm.max_map_count=262144  (临时生效,重启失效)

vi /etc/sysctl.conf     (永久生效)

sysctl vm.max_map_count=262144  # 添加此行

使用docker-compose时,docker-compose.yml的目录名不能一样。

  1. docker-compose
# 执行命令(以守护进程模式运行加-d选项)(类似于dockerFile的build)
docker-compose up -d

# 查看服务
docker-compose ps

# 查看日志
docker-compose logs [name]

# 停止服务
docker-compose stop [name]

# 退出服务
docker-compose kill [name]

# 删除服务
docker-compose rm [name]

# 单机部署多服务,可以都放在"services:"下
# master docker-compose.yml
version: '3'
services:
  # 服务名称
  es-master:
    networks:
      es-network:
        ipv4_address: 172.18.0.2
    # 使用的镜像
    image: elasticsearch:7.7.0
    # 容器名称
    container_name: es-master
    # 失败自动重启策略
    restart: always
    environment:
      # 节点名称,集群模式下每个节点名称唯一
      - node.name=es-master
      # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
      - network.publish_host=172.18.0.2
      # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
      - network.host=0.0.0.0
      # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - discovery.seed_hosts=172.18.0.2
      # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
      - cluster.initial_master_nodes=172.18.0.2
      # 集群名称,相同名称为一个集群, 三个es节点须一致
      - cluster.name=elasticsearch-cluster    
      # - http.cors.enabled=true    # 是否支持跨域,是:true
      # - http.cors.allow-origin="*" # 表示支持所有域名
      # 内存交换的选项,官网建议为true
      - bootstrap.memory_lock=true
      # 设置内存,如内存不足,可以尝试调低点
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
    # 栈内存的上限
    ulimits:
      memlock:
        # 不限制
        soft: -1
        # 不限制
        hard: -1
    volumes:
        # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
      - /www/elasticsearch/master/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /www/elasticsearch/master/data:/usr/share/elasticsearch/data
      - /www/elasticsearch/master/logs:/usr/share/elasticsearch/logs
      #- esdata:/usr/share/elasticsearch/data  # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。

    ports:
      # http端口,可以直接浏览器访问
      - 9200:9200
      # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
      - 9300:9300

#volumes:
#  esdata:
#    driver: local    # 会生成一个对应的目录和文件,如何查看,下面有说明。
networks:
   es-network:
     external:
       name: es-network


# slaver docker-compose.yml
version: '3'
services:
  # 服务名称
  es-slaver:
    networks:
      es-network:
        ipv4_address: 172.18.0.3
    # 使用的镜像
    image: elasticsearch:7.7.0
    # 容器名称
    container_name: es-slaver
    # 失败自动重启策略
    restart: always
    environment:
      # 节点名称,集群模式下每个节点名称唯一
      - node.name=es-slaver
      # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
      - network.publish_host=172.18.0.3
      # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
      - network.host=0.0.0.0
      # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - discovery.seed_hosts=172.18.0.2
      # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
      - cluster.initial_master_nodes=172.18.0.2
      # 集群名称,相同名称为一个集群, 三个es节点须一致
      - cluster.name=elasticsearch-cluster    
      # - http.cors.enabled=true    # 是否支持跨域,是:true
      # - http.cors.allow-origin="*" # 表示支持所有域名
      # 内存交换的选项,官网建议为true
      - bootstrap.memory_lock=true
      # 设置内存,如内存不足,可以尝试调低点
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
    # 栈内存的上限
    ulimits:
      memlock:
        # 不限制
        soft: -1
        # 不限制
        hard: -1
    volumes:
        # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
      - /www/elasticsearch/slaver/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /www/elasticsearch/slaver/data:/usr/share/elasticsearch/data
      - /www/elasticsearch/slaver/logs:/usr/share/elasticsearch/logs
      #- esdata:/usr/share/elasticsearch/data  # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。

    ports:
      # http端口,可以直接浏览器访问
      - 9201:9200
      # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
      - 9301:9300

#volumes:
#  esdata:
#    driver: local    # 会生成一个对应的目录和文件,如何查看,下面有说明。
networks:
   es-network:
     external:
       name: es-network

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值