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

Elasticsearch 集群部署

        Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我们将通过三个节点(node1、node2、node3)来搭建一个高可用的 Elasticsearch 集群,以确保您的数据能够在多个节点之间高效地存储和检索。

中文文档:Elastic — 搜索 AI 公司 | Elastic

英文文档:Documentation

1. 准备工作

1. 配置多台 Linux 虚拟机参考如何准备多台虚拟机并配置集群化软件_多台服务器虚拟化集群-CSDN博客文章浏览阅读978次,点赞8次,收藏11次。在搭建集群化软件的过程中,首先需要准备好多台Linux服务器。本文将详细介绍如何使用VMware提供的克隆功能来准备多台虚拟机,并进行必要的配置以实现集群化软件的部署。_多台服务器虚拟化集群https://blog.csdn.net/kersixy/article/details/142205834?spm=1001.2014.3001.5501

2. 【node1、2、3】创建工作目录

以部署到 /export/server 目录为例:

mkdir -p /export/server

3. 【node1、2、3】开放必要端口

确保以下端口在防火墙中开放:

  • 9200:HTTP REST API 端口,用于与 Elasticsearch 集群进行交互。
  • 9300:节点间通信端口,用于 Elasticsearch 节点之间的内部通信。
  • 5601(可选):Kibana 端口,用于访问 Kibana 界面。
sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent
sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5601/tcp --permanent
sudo firewall-cmd --reload

2. 下载和安装 Elasticsearch

1. 下载 Elasticsearch

方式一:在线下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.26-linux-x86_64.tar.gz

方式二:浏览器下载

Past Releases of Elastic Stack Software | ElasticLooking for a past release of Elasticsearch, Logstash, Kibana, es-hadoop, Shield, Marvel, or our language clients? You're in the right place....icon-default.png?t=O83Ahttps://www.elastic.co/cn/downloads/past-releases#elasticsearch

选择所需的版本,点击下载:

点击 LINUX X86_64,下载 tar.gz 文件,上传到虚拟机。

2. 【node1】解压 Elasticsearch,并创建数据目录

tar -zxvf elasticsearch-7.17.26-linux-x86_64.tar.gz
mv elasticsearch-7.17.26 /export/server/elasticsearch
mkdir -p /export/server/elasticsearch/data

3. 配置 Elasticsearch

1. 【node1】配置 elasticsearch.yml :

sudo vi /export/server/elasticsearch/config/elasticsearch.yml

i 编辑文件,在文件中追加一下内容:

cluster.name: es-cluster
node.name: node-1
node.master: true
node.data: true
path.data: /export/server/elasticsearch/data
path.logs: /export/server/elasticsearch/logs
network.host: 0.0.0.0
discovery.seed_hosts: ["node2", "node3"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
action.destructive_requires_name: true
gateway.recover_after_nodes: 2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.port: 9200
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16

ESC 退出编辑,:wq 保存并退出。 

 配置说明:

  • cluster.name:集群名称。同一个集群的所有节点必须使用相同的集群名称。
  • node.name:节点名称。同一个集群内的每个节点名称必须唯一。
  • node.master:是否可以被选举为主节点。设置为 true 表示该节点有资格成为主节点。
  • node.data:该节点是否可以存储数据。设置为 true 表示该节点可以存储数据。
  • node.roles:是否有主节点资格;master使其有资格被选为控制集群的主节点;data此节点同时为数据节点,7.x版本以后支持,同node.master + node.data。配置示例:node.roles: [master,data]
  • path.data:数据目录的位置。Elasticsearch 将在此目录下存储索引数据。
  • path.logs:日志目录的位置。Elasticsearch 将在此目录下存储日志文件。
  • network.host:设置节点绑定的 IP 地址或主机名。默认情况下,Elasticsearch 只允许本机访问。设置为 0.0.0.0 表示允许任何 IP 地址访问。
  • discovery.seed_hosts:发现其他节点的初始列表。这里填写其他节点的 IP 地址或主机名,不包括当前节点。
  • network.tcp.keep_alive:是否启用 TCP 保活机制。设置为 true 可以防止长时间空闲的连接被关闭。
  • network.tcp.no_delay:是否禁用 Nagle 算法。设置为 true 可以减少延迟,提高响应速度。
  • action.destructive_requires_name:控制是否需要在执行破坏性操作时明确指定索引名称。破坏性操作包括删除索引、清空索引等。启用此配置可以增加安全性,防止误操作导致数据丢失。
  • gateway.recover_after_nodes:在集群恢复过程中,至少需要多少个节点在线后才开始恢复索引。通常,这个值应该小于或等于集群中的总节点数。
  • cluster.initial_master_nodes:用于指定在集群启动时哪些节点可以作为初始主节点候选。填写全部节点名称。
  • http.port:HTTP REST API 端口。默认端口为 9200。
  • cluster.routing.allocation.cluster_concurrent_rebalance:集群内同时启动的数据任务个数。默认是 2 个。
  • cluster.routing.allocation.node_concurrent_recoveries:添加或删除节点及负载均衡时并发恢复线程个数。默认是 4 个。
  • cluster.routing.allocation.node_initial_primaries_recoveries:初始化数据恢复时,并发恢复线程的个数。默认是 4 个。

2. 【node1】配置 JVM 选项

sudo vi /export/server/elasticsearch/config/jvm.options

G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:

-Xms4g
-Xmx4g

 ESC 退出编辑,:wq 保存并退出。

3. 【node1】将 elasticsearch 录递归复制到 node2、node3 主机的 /export/server/ 目录下

cd /export/server
scp -r elasticsearch node2:`pwd`/
scp -r elasticsearch node3:`pwd`/

4. 【node2】修改 node2 的 elasticsearch.yml

sudo vi /export/server/elasticsearch/config/elasticsearch.yml

i 编辑文件,文件内容修改为: 

cluster.name: es-cluster
node.name: node-2
node.master: true
node.data: true
path.data: /export/server/elasticsearch/data
path.logs: /export/server/elasticsearch/logs
network.host: 0.0.0.0
discovery.seed_hosts: ["node1", "node3"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
action.destructive_requires_name: true
gateway.recover_after_nodes: 2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.port: 9200
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16

ESC 退出编辑,:wq 保存并退出。 

5. 【node3】修改 node3 的 elasticsearch.yml

sudo vi /export/server/elasticsearch/config/elasticsearch.yml

i 编辑文件,文件内容修改为: 

cluster.name: es-cluster
node.name: node-3
node.master: true
node.data: true
path.data: /export/server/elasticsearch/data
path.logs: /export/server/elasticsearch/logs
network.host: 0.0.0.0
discovery.seed_hosts: ["node1", "node2"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
action.destructive_requires_name: true
gateway.recover_after_nodes: 2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.port: 9200
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16

ESC 退出编辑,:wq 保存并退出。

4. 【node1、2、3】系统配置

1. 创建 Elasticsearch 用户

groupadd es
useradd es -g es
cd /export/server
sudo chown es:es -R elasticsearch/

查看赋权情况:

ll

2. 设置系统资源限制

sudo vi /etc/security/limits.conf

G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:

*               soft    nofile          65536
*               hard    nofile          65536

ESC 退出编辑,:wq 保存并退出。

3. 设置虚拟内存限制

sudo vi /etc/sysctl.conf

G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:

vm.max_map_count=262145

ESC 退出编辑,:wq 保存并退出。加载并应用 /etc/sysctl.conf 文件中的系统参数设置:

sysctl -p

4. 设置环境变量

sudo vi /etc/profile

G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:

export ES_JAVA_HOME=/export/server/elasticsearch/jdk
export PATH=$ES_JAVA_HOME/bin:$PATH

注意:

 如果同时配置过 JAVA_HOME 和 ES_JAVA_HOME ,PATH 会优先使用先配置的环境变量,即 java -version 的版本为先配置的 PATH,如想优先使用 JAVA_HOME,则需要将

export PATH=$ES_JAVA_HOME/bin:$PATH
export PATH=$JAVA_HOME/bin:$PATH

合并为:

export PATH=$JAVA_HOME/bin:$ES_JAVA_HOME/bin:$PATH

ESC 退出编辑,:wq 保存并退出。重新加载 /etc/profile 文件中的环境变量设置,使新的设置立即生效:

source /etc/profile

5. 创建 Systemd 服务(可选)

vi /etc/systemd/system/elasticsearch.service

i 编辑文件,文件内容为:

[Unit]
Description=Elasticsearch
After=network.target[Service]
User=es
Group=es
Environment="ES_JAVA_OPTS=-Xms512m -Xmx512m"
Environment="ES_JAVA_HOME=/export/server/elasticsearch/jdk"
Environment="JAVA_HOME=/export/server/jdk"
ExecStart=/export/server/elasticsearch/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
Restart=on-failure
LimitMEMLOCK=infinity
LimitNOFILE=65536[Install]
WantedBy=multi-user.target

5. 【node1、2、3】启动 Elasticsearch

5.1 方式一:手动启动

su es
cd /export/server/elasticsearch/bin
./elasticsearch -d

5.2 方式二:使用 Systemd 服务

# 启动elasticsearch
systemctl start elasticsearch
# 查看elasticsearch状态
systemctl status elasticsearch
# 设置开机自启动
systemctl enable elasticsearch

Systemd 服务其他命令:

# 重启elasticsearch
systemctl restart elasticsearch
# 停止elasticsearch服务
systemctl stop elasticsearch

6. 查看服务状态

1. 查看启动是否成功

项目启动大约需要2-4 分钟时间,要确保项目完全启动后再执行,否则会出现拒绝访问:

curl http://内网ip:9200

2. 检查 Elasticsearch 集群的健康状态

curl -X GET "内网ip:9200/_cat/health?v"

说明:

status: 集群状态,常见的状态有:

  • green: 所有主分片和副本分片都可用。
  • yellow: 所有主分片可用,但某些副本分片不可用。
  • red: 一些主分片不可用。

3. 分析 Elasticsearch 集群的状态和各个节点的信息

curl -X GET "http://内网ip:9200/_cat/nodes?v" 

说明:

  • ip: 节点的 IP 地址。
  • heap.percent: 堆内存使用百分比。
  • ram.percent: 物理内存使用百分比。
  • cpu: CPU 使用率。
  • load_1m: 最近 1 分钟的系统负载平均值。
  • load_5m: 最近 5 分钟的系统负载平均值。
  • load_15m: 最近 15 分钟的系统负载平均值。
  • node.role: 节点的角色,常见的角色包括:
    • c: 集群管理节点。
    • d: 数据节点。
    • f: 冻结节点。
    • h: 主节点。
    • i: 协调节点。
    • l: 日志节点。
    • m: 主节点。
    • r: 远程集群客户端节点。
    • s: 存储节点。
    • t: 传输节点。
    • w: 写节点。
  • master: 是否为主节点,* 表示是主节点,- 表示不是主节点。
  • name: 节点名称。

 到此为止,无安全配置的 Elasticsearch 集群配置完成。


7. 安全配置

7.1 生成证书

1. 【node1】生成 CA 证书

cd /export/server/elasticsearch/bin
./elasticsearch-certutil ca
  • 输入 CA 证书文件名。接受默认文件名 elastic-stack-ca.p12,亦可换成其他文件名;
  • 设置 CA 密钥库的密码。

2. 【node1】生成节点证书

./elasticsearch-certutil cert --ca /export/server/elasticsearch/elastic-stack-ca.p12
  • 输入CA 密钥库的密码。输入上一步的CA 密钥库的密码;
  • 输入节点证书文件名。接受默认文件名 elastic-certificates.p12 ,亦可输入文件名修改;
  • 最后提示输入节点证书密钥库密码。可以直接回车,跳过输入密码。

 3. 【node1】移动和赋权证书

cd /export/server/elasticsearch
mv elastic-certificates.p12 config/
mv elastic-stack-ca.p12 config/
cd config/
scp -r elastic-certificates.p12 node2:`pwd`/
scp -r elastic-stack-ca.p12 node2:`pwd`/
scp -r elastic-certificates.p12 node3:`pwd`/
scp -r elastic-stack-ca.p12 node3:`pwd`/

4. 【node1、2、3】配置安全设置

cd /export/server/elasticsearch/config/
sudo chown es:es -R ./*
sudo vi elasticsearch.yml

G 跳转到文件尾行,$ 跳转到当前行末尾,i 编辑文件。在文件末尾新建一行添加:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /export/server/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /export/server/elasticsearch/config/elastic-certificates.p12

ESC 退出编辑,:wq 保存并退出。

5. 【node1、2、3】重启 Elasticsearch

  • 如果是手动启动的,则按以下方法重启:
# 查看进程
ps -ef | grep elasticsearch
# 强制停止进程
kill -9 对应进程
# 启动Elasticsearch
# 如果是root用户下,需要su es切换用户,es用户下无需切换
su es
cd /export/server/elasticsearch/bin
./elasticsearch -d

  • 如果使用 Systemd 服务,则按以下方法重启:
# 重启Elasticsearch,elasticsearch.service可写为elasticsearch
systemctl restart elasticsearch.service

7.2 【node1】设置用户密码

1. 交互式设置密码

cd /export/server/elasticsearch/bin
./elasticsearch-setup-passwords interactive
  • 请确认您是否要继续:y
  • 为 elastic 用户(超级用户,具有所有权限)输入密码;
  • 为 elastic 用户(超级用户,具有所有权限)确认密码;
  • 为 apm_system 用户(APM 服务器使用的用户)输入密码;
  • 为 apm_system 用户(APM 服务器使用的用户)确认密码;
  • 为 kibana 用户(Kibana 服务器使用的用户)输入密码;
  • 为 kibana 用户(Kibana 服务器使用的用户)确认密码;
  • 为 logstash_system 用户(Logstash 服务器使用的用户)输入密码;
  • 为 logstash_system 用户(Logstash 服务器使用的用户)确认密码;
  • 为 beats_system 用户(Filebeat 和其他 Beats 采集器使用的用户)输入密码;
  • 为 beats_system 用户(Filebeat 和其他 Beats 采集器使用的用户)确认密码;
  • 为 remote_monitoring_user 用户(用于远程监控的用户)输入密码;
  • 为 remote_monitoring_user 用户(用于远程监控的用户)确认密码。

2. 测试连接

  • 虚拟机访问测试:
curl -u elastic:elastic用户密码 http://内网ip:9200

  •  浏览器访问测试:

访问 http://外网ip:9200/ ,访问结果如下图:

8. 安装 IK 分词器

注意:

安装 IK 分词器可以不配置证书和密码。

1. 【node1】下载 IK 分词器

源码地址:GitHub - infinilabs/analysis-ik at Latest

注意:

下载 IK 分词器选择的版本一定要和 Elasticsearch 版本一致

 方式一:在线下载 zip 包

wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.26.zip

方式二:离线下载

Index of: analysis-ik/stable/icon-default.png?t=O83Ahttps://release.infinilabs.com/analysis-ik/stable/方式三:在线下载插件

/export/server/elasticsearch/bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.26

2. 【node1】解压并移动插件

# 如果是zip包则需要解压,也可以本地解压好再上传
unzip elasticsearch-analysis-ik-7.17.26.zip
# 移动并重命名
mv elasticsearch-analysis-ik-7.17.26 /export/server/elasticsearch/plugins/ik

3. 【node1】配置 IK 分词器

进入插件目录并编辑配置文件 IKAnalyzer.cfg.xml,可以根据需要配置扩展字典和扩展停止词字典:

cd /export/server/elasticsearch/plugins/ik
sudo vi config/IKAnalyzer.cfg.xml

i 编辑文件,修改后文件内容示例为:

<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict">ext.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">stopwords.dic</entry><!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

 ESC 退出编辑,:wq 保存并退出。 

1. 标签说明:

  • <entry key="ext_dict">ext.dic</entry>
    • 作用: 指定 IK 分词器使用的扩展字典文件路径。
    • 说明: 在 ext.dic 文件中,你可以添加自定义的词汇,这些词汇会被 IK 分词器识别为单独的词。每行一个词。ext.dic 可以换成其他文件名。
  • <entry key="ext_stopwords">stopword.dic</entry>
    • 作用: 指定 IK 分词器使用的扩展停止词字典文件路径。
    • 说明: 在 stopword.dic 文件中,你可以添加自定义的停止词,这些词在分词过程中会被过滤掉。每行一个词。stopword.dic 可以换成其他文件名。
  • <entry key="remote_ext_dict">words_location</entry>
    • 作用: 指定远程扩展字典的 URL 地址。
    • 说明: 如果你有一个远程服务器托管的字典文件,可以配置此选项。IK 分词器会定期从指定的 URL 下载字典文件并更新本地字典。
  • <entry key="remote_ext_stopwords">words_location</entry>
    • 作用: 指定远程扩展停止词字典的 URL 地址。
    • 说明: 类似于远程扩展字典,用于配置远程的停止词字典文件。

2. IK 分词器默认词典说明:

文件名

作用

内容

extra_main.dic

额外的主要字典文件,通常包含大量常用词汇

每行一个词汇,用于扩展分词器的词汇库

extra_single_word.dic

额外的单字词典文件,包含单字词汇

每行一个单字词汇

extra_single_word_full.dic

额外的单字词典文件(完整版),包含更多的单字词汇

每行一个单字词汇

extra_single_word_low_freq.dic

额外的低频单字词典文件,包含低频出现的单字词汇

每行一个低频单字词汇

extra_stopword.dic

额外的停止词词典文件,用于添加自定义停止词

每行一个停止词

main.dic

主字典文件,包含基本的常用词汇

每行一个词汇,用于分词器的基本词汇库

preposition.dic

介词词典文件,包含介词词汇

每行一个介词词汇

quantifier.dic

量词词典文件,包含量词词汇

每行一个量词词汇

stopword.dic

停止词词典文件,包含常用的停止词

每行一个停止词

suffix.dic

后缀词典文件,包含常见的后缀词汇

每行一个后缀词汇

surname.dic

姓氏词典文件,包含常见的姓氏词汇

每行一个姓氏词汇

创建扩展字典和扩展停止词字典文件:

touch /export/server/elasticsearch/plugins/ik/config/ext.dic
touch /export/server/elasticsearch/plugins/ik/config/stopwords.dic

说明:

  1. 扩展字典和扩展停止词字典文件字符集必须是 UTF-8 ,否则不会生效;
  2. 可以配置多个扩展字典和扩展停止词字典,用英文分号分隔;
  3. 扩展字典和扩展停止词字典文件一行代表一个组词;
  4. 在使用 IK 分词器时,如果你对扩展字典或扩展停止词字典进行了修改,通常情况下不需要重启 Elasticsearch。IK 分词器会定期自动加载这些字典文件的更新内容。如果想立即生效,可以重启 Elasticsearch。

4. 【node1】同步插件到其他节点

cd /export/server/elasticsearch/plugins
scp -r ik node2:`pwd`/
scp -r ik node3:`pwd`/

5. 【node1、2、3】修改插件目录权限

chown -R es:es /export/server/elasticsearch/plugins

6. 【node1、2、3】重启

  •  如果是手动启动的,则按以下方法重启:
# 查看进程
ps -ef | grep elasticsearch
# 强制停止进程
kill -9 对应进程
# 启动Elasticsearch
# 如果是root用户下,需要su es切换用户,es用户下无需切换
su es
cd /export/server/elasticsearch/bin
./elasticsearch -d

  • 如果使用 Systemd 服务,则按以下方法重启:
# 重启Elasticsearch,elasticsearch.service可写为elasticsearch
systemctl restart elasticsearch.service

7. 访问测试

curl -u elastic:elastic-pwd123 -X POST "node1:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{"analyzer": "ik_smart","text": "加油,小明同学"
}
'

IK 分词器的分词规则: 

IK分词插件的分词器的分词规则包括ik_smart和ik_max_word两种:

  • ik_max_word:将文本按照最细粒度进行拆分,适合术语查询。例如会将计算机汉字输入方法拆分为计算机,计算,算机,汉字输入,汉字,输入,方法。
  • ik_smart:将文本按照粗粒度进行拆分,适合短语查询。例如会将计算机汉字输入方法拆分为计算机,汉字输入,方法。 

相关文章:

Elasticsearch 集群部署

Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置&#xff0c;包括节点间的通信、客户端访问、安全设置等关键步骤。我…...

Windows系统VSCode 搭建ESP-IDF环境

VS Code&#xff0c;安装ESP-IDF插件 快捷键CTRLSHIFTP&#xff0c;弹出显示所有命令的窗口&#xff0c;选择ESP-IDF的欢迎 使用第一个选项&#xff0c;要选择一个ESP-IDF版本&#xff0c;选最新的就行 点击Install,等待下载 提示安装成功&#xff0c;如果过程中出现python已存…...

在centos 7.9上面安装mingw交叉编译工具

1.说明 为了在centos上面编译windows的程序&#xff0c;需要安装mingw工具&#xff0c;mingw工具是可以编译windows程序的一些工具链&#xff0c;使用方式和linux一致 2.下载脚本 使用脚本方式编译&#xff0c;github的脚本位置&#xff1a;https://github.com/Zeranoe/ming…...

【Java笔记】LinkedList 底层结构

一、LinkedList 的全面说明 LinkedList底层实现了双向链表和双端队列特点可以添加任意元素(元素可以重复)&#xff0c;包括null线程不安全&#xff0c;没有实现同步 二、LinkedList 的底层操作机制 三、LinkedList的增删改查案例 public class LinkedListCRUD { public stati…...

【深入理解java中的设计模式】

深入理解java中的设计模式 设计模式是软件工程中的最佳实践&#xff0c;它们提供了解决特定问题的模板或蓝图。在Java中&#xff0c;设计模式通常被分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。 创建型模式 单例模式 (Singleton Pattern) 描述: 保证一个类…...

详解下c语言下的多维数组和指针数组

在实际c语言编程中&#xff0c;三维及以上数组我们使用的很少&#xff0c;二维数组我们使用得较多。说到数组&#xff0c;又不得关联到指针&#xff0c;因为他们两者的联系太紧密了。今天我们就详细介绍下c语言下的多维数组(主要是介绍二维数组)和指针。 一、二维数组 1.1&am…...

如何使用 Python 发送 HTTP 请求?

在Python中发送HTTP请求最常用的库是requests&#xff0c;它提供了简单易用的API来发送各种类型的HTTP请求。 除此之外&#xff0c;还有标准库中的http.client&#xff08;以前叫做httplib&#xff09;和urllib&#xff0c;但它们相对更底层&#xff0c;代码量较大&#xff0c…...

活动预告 |【Part2】Microsoft Azure 在线技术公开课:基础知识

课程介绍 参加“Azure 在线技术公开课&#xff1a;基础知识”活动&#xff0c;培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动&#xff0c;扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 课…...

神经网络基础-激活函数

文章目录 1. 什么是激活函数2. sigmoid 激活函数3. tanh 激活函数4. ReLU 激活函数5. SoftMax 激活函数6. 其他常见的激活函数7. 激活函数的选择方法 1. 什么是激活函数 激活函数用于对每层的输出数据进行变换, 进而为整个网络注入了非线性因素。此时, 神经网络就可以拟合各种…...

Debedium如何忽略Oracle的purge命令

报错 截至目前3.0版本&#xff0c;Debezium的Oracle Connector并不支持purge table这个指令。 所以&#xff0c;在使用Debezium解析Oracle变更的时候&#xff0c;如果在源端执行了类似 purge table "$BIN… 的语句&#xff0c;就会导致Debezium罢工&#xff0c;日志里显…...

基于 webRTC Vue 的局域网 文件传输工具

文件传输工具&#xff0c;匿名加密&#xff0c;只需访问网页&#xff0c;即可连接到其他设备&#xff0c;基于 webRTC 和 Vue.js coturn TURN 服务器 docker pull coturn/coturn docker run -d --networkhost \-v $(pwd)/my.conf:/etc/coturn/turnserver.conf \coturn/coturn…...

opencv Canny边缘检测

canny阈值越高,检测到的边缘数量越少 # 导入OpenCV库&#xff0c;用于图像处理 import cv2 import numpy as np # 从matplotlib库中导入pyplot模块&#xff0c;用于绘制图像 from matplotlib import pyplot as plt # 创建一个名为window的窗口&#xff0c;窗口大小自…...

数仓高频面试 | 数仓为什么要分层

大家好&#xff0c;我是大D呀。 关于数仓分层&#xff0c;在面试过程中几乎是必问的。不过&#xff0c;面试官一般也不会直接考你数仓为什么要分层&#xff0c;而是在你介绍项目时&#xff0c;可能会换一种形式来穿插着问&#xff0c;比如数据链路为什么要这样设计&#xff0c…...

Coconut:探索大语言模型的连续思维链推理能力

目录 简介&#xff1a; 什么是Coconut&#xff1f; 为什么我们需要Coconut&#xff1f; Coconut如何工作&#xff1f; 实验结果怎么样&#xff1f; Coconut的优势&#xff1a; 结论&#xff1a; 简介&#xff1a; 你有没有想过&#xff0c;计算机是如何像人类一样思考问…...

2024年安徽省职业院校技能大赛水利工程BIM建模与应用

2024年安徽省职业院校技能大赛 赛 项 规 程 赛项名称&#xff1a; 水利工程BIM建模与应用 赛项组别&#xff1a; 高职组 承办单位&#xff1a; 安徽水利水电职业技术学院 目录 一、赛项名称… 1 二、竞赛目标… 1 三、竞赛内容… 2 四、竞赛方式… 3 五、竞赛流程… 4 七、技术…...

vue常用命令汇总

nvm 一个nodejs版本管理工具&#xff0c;解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 npm 可以管理 nodejs 的第三方插件。 vue-cli 是Vue提供的一个官方cli,专门为单页面应用快速搭建繁杂的脚手架。 nginx 是一个高性能的HTTP和反向代理we…...

ios上架构建版本没苹果电脑怎么上传

在app store上架的时候&#xff0c;遇到下图的问题&#xff1a; 点击蓝色加号的时候&#xff0c;并没有构建版本可以选择 从图中可以看出&#xff0c;它给我们推荐了很多上传工具&#xff0c;比如xcode、transporter或命令行工具之类的&#xff0c;但是这些工具都是只能在苹果…...

某名校考研自命题C++程序设计——近10年真题汇总(上)

本帖更新一些某校的编程真题&#xff0c;总体来说不难&#xff0c;考察的都是基本功&#xff0c;92高校大一期末的难度&#xff0c;不过有些细节颇为繁琐&#xff0c;各位还是需要一定程度上注意的~ 目录 一.分数求和 二.大小写字母转换 三.判断当年天序 四.交替合并字符串…...

【ChatGPT】解锁AI思维链:如何让机器像人类一样思考?

在人工智能领域&#xff0c;我们一直在追求让机器像人类一样思考。然而&#xff0c;即使是最先进的AI&#xff0c;也常常被诟病缺乏“常识”&#xff0c;难以理解复杂问题&#xff0c;更不用说像人类一样进行逻辑推理和解决问题了。最经常的表现就是遇到不会的地方&#xff0c;…...

️️️ 避坑指南:如何修复国密gmssl 库填充问题并提炼优秀加密实践20241212

&#x1f6e1;️ 避坑指南&#xff1a;如何修复国密gmssl 库填充问题并提炼优秀加密实践 ✨ 引言 在当下的数据安全环境中&#xff0c;SM4作为中国国家密码算法的代表性选择&#xff0c;被广泛应用于金融、通信和政府领域。然而&#xff0c;在实际开发中&#xff0c;即便是开…...

鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列 在我们鸿蒙APP开发中&#xff0c;经常需要使用到一些图表的开发&#xff0c;本文主要介绍使用 McCharts 框架绘制柱状图的方法 配套指导视频地址&#xff1a;鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili 1. 第三方库介绍 1.1. McCharts Mc…...

Win10环境vscode+latex+中文快速配置

安装vscodelatex workshop 配置&#xff1a; {"liveServer.settings.donotVerifyTags": true,"liveServer.settings.donotShowInfoMsg": true,"explorer.confirmDelete": false,"files.autoSave": "afterDelay","exp…...

Android14 AOSP支持短按关机

修改frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java diff --git a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java in…...

康耐视智能相机(Insight)通过ModbusTCP发送字符串到倍福(BECKHOFF)PLC中

文章目录 1.背景2.分析3.实现3.1.PLC的ModbusTCP_Server3.1.1.安装TF6250-Modbus-TCP3.1.2.PLC设置 3.2.智能相机的ModbusTCP_Client3.2.1.了解ModbusTCP的协议3.2.2.根据协议写代码3.2.2.1.纯函数代码3.2.2.2.脚本代码 3.2.3.非脚本处理时的代码逻辑图3.2.4.关于代码的问题及解…...

OpenCV 图像变换与处理实战

OpenCV快速通关 第一章&#xff1a;OpenCV 简介与环境搭建 第二章&#xff1a;OpenCV 图像基本操作 第三章&#xff1a;OpenCV 图像变换与处理实战 OpenCV 图像变换与处理实战 OpenCV快速通关OpenCV 图像变换与处理实战一、OpenCV 基础与图像处理概览二、图像变换理论精析三、…...

meta llama 大模型一个基础语言模型的集合

LLaMA 是一个基础语言模型的集合&#xff0c;参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型&#xff0c;并表明可以专门使用公开可用的数据集来训练最先进的模型&#xff0c;而无需诉诸专有的和无法访问的数据集。特别是&#xff0c;LLaMA-13B 在大多数基准测试…...

【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析

目录 1. 数据库服务&#xff06;数据库&#xff06;表之间的关系 1.1 复习 my.ini 1.2 MYSQL服务基于mysqld启动而启动 1.3 数据库服务的具体含义 1.4 数据库服务&数据库&表之间的关系 2. 客户端工具 2.1 客户端连接MySQL服务器 2.2 客…...

详解多租户架构下的资源隔离模式

文章目录 0.简介1.多租户概念1.1 基本概念1.2 单租户 vs 多租户 2.实现方案2.1 独立数据库方案2.1.1 优点2.1.2 缺点2.1.3 应用场景 2.2 共享数据库&#xff0c;独立 Schema2.2.1 优点2.2.2 缺点2.2.3 应用场景 2.3 共享数据库、共享Schema、共享表2.3.1 优点2.3.2 缺点2.3.3 应…...

Bananna Pi开源社区联合矽昌通信打造开源的低成本Wifi5路由器

香蕉派 BPI-Wifi5 路由器采用矽昌SF19A2890S2芯片方案设计。它是一款高性能无线路由器&#xff0c;适用于小微企业、家庭和其他网络环境。Banana Pi开源社区提供整体解决方案。所有代码开源&#xff0c;用户可以在上面自由开发自己的应用。 Banana Pi wifi5 路由器github代码: …...

根据契约进行分析--录像店案例研究01

Richard Mitchell 著&#xff0c;zhen_lei 译 本文包括录像店案例研究的一些片段&#xff0c;用来说明根据契约进行分析的原理。本文假定读者已经从其它渠道学习了一些关于根据契约进行分析的方法。 完整的一套模型可以写成一本书。这些选择的片段用来说明开发的某些方面&…...

Linux系统操作03|chmod、vim

上文&#xff1a; Linux系统操作02|基本命令-CSDN博客 目录 六、chmod&#xff1a;给文件设置权限 1、字母法 2、数字法&#xff08;用的最多&#xff09; 七、vim&#xff1a;代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…...

MyBatis 核心知识与实践

一、MyBatis 概述 1. 框架简介 MyBatis 是一款支持自定义 SQL、存储过程以及高级映射的持久层框架。它避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的操作&#xff0c;使开发人员能够更专注于 SQL 语句的编写和业务逻辑的处理。 2. 核心组件 SqlSessionFactoryB…...

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码&#xff0c;oj模块会在所有在线的后端主机中选择一个负载情况最低的主机&#xff0c;将用户的代码提交给该主机&#xff0c;该主机进行编译运行&#xff0c;将结果返回…...

Oracle最佳实践-优化硬解析

前段时间参加oracle CAB&#xff0c;oracle高级服务部门做了一个数据库最佳实践的报告&#xff0c;其中就有一项就是解决未使用绑定变量但执行次数很多的SQL&#xff1b; 对于一个数据库来说如果不知道该如何优化&#xff0c;那么最简单最有效的优化就是减少硬解析&#xff0c;…...

Java 实现给pdf文件指定位置盖章功能

Java 实现给pdf文件指定位置盖章功能 开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路. 这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章…...

前端通过 jspdf 和 html2canvas 工具将网页生成 pdf

由于 html2canvas 的性能问题&#xff0c;该方案对于页数比较多的场景生成的非常慢&#xff0c;可以试着使用 modern-screenshot 工具看是否性能会得到提升。 import html2canvas from html2canvas import { jsPDF } from jspdfasync function exportPdf(){const pages docume…...

网络安全—部署CA证书服务器

网络拓扑 两台服务器在同一网段即可&#xff0c;即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认&#xff0c;安装了证书系统后我们是不能随意更改计算机名字的&#xff0c;因为以后颁发的证书都是和计算机也就是这一台的服务器名字有关。 修改完成后开…...

用Keytool和OpenSSL生成和签发数字证书

一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中…...

《CSS 知识点》大屏卡片布局思路:弹性布局 flex-grow

思路 大屏左右两侧高宽一致&#xff0c;内部卡片可按比例设置&#xff01; 使用弹性布局和属性 flex-grow 设置比例&#xff1b;间隔使用 margin-bottom 设置&#xff0c;最后一个卡片不设置&#xff1b; 效果如图 代码说明 CSS代码 26 - 30&#xff0c;左右两侧设置弹性布…...

ceph单节点部署方式

准备一台单节点虚拟机&#xff0c;2C4G 三个50G的SCSi类型的磁盘 0. 关闭防火墙/关闭SELinux/下载podman/配置时间同步 systemctl disable --now firewalld setenforce 0 vim /etc/sysconfig/selinux SELINUXenforcing 修改为 SELINUXdisabled yum install podman -y sed -…...

【人工智能】OpenAI O1模型:超越GPT-4的长上下文RAG性能详解与优化指南

在人工智能&#xff08;AI&#xff09;领域&#xff0c;长上下文生成与检索&#xff08;RAG&#xff09; 已成为提升自然语言处理&#xff08;NLP&#xff09;模型性能的关键技术之一。随着数据规模与应用场景的不断扩展&#xff0c;如何高效地处理海量上下文信息&#xff0c;成…...

Qt如何将字串显示成二维码以供扫码识别

在Qt中可以使用QRcode来生成二维码&#xff0c;本质上说&#xff0c;其实是把一串信息生成二维码形式的图片。 首先介绍下QRcode&#xff0c;QRCode原本是一个用于生成二维码的 JavaScript 库&#xff0c;在Qt中大佬们将其改成C语言实现。现直接放出来&#xff0c;使用的时候直…...

【Golang】如何读取并解析SQL文件

一、背景 在数据库开发与维护过程中&#xff0c;我们经常需要执行大量的SQL语句。有时&#xff0c;这些SQL语句会被保存在一个文件中&#xff0c;以便于批量执行。为了方便地在Go语言中处理这些SQL文件&#xff0c;我们可以编写一个函数来读取并解析SQL文件中的语句。 二、实…...

图形学笔记 - 5. 光线追踪 - RayTracing

Whitted-Style Ray tracing 为什么要光线追踪 光栅化不能很好地处理全局效果 软阴影尤其是当光线反射不止一次的时候 栅格化速度很快&#xff0c;但质量相对较低 光线追踪是准确的&#xff0c;但速度很慢 光栅化&#xff1a;实时&#xff0c;光线追踪&#xff1a;离线~10K …...

WHY - 为什么选择 Rsbuild

目录 一、介绍二、工具对比三、性能 https://rsbuild.dev/zh/guide/start/index 一、介绍 Rsbuild 是由 Rspack 驱动的高性能构建工具&#xff0c;它默认包含了一套精心设计的构建配置&#xff0c;提供开箱即用的开发体验&#xff0c;并能够充分发挥出 Rspack 的性能优势。 二…...

前端(模块化)

未使用模块化 定义两个js文件simple1.js和simple2.js let a11; let a11; 两个js文件变量重名 在html测试 传统引入js文件 <script src"./simple1.js"></script> <script src"./simple2.js"></script> 浏览器报错 使用模块…...

Elasticsearch:Mapping-映射

一、创建索引 自动生成索引字段数据类型即自动映射 创建之前&#xff0c;先删除索引防止重复创建 删除索引: DELETE product_mapping创建索引 product_mapping并且赋值 PUT /product_mapping/_doc/1 {"name": "xiaomi phone","desc": "s…...

掘金电影市场的新机遇:开发特惠电影票小程序api文档

随着电影市场的不断扩大&#xff0c;特惠电影票小程序成为创业者和企业争相布局的新蓝海。本文将带你深入了解特惠电影票小程序的开发要点&#xff0c;以及如何通过这个项目实现盈利。 项目背景及市场分析 电影市场规模的不断扩大为特惠电影票小程序提供了广阔的市场空间。 根…...

EFAK kafka可视化管理工具部署使用

简介&#xff1a;EFAK是开源的可视化和管理软件。它允许您查询、可视化、提醒和探索您的指标&#xff0c;无论它们存储在何处。简单来说&#xff0c;它为您提供了将 Kafka 集群数据转换为漂亮的图形和可视化效果的工具。 环境&#xff1a;①操作系统&#xff1a;CentOS7.6&…...

---mysql server: Ubuntu Linux下最最基本的操作

作为开发人员你不需要做复杂的mysql server的各种维护操作, 只是想在本机或虚拟机做个server&#xff0c;然后整测试性数据库. 下面我给出最最简单的基本操作: Ubuntu安装完mysql server, 并且后&#xff0c;可以做如下基本操作&#xff0c;就表示可以了 你可以在这个基…...