Elasticsearch7.17 四 : ElasticSearch集群架构

2023-11-10

ElasticSearch集群架构

分布式系统的可用性与扩展性:
高可用性
服务可用性-允许有节点停止服务
数据可用性-部分节点丢失,不会丢失数据
可扩展性
请求量提升/数据的不断增长(将数据分布到所有节点上)
ES集群架构的优势:
提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
存储的水平扩容

核心概念

节点

集群
一个集群可以有一个或者多个节点
不同的集群通过不同的名字来区分,默认名字“elasticsearch“
通过配置文件修改,或者在命令行中 -E cluster.name=es-cluster进行设定’
节点
节点是一个Elasticsearch的实例;本质上就是一个JAVA进程
一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例
每一个节点都有名字,通过配置文件配置,或者启动时候 -E node.name=node1指定
每一个节点在启动之后,会分配一个UID,保存在data目录下
节点类型

  • Master Node:主节点
    处理创建,删除索引等请求,负责索引的创建与删除
    决定分片被分配到哪个节点
    维护并且更新Cluster State
  • Master eligible nodes:可以参与选举的合格节点
    每个节点启动后,默认就是一个Master eligible节点,可以设置 node.master: false禁止。
    Master-eligible节点可以参加选主流程,成为Master节点。
    当第一个节点启动时候,它会将自己选举成Master节点
  • Data Node:数据节点
    可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用。
    通过增加数据节点可以解决数据水平扩展和解决数据单点问题
  • Coordinating Node:协调节点
    负责接受Client的请求, 将请求分发到合适的节点,最终把结果汇集到一起。
    每个节点默认都起到了Coordinating Node的职责
  • 其他节点
    Hot & Warm Node
    不同硬件配置 的Data Node,用来实现Hot & Warm架构,降低集群部署的成本
    Ingest Node
    数据前置处理转换节点,支持pipeline管道设置,可以使用ingest对数据进行过滤、转换等操作
    Machine Learning Node
    负责跑机器学习的Job,用来做异常检测
    Tribe Node
    Tribe Node连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理

分片(Primary Shard & Replica Shard)

主分片(Primary Shard)
用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
一个分片是一个运行的Lucene的实例
主分片数在索引创建时指定,后续不允许修改
副本分片(Replica Shard)
用以解决数据高可用的问题。 副本分片是主分片的拷贝
副本分片数,可以动态调整
增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)

# 指定索引的主分片和副本分片数
PUT /blogs
{
  "settings": {
    "number_of_shards": 3, #主分片
    "number_of_replicas": 1 #副分片
  }
}

集群状态和分片设定

分片的设定
对于生产环境中分片的设定,需要提前做好容量规划。
分片数设置过小,导致后续无法增加节点实现水平扩展;单个分片的数据量太大,导致数据重新分配耗时。
分片数设置过大,影响搜索结果的相关性打分,影响统计结果的准确性;单个节点上过多的分片,会导致资源浪费,同时也会影响性能
7.0 开始,默认主分片设置成1,解决了over-sharding(分片过度)的问题
集群status
Green: 主分片与副本都正常分配
Yellow: 主分片全部正常分配,有副本分片未能正常分配
Red: 有主分片未能分配。例如,当服务器的磁盘容量超过85%时,去创建了一个新的索引
CAT API查看集群信息

GET /_cat/nodes?v #查看节点信息
GET /_cat/health?v #查看集群当前状态:红、黄、绿
GET /_cat/shards?v #查看各shard的详细情况
GET /_cat/shards/{index}?v #查看指定分片的详细情况
GET /_cat/master?v #查看master节点信息
GET /_cat/indices?v #查看集群中所有index的详细信息
GET /_cat/indices/{index}?v #查看集群中指定index的详细信息

集群搭建

系统环境
操作系统: CentOS7,准备用户es。关闭防火墙
elasticsearch:elasticsearch-7.17.3
需要删除es下的data目录里面的节点信息,否则会加载以前的节点信息导致集群搭建失败
修改elasticsearch.yml

# 指定集群名称3个节点必须一致
cluster.name: elasticsearch
#指定节点名称,每个节点名字唯一
node.name: node-1
#是否有资格为master节点,默认为true
node.master: true
#是否为data节点,默认为true
node.data: true
# 绑定ip,开启远程访问,可以配置0.0.0.0
network.host: 0.0.0.0
#指定web端口
http.port: 9200
#指定tcp端口
transport.tcp.port: 9300
#用于节点发现
discovery.seed_hosts: ["192.168.10.111","192.168.10.112","192.168.10.114"]
#7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。
#该选项配置为node.name的值,指定可以初始化集群主节点的名称
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"

每个节点的配置文件,只要把node.name 修改即可,其他配置相同。
切换为es用户启动es
在这里插入图片描述
查看启动时候publish的地址是否是 配置文件上的地址,如果是其他地址,需要通过ifconfig把其他网关禁止。
验证集群
访问:http://192.168.10.111:9200/_cat/nodes
在这里插入图片描述
到此集群搭建完毕

安装Cerebro客户端

Cerebro介绍
Cerebro 可以查看分片分配和通过图形界面执行常见的索引操作。 完全开源,并且它允许添加用户,密码或 LDAP 身份验证问网络界面。
Cerebro 基于 Scala 的Play 框架编写,用于后端 REST 和 Elasticsearch 通信。 它使用通过 AngularJS 编写的单页应用程序(SPA)前端。
项目网址:https://github.com/lmenezes/cerebro
下载地址:https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.zip
运行 cerebro

cerebro-0.9.4/bin/cerebro

#后台启动
nohup bin/cerebro > cerebro.log &

访问:http://192.168.10.111:9000
在这里插入图片描述
输入ES集群节点:http://192.168.65.192:9200,建立连接:
在这里插入图片描述

安装kibana

修改kibana配置 vim config/kibana.yml

server.port: 5601
server.host: "192.168.10.111" 
elasticsearch.hosts: ["http://192.168.10.111:9200","http://192.168.10.112:9200","http://192.168.10.114:9200"]  
i18n.locale: "zh-CN"   

启动 访问kibana
在这里插入图片描述

ES安全认证

ES敏感信息泄露的原因
Elasticsearch在默认安装后,不提供任何形式的安全防护。不合理的配置导致公网可以访问ES集群。比如在elasticsearch.yml文件中,server.host配置为0.0.0.0
免费的方案

  • 设置nginx反向代理
  • 安装免费的Security插件
    Search Guard : https://search-guard.com/
    readonlyrest: https://readonlyrest.com/
  • X-Pack的Basic版
    从ES 6.8开始,Security纳入x-pack的Basic版本中,免费使用一些基本的功能

集群内部安全通信

ElasticSearch集群内部的数据是通过9300进行传输的,如果不对数据加密,可能会造成数据被抓包,敏感信息泄露。
解决方案: 为节点创建证书
TLS 协议要求Trusted Certificate Authority (CA)签发x.509的证书。证书认证的不同级别:

  • Certificate ——节点加入需要使用相同CA签发的证书
  • Full Verification——节点加入集群需要相同CA签发的证书,还需要验证Host name 或IP地址
  • No Verification——任何节点都可以加入,开发环境中用于诊断目的

生成节点证书

# 为集群创建一个证书颁发机构
bin/elasticsearch-certutil ca
# 为集群中的每个节点生成证书和私钥
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 移动到config目录下
mv *.p12 config/

将如上命令生成的两个证书文件拷贝到另外两个节点作为通信依据。
配置节点间通信
三个ES节点增加如下配置:

## elasticsearch.yml 配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

开启并配置X-Pack的认证

修改elasticsearch.yml配置文件,开启xpack认证机制xpack.security.enabled: true # 开启xpack认证机制
测试:
使用Curl访问ES,返回401错误curl 'localhost:9200/_cat/nodes
在这里插入图片描述
浏览器访问http://192.168.10.111:9200/需要输入用户名密码
在这里插入图片描述
为内置账号添加密码
ES中内置了几个管理其他集成组件的账号即:apm_system, beats_system, elastic, kibana, logstash_system, remote_monitoring_user,使用之前,首先需要添加一下密码。
bin/elasticsearch-setup-passwords interactive
interactive:给用户手动设置密码。
auto:自动生成密码。
在这里插入图片描述
所有账号密码都是123456,for后面的就是对应的账号。比如上图访问http://192.168.10.111:9200 需要登录的账号密码就是 elastic ; 123456
配置kibana账号密码
开启了安全认证之后,kibana连接es以及访问es都需要认证。修改kibana.yml

elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"

注意上面的用户名密码是kibana 访问 es集群的认证,界面登录kibana的账号密码
启动kibana服务 nohup bin/kibana &
登录的账号密码是 elastic 123456

配置cerebro账号密码
修改配置文件

vim conf/application.conf

hosts = [
  {
    host = "http://192.168.10.111:9200"
    name = "es-cluster"
    auth = {
      username = "elastic"
      password = "123456"
    }
  }
]

在这里插入图片描述

启动cerebro服务 nohup bin/cerebro > cerebro.log &

生产环境常见集群部署方式

在开发环境中,一个节点可承担多种角色。
在生产环境中:
根据数据量,写入和查询的吞吐量,选择合适的部署方式。建议设置单一角色的节点
这种单一角色职责分离的好处:

  • 单一 master eligible nodes: 负责集群状态(cluster state)的管理,使用低配置的CPU,RAM和磁盘
  • 单一 data nodes: 负责数据存储及处理客户端请求,使用高配置的CPU,RAM和磁盘
  • 单一ingest nodes: 负责数据处理,使用高配置CPU; 中等配置的RAM; 低配置的磁盘
  • 单一Coordinating Only Nodes(Client Node),使用高配置CPU; 高配置的RAM; 低配置的磁盘

生产环境中,建议为一些大的集群配置Coordinating Only Nodes。扮演Load Balancers,降低Master和 Data Nodes的负载;负责搜索结果的Gather/Reduce;有时候无法预知客户端会发送怎么样的请求。比如大量占用内存的操作,一个深度聚合可能会引发OOM。

增加节点水平扩展场景

  • 当磁盘容量无法满足需求时,可以增加数据节点;
  • 磁盘读写压力大时,增加数据节点
  • 当系统中有大量的复杂查询及聚合时候,增加Coordinating节点,增加查询的性能

在这里插入图片描述
读写分离架构
在这里插入图片描述

如何对集群的容量进行规划

一个集群总共需要多少个节点?一个索引需要设置几个分片?规划上需要保持一定的余量,当负载出现波动,节点出现丢失时,还能正常运行。
做容量规划时,一些需要考虑的因素:

  • 机器的软硬件配置
  • 单条文档的大小│文档的总数据量│索引的总数据量((Time base数据保留的时间)|副本分片数
  • 文档是如何写入的(Bulk的大小)
  • 文档的复杂度,文档是如何进行读取的(怎么样的查询和聚合)

评估业务的性能需求:

  • 数据吞吐及性能需求
    数据写入的吞吐量,每秒要求写入多少数据?
    查询的吞吐量?
    单条查询可接受的最大返回时间?
  • 了解你的数据
    数据的格式和数据的Mapping
    实际的查询和聚合长的是什么样的

ES集群常见应用场景:

  • 搜索: 固定大小的数据集
    搜索的数据集增长相对比较缓慢
  • 日志: 基于时间序列的数据
    使用ES存放日志与性能指标。数据每天不断写入,增长速度较快
    结合Warm Node 做数据的老化处理

硬件配置:

  • 选择合理的硬件,数据节点尽可能使用SSD
  • 搜索等性能要求高的场景,建议SSD
    按照1∶10的比例配置内存和硬盘
  • 日志类和查询并发低的场景,可以考虑使用机械硬盘存储
    按照1:50的比例配置内存和硬盘
  • 单节点数据建议控制在2TB以内,最大不建议超过5TB
  • JVM配置机器内存的一半,JVM内存配置不建议超过32G
  • 不建议在一台服务器上运行多个节点

内存大小要根据Node 需要存储的数据来进行估算

  • 搜索类的比例建议: 1:16
  • 日志类: 1:48——1:96之间

假设总数据量1T,设置一个副本就是2T总数据量

  • 如果搜索类的项目,每个节点31*16 = 496 G,加上预留空间。所以每个节点最多400G数据,至少需要5个数据节点
  • 如果是日志类项目,每个节点31*50= 1550 GB,2个数据节点即可

部署方式:

  • 按需选择合理的部署方式
  • 如果需要考虑可靠性高可用,建议部署3台单一的Master节点
  • 如果有复杂的查询和聚合,建议设置Coordinating节点
  • 集群扩容:
    增加Coordinating / Ingest Node:解决CPU和内存开销的问题
    增加数据节点:解决存储的容量的问题
    为避免分片分布不均的问题,要提前监控磁盘空间,提前清理数据或增加节点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch7.17 四 : ElasticSearch集群架构 的相关文章

  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 为 Logstash 中的新字段设置 Elasticsearch Analyzer

    通过使用GROK filter 我们可以向Logstash添加新字段 但是 我想知道如何为该特定字段设置分析器 例如 我有一个新的 id 字段 其中有一个字段 例如a b 但是 Elasticsearch 附带的普通分析器会将其分解为a a
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也

随机推荐

  • tensorflow2 auto mpg汽车油耗预测实践(3.5节)

    tensorflow2 汽车油耗预测实践 tensorflow2 汽车油耗预测实践 1 数据集 1 1 Auto MPG 1 2 数据清洗 1 3 数据处理 1 4 标准化 2 搭建神经网络 3 训练 4 画图与结果分析 tensorflo
  • 为php8安装xmlrpc扩展

    Php从php4到php5 由php5至php7 由php7至php8 每次大版本的更新 都有质的飞跃 Php 8 0 5来了 紧随着Php 8 0 6也来了 Php8也为大家带来了新的特性 值得大家一试 上周Moodle3 11稳定版本也
  • 打开FTP server或者wftpd32提示 unknow error 10013

    打开FTP server或者wftpd32提示 unknow error 10013 问题描述 解决方法 重启ftp 参考 问题描述 近期在进行vxworks的相关环境搭建时打开FTP server总提示unknow error 由于没有详
  • 【无标题】h5跳转微信公众号关注页面

    h5跳转微信公众号关注页面 最近在做h5项目 有个需求是如果用户没有关注公众号 需要引导用户跳转至微信公众号关注页面 制作一个链接 点击该链接跳转到公众号关注页面 方法一 1 从公众平台登进入公众号 2 查看源代码 3 ctrl f 搜索
  • 使用ESP32-CAM和OpenCV实现图片获取

    我觉得这是一种廉价并且较为可靠的图像获取方案 目前无法输出视频流 因为我还不知道怎么提升传输速度 进入正题 ESP32 CAM模组在某宝上面差不多25块一个 不是M5STACK 我的图像传输方案是先在esp32上面获取图像的16进制字符串
  • 解决 dhcp服务后systemctl start dhcpd启动不了的问题

    输入 systemctl start dhcpd 报错 Job for dhcpd service failed because the control process exited with error code See systemct
  • JAVA异常(Throwable)

    目录 1 异常的产生和分类 严重问题Error 不严重问题Exception 2 异常处理 1 捕获异常 try catch finally 1 包含的结构 try catch finally 2 三种形式 3 注意 2 抛出异常 thro
  • 视频服务器(6) Kurento[1] rtsp2webrtc

    目录 一 安装Kurento 二 播放rtsp调研 三 播放RTSP实现 四 wsl ubuntu 安装使用 官网 https www kurento org 参考 Kurento流媒体开发环境搭建流程以及连接海康威视摄像头 参考 Kure
  • 腾讯面试题

    1 STL中的内存管理机制 STL的每一个容器都已经指定了缺省的空间配置器为alloc 下面来分析一下这个缺省的空间配置器 alloc空间分配的策略 考虑到小型区块可能造成的内存的碎片的问题 SGI设计了双层的配置器 第一层的配置器直接使用
  • 面试官:谈谈过滤器和拦截器的区别?

    一 拦截器和过滤器的区别 1 拦截器 Interceptor 只对action请求起作用 即对外访问路径 而过滤器 Filter 则可以对几乎所有的请求都能起作用 包括css js等资源文件 2 拦截器 Interceptor 是在Serv
  • C++类与对象-类成员函数的this指针

    C 类与对象 类成员函数的this指针 前言 相较于C语言结构体的对象实例化 我们在对结构体变量进行初始化的时候得将结构体变量的地址传入才可对结构体变量内容的初始化 而C 中也是如此 其编译器在代码编译阶段会将此过程填充 其中就涉及到thi
  • PowerMTA 4.5邮件群发服务器安装配置

    说明 已基本实现邮件的发送功能 spf dkim和DMARC验证通过 用户名密码认证失败待后续排查验证 环境 OS CentOS 7 6 PowerMTA 4 5r11 域名 mydomain com 服务器公网IP X X X X 客户端
  • sql如何取前几行_sql 取前几行记录语句

    SQLITE数据库 代码如下 select from table limit N db2数据库 代码如下 select from tab fetch first 10 rows only oracle数据库 代码如下 select from
  • 静态测试和动态测试

    1 静态测试 静态测试 static testing 就是不实际运行被测软件 而只是静态地检查程序代码 界面或文档中可能存在的错误的过程 包括对代码测试 界面测试和文档测试三个方面 对于代码测试 主要测试代码是否符合相应的标准和规范 对于界
  • Asahi Linux for M1 Apple Silicon 首次发布 Alpha 版

    Apple Silicon 的基于 Arch 的发行版只能用于更轻松地安装 OpenBSD Asahi Linux已经为Apple M1 M1 Pro或M1 Max设备上的用户发布了其第一个公共alpha版本 该发行版基于Arch Linu
  • 快手开店怎么引流?快手小店自上线以来就吸引众多的商家入驻

    快手开店怎么引流 快手小店自上线以来就吸引众多的商家入驻 快手小店自上线以来就吸引众多的商家入驻 当然也有不少快手主播粉丝多了也会去卖货多赚点钱 在快手上面开店重视的还是流量 如何才能给店铺带来更多的流量呢 商家需要怎么做 下面一起来看快手
  • 程序员模式

    在我的心中 程序员是一个做事有计划 有思想 具有高超技术 解决能力的艺术家 自己作为一个程序员 自愧不能达到如上的标准 看到过一个程序员曾经这样自嘲 一个只有半瓶子水晃晃荡荡的程序员 这些年来一直从事开发的工作 稀里糊涂跑过许多城市 流浪过
  • Oracle环境变量配置步骤

    Oracle11g环境变量配置 在做开发的过程中 几次重装系统安装配置过Oracle 本篇博客就对oracle配置环境变量的细节做一次记录和分享 三个模块 Oracle11g的安装 instantclient 11 2客户端的安装 PLSQ
  • waiting for ZeroTier system service,

    查了好几个回答 waiting for ZeroTier system service这个错误是之前装过但是卸载后未删除干净造成的 我是卸载后删除了下边四个路径下的Zero Tier文件夹 然后重装就好了 Program Files Pro
  • Elasticsearch7.17 四 : ElasticSearch集群架构

    文章目录 ElasticSearch集群架构 核心概念 节点 分片 Primary Shard Replica Shard 集群状态和分片设定 集群搭建 安装Cerebro客户端 安装kibana ES安全认证 集群内部安全通信 开启并配置