Elasticsearch部署全攻略:編譯安裝與 Yum 安裝實踐,日志切割及報錯處理

前言:在 Linux 運維工作中,Elasticsearch 的部署與運維是高頻需求——無論是快速搭建測試環境還是構建生產級集群,選擇合適的安裝方式(編譯安裝或 Yum 安裝)直接影響后續維護效率。同時,日志的合理切割能避免磁盤空間溢出,而對常見報錯的快速定位與解決,則是保障集群穩定運行的核心能力。
本文從實際運維場景出發,詳細拆解 編譯安裝Yum 安裝的完整流程(含用戶權限、證書配置、單節點/集群參數),提供 log4j2 原生策略Linux logrotate 定時任務 兩種日志切割方案,并匯總 Elasticsearch 部署階段的典型報錯(如連接超時、權限不足、內存限制等)及對應解決辦法,助力運維人員高效完成 Elasticsearch 從部署到運維的全流程工作。

二、Elasticsearch 編譯安裝流程

(一)安裝準備與解壓操作

把 Elasticsearch 壓縮包上傳到 Linux 服務器后,執行如下命令完成解壓與重命名:

tar -zxvf elasticsearch-8.16.0-linux-x86_64.tar.gz
mv elasticsearch-8.16.0 elasticsearch

(二)配置文件修改(elasticsearch.yml )

進入配置目錄 /opt/elasticsearch/config ,編輯 elasticsearch.yml ,關鍵配置內容如下:

# 集群與節點標識配置
cluster.name: test-es-cluster
node.name: test-es-node-01# 網絡與訪問相關設置
network.host: 0.0.0.0
http.port: 9200
# 單節點模式(必選)
discovery.type: single-node
# 以下為集群模式參數,單節點時無需開啟,接入集群時取消注釋并配置
# 集群節點發現,配置集群中其他節點的IP或主機名
# discovery.seed_hosts: ["node1.example.com", "node2.example.com"]
# 初始主節點選舉,配置符合主節點條件的節點名稱
# cluster.initial_master_nodes: ["node-1", "node-2"]# 存儲路徑配置
path.data: /data1/elasticsearch/data
path.logs: /var/log/elasticsearch# 跨域支持配置(方便前端調試)
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true# 安全配置(啟用 SSL 與證書)
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: elastic-certificates.p13  # 自定義證書路徑
xpack.security.transport.ssl.truststore.path: elastic-certificates.p13

(三)用戶與目錄權限配置

為保障 Elasticsearch 安全運行,需創建專用用戶并賦予相應權限:

# 創建用戶組
groupadd -m elasticsearch  
# 創建用戶(禁止登錄,關聯用戶組 )
useradd -g elasticsearch -c "Elasticsearch Service User" -d /nonexistent -s /sbin/nologin elasticsearch  # 創建數據與日志目錄
mkdir -p /data1/elasticsearch/data
mkdir -p /var/log/elasticsearch  # 遞歸賦予權限
chown -R elasticsearch:elasticsearch /data1/elasticsearch/data
chmod -R 750 /data1/elasticsearch/data  
chown elasticsearch:elasticsearch /var/log/elasticsearch
chmod 2770 /var/log/elasticsearch  

(四)證書生成與配置

借助 elasticsearch-certutil 生成證書 elastic-certificates.p13 ,操作步驟如下:

# 進入 Elasticsearch bin 目錄
cd /usr/share/elasticsearch/bin  # 生成 PKCS#12 格式證書(可設置密碼增強安全性,這里示例設置密碼為 TestCertPass123! )
./elasticsearch-certutil cert --out elastic-certificates.p13 --pass "TestCertPass123!"  # 移動證書到配置目錄并賦予權限
mv elastic-certificates.p13 /opt/elasticsearch/config/
chown elasticsearch:elasticsearch /opt/elasticsearch/config/elastic-certificates.p13
chmod 600 /opt/elasticsearch/config/elastic-certificates.p13  

(五)服務啟動與驗證

# 切換至 elasticsearch 用戶(避免權限問題 )
su - elasticsearch -s /bin/bash  # 啟動服務(前臺運行便于調試,生產環境建議后臺啟動 )
/opt/elasticsearch/bin/elasticsearch  # 驗證集群狀態(新開終端執行 )
curl -u elastic:your_password http://localhost:9200  # your_password 需替換為實際設置密碼

三、Elasticsearch Yum 安裝流程(以 8.5.2 版本為例)

(一)Yum 倉庫配置

# 導入 Elasticsearch GPG 密鑰
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  # 創建 Yum 倉庫文件
cat <<EOF > /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF  

(二)安裝與基礎配置

# 安裝指定版本
yum install -y elasticsearch-8.5.2  # 編輯配置文件 /etc/elasticsearch/elasticsearch.yml ,默認生成部分配置如下(可結合實際調整):
# 集群與節點標識
cluster.name: test-es-cluster
node.name: test-es-node-01
# 網絡與訪問
network.host: 0.0.0.0
http.port: 9200
# 單節點模式(必選)
discovery.type: single-node
# 以下為集群模式參數,單節點時無需開啟,接入集群時取消注釋并配置
# 集群節點發現,配置集群中其他節點的IP或主機名
# discovery.seed_hosts: ["node1.example.com", "node2.example.com"]
# 初始主節點選舉,配置符合主節點條件的節點名稱
# cluster.initial_master_nodes: ["node-1", "node-2"]
# 存儲路徑
path.data: /data1/elasticsearch/data
path.logs: /var/log/elasticsearch  
# 跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true  
# 安全配置(使用 Yum 安裝默認生成的證書 )
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12  
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12  
xpack.security.http.ssl.enabled: false  # 測試環境簡化,生產環境建議啟用  

(三)服務啟動與密碼初始化、重置

# 啟動服務
systemctl start elasticsearch  # 初始化內置用戶密碼(交互模式 )
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive  # 重置密碼操作(若需要重置 elastic 用戶密碼 )
sudo ./elasticsearch-reset-password -u elastic -i  # 驗證集群狀態
curl -u elastic:your_password http://localhost:9200  # your_password 替換為實際設置密碼

四、日志切割配置方案

(一)方案一:基于 log4j2.properties 的獨立策略(日志和 JSON 分別保留 )

在這里插入圖片描述

1. 配置文件修改(log4j2.properties)
# ==================== 處理 JSON 日志(.json.gz) ====================
# 已有參數(保留默認,無需修改)
appender.json_rolling.type = RollingFile
appender.json_rolling.name = json_rolling
appender.json_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server.json
appender.json_rolling.layout.type = ESJsonLayout# 新增/修改參數(實現 30 天保留)
appender.json_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server-%d{yyyy-MM-dd}-%i.json.gz
# 時間滾動:每天 1 次
appender.json_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.json_rolling.policies.time.interval = 1
appender.json_rolling.policies.time.modulate = true
# 大小滾動(可選):超過 1GB 分割
appender.json_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.json_rolling.policies.size.size = 1GB
# 自動刪除:保留 30 天
appender.json_rolling.strategy.type = DefaultRolloverStrategy
appender.json_rolling.strategy.action.type = Delete
appender.json_rolling.strategy.action.condition.type = IfFileName
appender.json_rolling.strategy.action.condition.glob = ${sys:es.logs.cluster.name}_server-*.json.gz
appender.json_rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.json_rolling.strategy.action.condition.nested_condition.age = 30d# ==================== 處理文本日志(.log.gz) ====================
# 已有參數(保留默認,無需修改)
appender.log_rolling.type = RollingFile
appender.log_rolling.name = log_rolling
appender.log_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}.log
appender.log_rolling.layout.type = PatternLayout
appender.log_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1}] %m%n# 新增/修改參數(實現 30 天保留)
appender.log_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}-%d{yyyy-MM-dd}-%i.log.gz
# 時間滾動:每天 1 次
appender.log_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.log_rolling.policies.time.interval = 1
appender.log_rolling.policies.time.modulate = true
# 大小滾動(可選):超過 1GB 分割
appender.log_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.log_rolling.policies.size.size = 1GB
# 自動刪除:保留 30 天
appender.log_rolling.strategy.type = DefaultRolloverStrategy
appender.log_rolling.strategy.action.type = Delete
appender.log_rolling.strategy.action.condition.type = IfFileName
appender.log_rolling.strategy.action.condition.glob = ${sys:es.logs.cluster.name}-*.log.gz
appender.log_rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.log_rolling.strategy.action.condition.nested_condition.age = 30d# 引用 Appender(確保已配置)
rootLogger.appenderRef.json_rolling.ref = json_rolling
rootLogger.appenderRef.log_rolling.ref = log_rolling
2. 使配置生效的操作
# 1. 備份原配置
cp /etc/elasticsearch/log4j2.properties /etc/elasticsearch/log4j2.properties.bak_$(date +%F)# 2. 編輯配置文件(替換為上述內容)
vi /etc/elasticsearch/log4j2.properties# 3. 重啟 Elasticsearch 服務
systemctl restart elasticsearch# 4. 驗證配置是否生效(查看日志是否正常滾動)
tail -f /var/log/elasticsearch/${sys:es.logs.cluster.name}.log  # 替換為實際集群名稱

(二)方案二:合并策略(同時保留日志和 JSON 文件 1 個月 )

1. 配置文件修改(log4j2.properties)
# ==================== 合并滾動與刪除策略 ====================
# 以文本日志 Appender 為例(JSON 日志可復用此策略)
appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}.log
appender.rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1}] %m%n# 時間滾動:每天 1 次
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
# 大小滾動(可選):超過 1GB 分割
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 1GB# 合并刪除策略(同時處理 .log.gz 和 .json.gz)
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.condition.type = IfFileName
# 匹配兩種格式的日志文件
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster.name}-*.log.gz, ${sys:es.logs.cluster.name}_server-*.json.gz
# 保留 30 天
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.rolling.strategy.action.condition.nested_condition.age = 30d# JSON 日志 Appender(復用上述刪除策略,僅需配置基礎輸出)
appender.json_rolling.type = RollingFile
appender.json_rolling.name = json_rolling
appender.json_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server.json
appender.json_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server-%d{yyyy-MM-dd}-%i.json.gz
appender.json_rolling.layout.type = ESJsonLayout
# 復用滾動策略(時間和大小參數與文本日志一致)
appender.json_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.json_rolling.policies.time.interval = 1
appender.json_rolling.policies.time.modulate = true
appender.json_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.json_rolling.policies.size.size = 1GB# 引用 Appender
rootLogger.appenderRef.rolling.ref = rolling
rootLogger.appenderRef.json_rolling.ref = json_rolling
2. 生效操作

和方案一類似,修改配置后重啟 Elasticsearch 服務進行驗證即可。

(三)方案三:Linux logrotate 定時任務

1. 創建 logrotate 配置文件
vi /etc/logrotate.d/elasticsearch  

添加如下內容:

/var/log/elasticsearch/*.log /var/log/elasticsearch/*.json {daily                   # 每天進行輪轉操作rotate 30               # 保留 30 天的文件compress                # 壓縮為 .gz 格式delaycompress           # 延遲壓縮missingok               # 忽略不存在的文件notifempty              # 空文件不進行輪轉create 0640 elasticsearch elasticsearch  # 新建文件的權限與屬主設置su elasticsearch elasticsearch  # 以 elasticsearch 用戶身份執行  
}  
2. 生效操作
# 驗證配置語法是否正確
logrotate -d /etc/logrotate.d/elasticsearch  # 手動執行一次輪轉操作
logrotate -f /etc/logrotate.d/elasticsearch  # 檢查定時任務(系統默認每天執行 )
cat /etc/cron.daily/logrotate  

五、典型報錯處理

(一)報錯場景 1:curl: (52) Empty reply from server

1. 報錯場景復現

使用默認生成的配置啟動 Elasticsearch 后,執行 curl http://172.20.0.3:9200 出現報錯:

curl: (52) Empty reply from server  
2. 原因分析
  • 安全配置沖突:默認生成的配置里,xpack.security.http.ssl.enabled: true 啟用了 HTTP 層 SSL,但未正確配置證書或者客戶端未使用 HTTPS 訪問,進而導致連接被拒絕。
  • 服務未正常啟動:Elasticsearch 由于權限、路徑或者配置錯誤,未能正常啟動,無法返回響應。
3. 解決方案(修改為合理配置后恢復)
(1)調整安全配置(關閉 HTTP 層 SSL,簡化測試環境)

elasticsearch.yml 中添加如下配置:

xpack.security.http.ssl.enabled: false  
(2)重啟服務并驗證
systemctl restart elasticsearch  
curl -u elastic:your_password http://172.20.0.3:9200  # your_password 替換為實際密碼
(3)關鍵對比(默認配置 vs 修改后配置)
配置項默認生成(報錯情況)修改后(恢復正常)
xpack.security.http.ssl.enabledtrue(啟用 HTTP 層 SSL)false(關閉 HTTP 層 SSL)
訪問方式需用 https:// 且攜帶證書直接用 http:// 加賬號密碼

(二)報錯場景 2:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

1. 報錯場景復現

啟動 Elasticsearch 時,日志中出現如下報錯:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
2. 原因分析

Elasticsearch 需要較大的虛擬內存映射區域來存儲索引數據,Linux 系統默認的 vm.max_map_count(虛擬內存映射數量上限)為 65530,無法滿足 Elasticsearch 的運行要求(至少需要 262144)。

3. 解決方案
(1)臨時調整(立即生效,重啟后失效)
sudo sysctl -w vm.max_map_count=262144
(2)永久調整(重啟系統后仍生效)
# 編輯系統配置文件
sudo vi /etc/sysctl.conf# 添加以下內容
vm.max_map_count=262144# 使配置生效
sudo sysctl -p
(3)驗證配置
sysctl vm.max_map_count
# 輸出 "vm.max_map_count = 262144" 即生效
(4)重啟 Elasticsearch
systemctl restart elasticsearch

(三)報錯場景 3:ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/data1/elasticsearch/data]

1. 報錯場景復現

啟動 Elasticsearch 時,日志中出現權限相關報錯:

ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/data1/elasticsearch/data]
2. 原因分析

Elasticsearch 運行用戶(通常為 elasticsearch)對數據目錄(如 /data1/elasticsearch/data)沒有讀寫權限,導致無法綁定服務并初始化數據存儲。

3. 解決方案
(1)檢查目錄權限
ls -ld /data1/elasticsearch/data
# 若輸出的所有者/組不是 elasticsearch,需執行以下命令
(2)賦予目錄權限
# 遞歸修改目錄所有者為 elasticsearch 用戶和組
sudo chown -R elasticsearch:elasticsearch /data1/elasticsearch/data# 賦予讀寫執行權限(用戶可讀寫執行,組內可讀執行,其他無權限)
sudo chmod -R 750 /data1/elasticsearch/data
(3)重啟 Elasticsearch
systemctl restart elasticsearch

(四)報錯場景 4:curl: (6) Could not resolve host: localhost; Name or service not known

1. 報錯場景復現

執行 curl http://localhost:9200 驗證集群時,出現主機解析報錯:

curl: (6) Could not resolve host: localhost; Name or service not known
2. 原因分析

系統 hosts 文件中未配置 localhost127.0.0.1 的映射關系,導致無法解析 localhost 主機名。

3. 解決方案
(1)編輯 hosts 文件
sudo vi /etc/hosts
(2)添加映射關系

在文件中添加以下內容:

127.0.0.1   localhost
(3)驗證解析
ping localhost
# 若能正常 ping 通,說明解析生效
(4)重新驗證 Elasticsearch
curl -u elastic:your_password http://localhost:9200

(五)報錯場景 5:Cluster health status is red (all shards down)

1. 報錯場景復現

執行集群健康檢查時,狀態為紅色:

curl -u elastic:your_password http://localhost:9200/_cluster/health
# 輸出中包含 "status" : "red"
2. 原因分析

紅色狀態表示至少有一個主分片未分配(可能因節點故障、索引損壞或磁盤空間不足導致)。單節點環境中,若索引分片未正常初始化,也可能出現此問題。

3. 解決方案
(1)檢查磁盤空間
df -h /data1/elasticsearch/data
# 若磁盤使用率接近 100%,需清理空間
(2)查看未分配分片原因
curl -u elastic:your_password "http://localhost:9200/_cluster/allocation/explain?pretty"
(3)單節點環境特殊處理(僅測試環境)

若為單節點且無需高可用,可調整索引默認分片配置(新建索引生效):

# 創建索引模板,設置主分片為 1,副本分片為 0(單節點無法分配副本)
curl -u elastic:your_password -XPUT "http://localhost:9200/_index_template/default_template" -H "Content-Type: application/json" -d '
{"index_patterns": ["*"],"template": {"settings": {"number_of_shards": 1,"number_of_replicas": 0}}
}'
(4)重啟集群(必要時)
systemctl restart elasticsearch

Elasticsearch 報錯多與 配置沖突、權限不足、系統參數限制資源不足 相關。排查時可優先查看日志文件(如 /var/log/elasticsearch/test-es-cluster.log),根據具體報錯信息定位原因,再通過調整配置、權限或系統參數解決。對于集群狀態類問題,可結合 _cluster/health_cluster/allocation/explain 等 API 深入分析。

六、總結

本文全面對比了 Elasticsearch 編譯安裝與 Yum 安裝的流程,提供了三種日志切割方案(log4j2 獨立策略、合并策略、logrotate 定時任務 ),并深入分析了典型報錯的原因與解決方法。通過靈活選用安裝方式和日志管理策略,結合精準的報錯排查,能夠高效搭建穩定、安全的 Elasticsearch 集群,滿足不同環境的部署需求。希望這份內容能幫助大家清晰梳理 Elasticsearch 部署全流程,若有更多細節需求或實踐疑問,歡迎進一步交流探討!
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916245.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TypeScript 配置參數詳解 (tsconfig.json)

文章目錄前言核心配置基本選項嚴格類型檢查選項模塊解析選項Source Map 選項實驗性選項其他選項文件包含/排除選項詳細用法示例最佳實踐建議前言 tsconfig.json 是 TypeScript 項目的配置文件&#xff0c;用于指定編譯選項和文件包含規則。以下是所有主要配置參數的中文詳解&a…

Java經典筆試題

1.計算機網絡傳輸層有哪些協議&#xff1f;分別適用于什么場景&#xff1f; TCP&#xff1a;面向連接、可靠傳輸&#xff08;重傳機制&#xff09;&#xff0c;適用于對數據完整性要求高的場景&#xff0c;如文件傳輸 &#xff08;FTP&#xff09;、HTTP 通信、郵件發送&…

如何序列化和反序列化動態 XmlElement ?

有如下XML&#xff0c;Index_0-Index_N為動態的&#xff0c;N為可變數&#xff0c;如何將對象NoneXML序列化為XML&#xff0c;以及如何將XML內容反序列化為對象NoneXML&#xff1f;1、XML內容<NoneXML><Index_0><UseInSummary>0</UseInSummary><Beg…

分布式高可用ELK平臺搭建及使用保姆級教程指南 (附安裝包網盤免費下載)

1 ELK 簡介 1.1 ELK 是什么 ? ELK是一套開源免費且功能強大的日志分析管理系統,由 Elasticsearch、Logstash、Kibana 三部分組成,是三個軟件產品的首字母縮寫,簡稱ELK。這三款軟件都是開源軟件,通常是配合使用,且歸于 Elastic.co 公司名下,所以被簡稱為 ELK。 ? ELK…

MySQL索引背后的B+樹奧秘

MySQL 索引實現機制深度解析 MySQL 索引的核心數據結構是 B樹。這種設計是數據庫領域數十年優化的結果&#xff0c;完美平衡了磁盤 I/O 效率、范圍查詢性能和存儲利用率。以下是關鍵要點&#xff1a;一、為什么選擇 B樹而非其他結構&#xff1f;數據結構劣勢B樹優勢二叉搜索樹深…

k8s通過NUMA親和分配GPU和VF接口

問題 一般情況下&#xff0c;sriov插件和gpu分配插件是單獨工作的&#xff0c;網卡和GPU沒有根據連接關系分配 如果一個節點起了多個容器&#xff0c;會造成GPU和網卡的通信瓶頸 修改 如果一個點起兩個容器&#xff0c;可以按照NUMA親和來分配 修改kubelet配置文件/var/lib/kub…

qemu-img 擴容虛擬機磁盤后擴容文件系統

在給磁盤映像擴容前需要關閉虛擬機1. 關閉虛擬機 [rootkvm1 opt]# virsh shutdown centos7.9 [rootkvm1 opt]# virsh list --allId Name State ----------------------------- centos7.9 shut off[rootkvm1 opt]# qemu-img info /var/lib/libvirt/images/centos…

Winwos上編譯opencv的GPU版本推理yolov8

1.工具 VS2019 opencv4.7.0 opencv_contrib4.7.0 Cmake3.27.0 cudnn-windows-x86_64-8.5.0.96_cuda11-archive 2.具體流程 1.配置路徑和編譯器后點擊configure 2.提前下載相關的包&#xff0c;如下圖所示 3.第一次configure完成后&#xff0c;需要再配置編譯選項 在編譯…

C語言案例《猜拳游戲》

《猜拳游戲》 游戲說明 一、游戲簡介 本游戲為猜拳對戰類游戲&#xff0c;玩家可選擇不同對手進行石頭、剪刀、布的猜拳對決&#xff0c;支持重復游玩&#xff0c;直至玩家選擇退出。 二、游戲流程 選擇對手 游戲開始后&#xff0c;玩家需從 3 名對手中選擇 1 名進行對戰&#…

使用python的頭文件Matplotlib時plt.show()【標題字體過小】問題根源與解決方案

使用python的頭文件Matplotlib時plt.show【標題字體過小】問題根源與解決方案1. 問題復現2. 問題分析3. 解決方案方案一&#xff08;推薦&#xff09;&#xff1a;使用 fig.suptitle 結合 subplots_adjust方案二&#xff1a;以保存文件函數plt.savefig為準方案三&#xff1a;不…

全面解析MySQL(3)——CRUD進階與數據庫約束:構建健壯數據系統的基石

> 本文將帶你深入探索MySQL的進階CRUD操作與核心約束機制,用設計原則的視角揭示數據庫如何保障數據世界的秩序。 ### 一、進階CRUD:數據操作的精密工具 #### 1. 精準篩選:WHERE子句的深度運用 ```sql -- 基礎篩選:價格大于50的菜品 SELECT * FROM dishes WHERE pric…

使用Redis實現MySQL的數據緩存

使用Redis來實現/mySQL的數據緩存的架構1&#xff1a;目標數據從mySQL讀取數據或者從Redis讀取數據 2&#xff1a;使用cannal監控mySQL&#xff1a;canal-server可以對mysql的blog實行拉取&#xff0c;可以拉去blog里面的(增&#xff0c;刪&#xff0c;改等操作&#xff0c;查詢…

linux配置ntp時間同步

目錄 1.設置時區 2.安裝chrony時間同步工具 3.修改chrony配置文件,添加阿里云NTP服務器作為時鐘源 4.重啟chrony服務&#xff0c;并查看同步結果 1.設置時區 timedatectl set-timezone Asia/Shanghai 2.安裝chrony時間同步工具 apt install chrony -y&#xff08;dnf ins…

powershell 實現批量把文件夾下的bmp文件轉換為jpg

以下是一個使用PowerShell將BMP圖像批量轉換為JPG&#xff08;質量85&#xff09;的腳本&#xff1a; <# .SYNOPSIS批量將BMP圖像轉換為JPG格式&#xff08;質量85&#xff09; .DESCRIPTION此腳本會遍歷指定文件夾中的所有BMP文件&#xff0c;并將它們轉換為JPG格式&#x…

星圖云開發者平臺新功能速遞 | 頁面編輯器:全場景編輯器,提供系統全面的解決方案

在數字化轉型的浪潮下&#xff0c;高效的低代碼開發工具成為企業和開發者的剛需&#xff0c;其需要針對Web、APP、H5等不同終端快速構建應用。但不同場景的開發往往需要不同的工具和技術棧&#xff0c;導致開發效率低、協作成本高。星圖云開發者平臺創新推出多類型頁面專用編輯…

激活函數Focal Loss 詳解?

Focal Loss 詳解?1. 背景?Focal Loss 是由 Lin et al. (2017) 在論文 《Focal Loss for Dense Object Detection》 中提出的一種損失函數&#xff0c;主要用于解決 目標檢測&#xff08;Object Detection&#xff09; 中的 類別不平衡問題&#xff0c;特別是在 One-Stage 檢測…

Python 鏈接各種中間件[Mysql\redis\mssql\tdengine]

文章目錄鏈接參數設置logger 日志redis 鏈接mysql 鏈接emqx 鏈接mssql 鏈接tdengine 鏈接采集OPCUA的點表的配置信息設備點表OPCUA 采集 數據程序數據采集邏輯鏈接參數 import randomtdengine_connection_params {username: root,password: taosdata,host: 127.0.0.1,port: 6…

C Primer Plus 第6版 編程練習——第11章(上)

本章共16題&#xff0c;分上中下三篇1.設計并測試一個函數&#xff0c;從輸入中獲取n個字符&#xff08;包括空白、制表符、換行符)&#xff0c;把結果存儲在一個數組里&#xff0c;它的地址被傳遞作為一個參數。int get_n_char(char arr[], int n) {int i 0;char ch;while (i…

Java開發崗面試記錄合集

一、Java 核心1. 基礎語法final關鍵字的作用修飾類&#xff1a;類不可被繼承&#xff08;如String類&#xff09;&#xff0c;保證類的穩定性和安全性。修飾方法&#xff1a;方法不可被重寫&#xff08;防止子類篡改父類核心邏輯&#xff0c;如工具類方法&#xff09;。修飾變量…

Linux 系統時間設置(date 和 ntpdate)-linux028

date 命令&#xff1a;查看或設置系統時間1. 查看當前時間date示例輸出&#xff1a;Tue Mar 4 01:36:45 CST 20142. 設置時間&#xff08;不設置日期&#xff09;date -s 09:38:40設置后輸出&#xff1a;Tue Mar 4 09:38:40 CST 20143. 設置完整日期和時間&#xff08;推薦格…