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配置说明
- registry-mirrors 中第一个url是阿里云的镜像,只针对阿里云服务器部署,
本地机器部署不行,获取地址:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors - bip是docker虚拟网卡网关,default-address-pools是docker compose随机网络地址区间
- bip和default-address-pools在阿里云上使用时需要配置成192.168网段,因为docker默认的网络和阿里内网网络冲突
- 如果是本地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封装的镜像,简化很多配置,
使用官方镜像部署很难成功,特别是在阿里云服务器上
不积跬步无以至千里

浙公网安备 33010602011771号