es和minio的docker集群搭建

es和minio的docker集群搭建

docker 环境准备

安装docker

apt install docker.io

安装docker compose

apt install docker-compose

docker配置

docker配置的路径是 /etc/docker/daemon.json

{
    "registry-mirrors": [
      "https://xxx.mirror.aliyuncs.com",
      "https://dk.nastool.de/library",
      "https://docker.m.daocloud.io",
      "https://docker.imgdb.de",
      "https://docker-0.unsee.tech",
      "https://docker.hlmirror.com",
      "https://docker.1ms.run",
      "https://func.ink",
      "https://lispy.org",
      "https://docker.xiaogenban1993.com"
    ],
    "bip": "192.168.100.1/24",
    "default-address-pools": [
      {"base": "192.168.0.0/16", "size": 24}
    ]
}

docker配置说明

  1. registry-mirrors 中第一个url是阿里云的镜像,只针对阿里云服务器部署,
    本地机器部署不行,获取地址:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
  2. bip是docker虚拟网卡网关,default-address-pools是docker compose随机网络地址区间
  3. bip和default-address-pools在阿里云上使用时需要配置成192.168网段,因为docker默认的网络和阿里内网网络冲突
  4. 如果是本地192.168机器部署,不能添加bip和default-address-pools

ES 集群部署

每台机器数据盘,如 /mnt 下创建es目录,并 chmod -R 777 es 赋权

1. 编写docker-compose.yml文件

version: '3.8'

services:
  es-node:
    network_mode: host
    image: elasticsearch:8.6.0
    container_name: es-node
    environment:
      - node.name=${node_name}:${es_port}
      - cluster.name=docker-cluster
      - node.roles=master,data
      - discovery.seed_hosts=${es_node1},${es_node2},${es_node3},${es_node4},${es_node5}
      - cluster.initial_master_nodes=${es_node1},${es_node2},${es_node3},${es_node4},${es_node5}
      - ES_JAVA_OPTS=-Xms64g -Xmx64g
      - network.host=0.0.0.0
      - xpack.security.enabled=false
    restart: unless-stopped
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /mnt/es/data:/usr/share/elasticsearch/data
    healthcheck:
      test: [ "CMD-SHELL", "curl -sSf http://localhost:9200/_cluster/health?wait_for_status=green || exit 1" ]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s

2. 编写.env文件

该文件属于隐藏文件,在linux上看不见,但可编辑,在每台机器上修改node_name为本机地址即可,无需修改docker-compose.yml

es_node1=192.168.1.1:9300
es_node2=192.168.1.2:9300
es_node3=192.168.1.3:9300
es_node4=192.168.1.4:9300
es_node5=192.168.1.5:9300

node_name=192.168.1.1
es_port=9300

3. 使用nginx配置代理出口并使用basic认证

  • 选定一台机器作为出口,用于UI客户端操作
  • 编写nginx.conf配置文件,使用8077作为出口
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    keepalive_timeout  65;

    client_max_body_size 0;

    server {
        listen       8077;
        server_name  _;
        #开启登录认证
        auth_basic "es auth";
        #密码文件位置,在conf文件夹下
        auth_basic_user_file passwd.db;
        location / {
            proxy_pass http://localhost:9200;
        }
    }

}
  • 创建passwd.db文件并放到和nginx.conf同级目录下
# passwd.db中是一个密钥,形如 `elastic:$xxxxx`,:前面是用户名(明文):后面部分是openssl加密密码后的密文
apt install openssl # 安装openssl
openssl passwd -apr1 "密码" # 执行命令后会返回形如`$xxxx`密文,复制它
echo "elastic:$xxxxx" > passwd.db

minio 集群部署

每台机器数据盘,如 /mnt 下创建minio目录,并 chmod -R 777 minio 赋权

编写docker-compose.yml文件

version: '3.8'
services:
  minio:
    image: bitnami/minio:2024.7.16
    network_mode: host
    environment:
      - MINIO_ROOT_USER=用户名
      - MINIO_ROOT_PASSWORD=密码
      - MINIO_DISTRIBUTED_MODE_ENABLED=yes
      - MINIO_DISTRIBUTED_NODES=192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5
      - MINIO_SKIP_CLIENT=yes
    container_name: minio
    restart: unless-stopped
    volumes:
      - /mnt/minio/data:/bitnami/minio/data

注意:使用的镜像是bitnami/minio:2024.7.16,这是开源组织bitnami封装的镜像,简化很多配置,
使用官方镜像部署很难成功,特别是在阿里云服务器上

posted @ 2025-06-24 16:31  小小爬虫  阅读(85)  评论(0)    收藏  举报