es7.x集群部署-多台物理机部署-docker环境部署-docker-compose管理

es集群部署文档

部署es服务的三台服务器的ip和host分分别是:

ip host_name
192.168.1.2 web02
192.168.1.3 storage02
192.168.1.4 Storage03

这个配置需要在服务器上编写对应的hosts文件,然后才可以使用host进行配置。

本次部署没有外挂配置文件,通过docker-compose文件进行管理,es版本为7.5.0

部署步骤

对数据文件夹赋予权限

因为es的docker镜像中,使用elasticsearch用户操作,需要目录权限

sudo chmod 777 /home/data/es/es-data/storage02/

对增加内核对文件数操作数量

# 编辑配置文件
sudo vim /etc/sysctl.conf

# 增加设置,然后保存退出
# vm.max_map_count是一个Linux系统内核参数,它控制一个进程可以拥有的内存映射区域(memory-mapped region)的数量。
# 内存映射区域是一种特殊的内存区域,它将一个文件或者设备映射到进程的虚拟地址空间中,从而使得进程可以通过内存地址来访问文件或者设备,而不需要进行读取或者写入的系统调用。
vm.max_map_count=655360

# 使配置生效
sudo sysctl -p

增加sql插件

编写Dockerfile

FROM docker.elastic.co/elasticsearch/elasticsearch:7.5.0

RUN ./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/7.5.0.0/elasticsearch-sql-7.5.0.0.zip

生成镜像

docker build -t es:7.5.0 .

编写docker-compose文件

文件地址:/home/work/es/es-conf/docker-compose.yml 或 /home/data/es/es-conf/docker-compose.yml

version: '2.2'
services:
  es:
    image: es:7.5.0
    container_name: es
    restart: always     # 设置服务自启
    environment:
      - node.name=storage02   # 节点名称 集群中需要唯一
      - cluster.name=es-docker-cluster  # 集群名称,要想组成集群,集群名称必须相同
      - discovery.seed_hosts=storage03,web02,storage02  # 向哪些地址发消息,用于发现和加入集群中的其他节点,需要配置ip地址或host名称
      - cluster.initial_master_nodes=storage02,web02,storage03 # 初始化集群的时候才使用,如果集群已经建立,则该配置不生效
      - bootstrap.memory_lock=true  # 用于将Elasticsearch进程使用的内存锁定在RAM中,以避免将内存交换到磁盘上。
      - network.publish_host=storage02 # 用于指定一个Elasticsearch节点绑定的网络地址,以供其他节点使用该地址与该节点通信。因为docker分布在不同的主机上,这个地址需要使用本机的ip地址,或者host名称。因为docker拥有自己的ip地址,但是他们的ip地址如果不在一个内网的话,就不能通信,也就不能组成集群了。
      - node.master=true	# 是否可以做主节点
      - node.data=true    # 是否可以做数据节点
      - "ES_JAVA_OPTS=-Xms30g -Xmx30g"  # jvm的内存分配
    ulimits:
      memlock: # memlock是一个Linux系统级别的参数,用于限制一个进程可以锁定在内存中的最大数量的物理内存
        soft: -1   # -1 表示不限制
        hard: -1
    volumes: 
      - /home/data/es/es-data/storage02/:/usr/share/elasticsearch/data # 数据目录映射
      - /etc/hosts:/etc/hosts   # host文件映射,否则就不能根据host名称找到对应主机了
    ports: # 端口映射 本机端口:容器端口
      - 9200:9200
      - 9300:9300
    networks: # 网络配置
      - elastic

networks:
  elastic:
    driver: bridge
    ipam:
      config:
        - subnet: 172.22.0.0/24
          gateway: 172.22.0.1

其他机器的配置类似,需要改动地方主要是几个地方:

  • 节点名称,必须要更改为不同的名称
  • 数据目录映射可能需要修改
  • 发布主机,必须修改,改为宿主机的ip或者host名称

启动

# 启动服务
docker-compose up -d

# 查看集群是否搭建成功
curl -XGET 'http://localhost:9200/_cat/nodes?v'

如果成成功,将会返回集群的信息:

在这里插入图片描述

其中web02是主节点

需要注意的点

如果自己曾经作为单节点启动了某台服务器上的es容器,而且启动成功,这个es可以查询到集群信息了,然后重新启动es,想要加入到现有集群中。

结果配置的集群名称相同,ip也可以互相通信,但是发现这台es加入不进去集群当中。

这时候可能需要删除该节点原先挂在到es容器中的node文件夹。

因为两个集群的名称虽然一致,但是他们的uuid可能是不一致的,然后就可能导致该节点无法加入现有集群当中。这个uuid当集群初始化成功的时候就会被保存到本地,所以需要删除,然后重新启动容器。

权限报错:


在这里插入图片描述
如果是这个权限报错,可以试着将docker-compose 中的文件映射路径从 /usr/share/elasticsearch/data 改为 /var/lib/elasticsearch/data/ 试一下

你可能感兴趣的:(electron简单使用,学习笔记,docker,linux,elasticsearch)