当前位置: 首页 > news >正文

elasticsearch8.16 docker-compose 多机器集群安装

在网上找了一圈, 发现要么就是单机版的部署了多个节点, 很少有多台机器部署集群的, 有些就拿官网的例子写一写, 没有实战经验, 下面分享一个教程, 实实在在的多台机器, 每台机器部署2个节点的例子

先上.env , docker-compose.yml文件, 这个文件是核心, 里面掺杂太多坑, 已经帮你填好

.env

# Password for the 'elastic' user (at least 6 characters)
ELASTIC_PASSWORD=7ns8TptDWjCKaZ7d# Password for the 'kibana_system' user (at least 6 characters)
KIBANA_PASSWORD=uCXX4AXUzZgUnabK# Version of Elastic products
STACK_VERSION=8.16.0# Set the cluster name
CLUSTER_NAME=tsc# Set to 'basic' or 'trial' to automatically start the 30-day trial
LICENSE=basic
#LICENSE=trial# Port to expose Elasticsearch HTTP API to the host
ES_PORT=9200
#ES_PORT=127.0.0.1:9200# Port to expose Kibana to the host
KIBANA_PORT=5601
#KIBANA_PORT=80# Increase or decrease based on the available host memory (in bytes)
# 1073741824 = 1G
# 17179869184 = 16G
# 21474836480 = 20G
# 32212254720 = 30G
#MEM_LIMIT=1073741824
MEM_LIMIT=32212254720NODE1=es101
NODE2=es102
IP=# Project namespace (defaults to the current folder name if not set)
COMPOSE_PROJECT_NAME=tsc

docker-compose.yml

services:setup:image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}volumes:- certs:/usr/share/elasticsearch/config/certsuser: "0"command: >bash -c 'if [ x${ELASTIC_PASSWORD} == x ]; thenecho "Set the ELASTIC_PASSWORD environment variable in the .env file";exit 1;elif [ x${KIBANA_PASSWORD} == x ]; thenecho "Set the KIBANA_PASSWORD environment variable in the .env file";exit 1;fi;if [ ! -f config/certs/ca.zip ]; thenecho "Creating CA";bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;unzip config/certs/ca.zip -d config/certs;fi;if [ ! -f config/certs/certs.zip ]; thenecho "Creating certs";echo -ne \"instances:\n"\"  - name: ${NODE1}\n"\"    dns:\n"\"      - ${NODE1}\n"\"    ip:\n"\"      - ${IP}\n"\"  - name: ${NODE2}\n"\"    dns:\n"\"      - ${NODE2}\n"\"    ip:\n"\"      - ${IP}\n"\> config/certs/instances.yml;bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;unzip config/certs/certs.zip -d config/certs;fi;echo "Setting file permissions"chown -R root:root config/certs;find . -type d -exec chmod 750 \{\} \;;find . -type f -exec chmod 640 \{\} \;;echo "Waiting for Elasticsearch availability";until curl -s --cacert config/certs/ca/ca.crt https://${IP}:9200 | grep -q "missing authentication credentials"; do sleep 30; done;echo "Setting kibana_system password";until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://${IP}:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;echo "All done!";'healthcheck:test: ["CMD-SHELL", "[ -f config/certs/${NODE1}/${NODE1}.crt ]"]interval: 1stimeout: 5sretries: 120es01:image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}container_name: ${NODE1}hostname: ${NODE1}restart: always  # 配置服务的重启策略volumes:- certs:/usr/share/elasticsearch/config/certs- plugins:/usr/share/elasticsearch/plugins- esdata01:/usr/share/elasticsearch/data- eslog01:/usr/share/elasticsearch/logsports:- 9200:9200- 9300:9300environment:- TZ=Asia/Shanghai- node.name=${NODE1}- cluster.name=${CLUSTER_NAME}- network.host=0.0.0.0- network.publish_host=${IP}- cluster.initial_master_nodes=es0011,es0012- discovery.seed_hosts=192.168.0.15:9300,192.168.0.15:9301- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}- bootstrap.memory_lock=true- xpack.security.enabled=true- xpack.security.http.ssl.enabled=true- xpack.security.http.ssl.key=certs/${NODE1}/${NODE1}.key- xpack.security.http.ssl.certificate=certs/${NODE1}/${NODE1}.crt- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt- xpack.security.transport.ssl.enabled=true- xpack.security.transport.ssl.key=certs/${NODE1}/${NODE1}.key- xpack.security.transport.ssl.certificate=certs/${NODE1}/${NODE1}.crt- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt- xpack.security.transport.ssl.verification_mode=certificate- xpack.license.self_generated.type=${LICENSE}- xpack.ml.use_auto_machine_memory_percent=truemem_limit: ${MEM_LIMIT}ulimits:memlock:soft: -1hard: -1healthcheck:test:["CMD-SHELL","curl -s --cacert config/certs/ca/ca.crt https://${NODE1}:9200 | grep -q 'missing authentication credentials'",]interval: 10stimeout: 10sretries: 120es02:depends_on:- es01image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}container_name: ${NODE2}hostname: ${NODE2}restart: always  # 配置服务的重启策略volumes:- certs:/usr/share/elasticsearch/config/certs- plugins:/usr/share/elasticsearch/plugins- esdata02:/usr/share/elasticsearch/data- eslog02:/usr/share/elasticsearch/logsports:- "9201:9201"- "9301:9301"environment:- TZ=Asia/Shanghai- node.name=${NODE2}- http.port=9201- transport.port=9301- cluster.name=${CLUSTER_NAME}- network.host=0.0.0.0- network.publish_host=${IP}- cluster.initial_master_nodes=es0011,es0012- discovery.seed_hosts=192.168.0.15:9300,192.168.0.15:9301- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}- bootstrap.memory_lock=true- xpack.security.enabled=true- xpack.security.http.ssl.enabled=true- xpack.security.http.ssl.key=certs/${NODE2}/${NODE2}.key- xpack.security.http.ssl.certificate=certs/${NODE2}/${NODE2}.crt- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt- xpack.security.transport.ssl.enabled=true- xpack.security.transport.ssl.key=certs/${NODE2}/${NODE2}.key- xpack.security.transport.ssl.certificate=certs/${NODE2}/${NODE2}.crt- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt- xpack.security.transport.ssl.verification_mode=certificate- xpack.license.self_generated.type=${LICENSE}- xpack.ml.use_auto_machine_memory_percent=truemem_limit: ${MEM_LIMIT}ulimits:memlock:soft: -1hard: -1healthcheck:test:["CMD-SHELL","curl -s --cacert config/certs/ca/ca.crt https://${NODE2}:9201 | grep -q 'missing authentication credentials'",]interval: 10stimeout: 10sretries: 120kibana:deploy:replicas: 0  # 默认不启动 , 第一个节点主动启动 docker-compose up -d kibanadepends_on:es01:condition: service_healthyes02:condition: service_healthyimage: docker.elastic.co/kibana/kibana:${STACK_VERSION}restart: always  # 配置服务的重启策略volumes:- certs:/usr/share/kibana/config/certs- kibanadata:/usr/share/kibana/dataports:- ${KIBANA_PORT}:5601environment:- SERVERNAME=kibana- ELASTICSEARCH_HOSTS=https://${NODE1}:9200- ELASTICSEARCH_USERNAME=kibana_system- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}- ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crtmem_limit: ${MEM_LIMIT}healthcheck:test:["CMD-SHELL","curl -s -I http://${NODE1}:5601 | grep -q 'HTTP/1.1 302 Found'",]interval: 10stimeout: 10sretries: 120
volumes:certs:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/certso: bindplugins:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/pluginso: bindesdata01:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/${NODE1}/datao: bindesdata02:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/${NODE2}/datao: bindkibanadata:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/kibanadatao: bindeslog01:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/${NODE1}/logso: bindeslog02:driver: localdriver_opts:type: nonedevice: /data/elasticsearch/${NODE2}/logso: bind

操作步骤

各点执行如下命令创建目录mkdir -p /data/elasticsearch将 .env 拷贝到目录  /data/elasticsearch 中替换IP
cd /data/elasticsearch
ip=$(hostname -i)
sed -i "s/^IP=.*$/IP=$ip/" .env# 获取当前主机名
hostname=$(hostname)# 替换 .env 文件中的 NODE1 和 NODE2 为主机名
sed -i "s/NODE1=.*/NODE1=${hostname}1/" .env
sed -i "s/NODE2=.*/NODE2=${hostname}2/" .env执行创建目录操作
hostname=$(hostname)
NODE1=${hostname}1
NODE2=${hostname}2mkdir -p /data/elasticsearch/{certs,kibanadata,plugins}
mkdir -p /data/elasticsearch/{$NODE1,$NODE2}/{data,logs}chmod g+rwx /data/elasticsearch/{certs,kibanadata,plugins}
chmod g+rwx /data/elasticsearch/{$NODE1,$NODE2}/{data,logs}更改文件或目录 所属用户组 的命令,指定的目标组为组 ID 为 0 的用户组。
在大多数 Linux 系统中,组 ID 为 0 通常是 root 组chgrp 0 /data/elasticsearch/{certs,kibanadata,plugins}
chgrp 0 /data/elasticsearch/{$NODE1,$NODE2}/{data,logs}集群版部署将 docker-compose.yml 上传到 es001到 es009的目录 /data/elasticsearch方便做法: 上传到共享目录 es001:/backup/es然后各点执行 \cp /backup/es/docker-compose.yml /data/elasticsearch插件  cp -r /backup/es/ik /data/elasticsearch/plugins/
https://release.infinilabs.com/analysis-ik/stable/启动命令
docker-compose up -d注意事项: 首先启动第一个节点, 然后将生成的 ca.zip 及解压后的文件拷贝到其它节点对应目录, 这是为了使用相同的证书
\cp -r /data/elasticsearch/certs/ca* /backup/es/然后从共享盘拷贝到各个节点
\cp -r /backup/es/ca* /data/elasticsearch/certs检查是否部署成功
curl -k -u elastic:上述设置的密码 https://127.0.0.1:9200

相关文章:

elasticsearch8.16 docker-compose 多机器集群安装

在网上找了一圈, 发现要么就是单机版的部署了多个节点, 很少有多台机器部署集群的, 有些就拿官网的例子写一写, 没有实战经验, 下面分享一个教程, 实实在在的多台机器, 每台机器部署2个节点的例子 先上.env , docker-compose.yml文件, 这个文件是核心, 里面掺杂太多坑, 已经帮你…...

Flink--API 之 Source 使用解析

目录 一、Flink Data Sources 分类概览 (一)预定义 Source (二)自定义 Source 二、代码实战演示 (一)预定义 Source 示例 基于本地集合 基于本地文件 基于网络套接字(socketTextStream&…...

uniapp在小程序连接webScoket实现余额支付

webScoket文档:uni.connectSocket(OBJECT) | uni-app官网 /plugins/event.js const Dep function() {this.Evens Object.create(null); } class Event {constructor({dep new Dep()} {}) {if (dep.constructor Object && Object.keys(dep).length 0…...

Spring Boot【三】

自动注入 xml中可以在bean元素中通过autowire属性来设置自动注入的方式&#xff1a; <bean id"" class"" autowire"byType|byName|constructor|default" /> byName&#xff1a;按照名称进行注入 byType&#xff1a;按类型进行注入 constr…...

R 因子

R 因子 引言 在金融领域&#xff0c;风险管理和投资策略的优化一直是核心议题。传统的风险度量工具&#xff0c;如波动率、Beta系数等&#xff0c;虽然在一定程度上能够帮助投资者理解市场的波动和资产的相对风险&#xff0c;但它们往往无法全面捕捉到市场动态的复杂性。因此…...

【博主推荐】C# Winform 拼图小游戏源码详解(附源码)

文章目录 前言摘要1.设计来源拼图小游戏讲解1.1 拼图主界面设计1.2 一般难度拼图效果1.3 普通难度拼图效果1.4 困难难度拼图效果1.5 地域难度拼图效果1.6 内置五种拼图效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载结束语 前言 在数字浪潮汹涌澎湃的时代&#xff0c;程序开…...

深入解析 MySQL 启动方式:`systemctl` 与 `mysqld` 的对比与应用

目录 前言1. 使用 systemctl 启动 MySQL1.1 什么是 systemctl1.2 systemctl 启动 MySQL 的方法1.3 应用场景1.4 优缺点优点缺点 2. 使用 mysqld 命令直接启动 MySQL2.1 什么是 mysqld2.2 mysqld 启动 MySQL 的方法2.3 应用场景2.4 优缺点优点缺点 3. 对比分析结语 前言 MySQL …...

【python】windows pip 安装 module 提示 Microsoft Visual C++ 14.0 is required 处理方法

参考链接&#xff1a;https://blog.csdn.net/qzzzxiaosheng/article/details/12511900 1.问题引入 在使用pip 安装一些module经常会出现报错&#xff1a; Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools很明显这是缺少C的编译的相关依…...

python爬虫案例——猫眼电影数据抓取之字体解密,多套字体文件解密方法(20)

文章目录 1、任务目标2、网站分析3、代码编写1、任务目标 目标网站:猫眼电影(https://www.maoyan.com/films?showType=2) 要求:抓取该网站下,所有即将上映电影的预约人数,保证能够获取到实时更新的内容;如下: 2、网站分析 进入目标网站,打开开发者模式,经过分析,我…...

go sync.WaitGroup

1、数据结构 type WaitGroup struct {noCopy noCopystate atomic.Uint64 // high 32 bits are counter, low 32 bits are waiter count.sema uint32 } 计数器&#xff1a;原子变量&#xff0c;高32位用于为协程计数&#xff0c;低32位为等待计数&#xff08;被Wait阻塞等待&a…...

Libevent库-http通信不同请求方式的处理

做项目的时候用到了http通信&#xff0c;同事用libevent库写的&#xff0c;特此记录后端从前端拿到消息后的处理方式 void CHTTPTest::request(const std::any & data) {// data 是从前端拿到的数据void *obj std::any_cast<void *>(data); // std::any是C17新标准…...

关于node全栈项目打包发布linux项目问题总集

1.用pm2部署nest 说明&#xff1a;如果一开始将nest直接打包放到linux服务器上用pm2执行则会报错&#xff0c;这是因为tsconfig.build.tsbuildinfo文件的路径以及相关依赖问题。 报错会为&#xff1a;什么东西找不到.... 所以建议以下为步骤一步一步配置 将整个nest添加压缩包直…...

常见的上、下采样方法

常见的‌上采样方法‌ ‌‌反卷积&#xff08;Deconvolution&#xff09;或‌转置卷积&#xff08;Transpose Convolution&#xff09;‌&#xff1a;通过学习可逆卷积核来进行上采样&#xff0c;增加特征图的尺寸。‌‌插值&#xff08;Interpolation&#xff09;‌&#xff…...

如何解决 java.rmi.NotBoundException: RMI 中没有绑定的对象问题?亲测有效的解决方法!

java.rmi.NotBoundException 是 Java RMI&#xff08;Remote Method Invocation&#xff09;中的一个常见异常&#xff0c;它通常出现在远程方法调用过程中&#xff0c;表示在 RMI 注册表中找不到指定的绑定对象。换句话说&#xff0c;当客户端尝试查找一个远程对象&#xff08…...

设计模式:14、抽象工厂模式(配套)

目录 0、定义 1、抽象工厂模式的四种角色 2、抽象工厂的UML类图 3、示例代码 0、定义 提供一个创建一系列或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 1、抽象工厂模式的四种角色 抽象产品&#xff08;Product&#xff09;&#xff1a;一个抽象类或接口&a…...

Linux环境基础开发工具使用

目录 1. Linux软件包管理器yum 1.1 什么是软件包 1.2 Linux软件生态 1.3 关于rzsz 1.4 注意事项 1.5 查看软件包 2. Linux编辑器-vim使用 2.1 vim的基本概念 2.2 vim的基本操作 2.3 简单vim配置 3. 编译器gcc/g 3.1 背景知识 3.2 gcc编译选项 3.2.1 预处理…...

AI生成的一个.netcore 经典后端架构

下面是一个完整的 .NET Core 后端项目示例&#xff0c;使用 Dapper 作为轻量级 ORM 访问 Oracle 数据库&#xff0c;并实现高性能架构。我们将实现学生表、课程表、成绩表和班级表的基本增删改查功能&#xff0c;以及查询某个班级学生成绩的功能&#xff0c;并使用自定义缓存来…...

深度学习-48-AI应用实战之基于face_recognition的人脸识别

文章目录 1 人脸识别1.1 识别原理1.2 应用场景2 python实现人脸识别2.1 windows安装face_recognition2.2 安装问题及解决3 使用示例3.1 人脸区域检测3.2 对齐与编码3.3 人脸匹配3.4 信息录入4 附录4.1 函数cv2.rectangle4.2 参考附录1 人脸识别 通过图片或者摄像头的方式,将识…...

【Rabbitmq篇】高级特性----事务,消息分发

目录 事务 消息分发 应用场景 1. 限流 2.负载均衡 事务 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制.SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,要么全部成功,要么全部失败. 何为原…...

Python进程和线程适用场景

在选择使用 进程&#xff08;Process&#xff09;和 线程&#xff08;Thread&#xff09;时&#xff0c;通常取决于任务的类型、程序的需求以及硬件资源的限制。进程和线程各自有不同的特点&#xff0c;适用于不同的场景。下面是关于进程和线程的一些常见应用场景和选择指导&am…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...