ansible-playbook 進階 接上一章內容

1.異常中斷

做法1:強制正常

編寫 nginx playbook 文件 01-zuofa .yml
- hosts : web
?remote_user : root
?tasks :
- name : create new user
? ? ?user : name = nginx-test system = yes uid = 82 shell =/ sbin / nologin
- name : test new user
? ? ?shell : getend passwd | grep nginx-test || /bin/true
.. .
注: test new user 任務的 shell 后面添加 || / bin / true
做法2:忽略錯誤
編寫 nginx playbook 文件 02-zuofa .yml
- hosts : web
?remote_user : root
?tasks :
- name : create new user
? ? ?user : name = nginx-test system = yes uid = 82 shell =/ sbin / nologin
- name : test new user
? ? ?shell : getend passwd | grep nginx-test
? ? ?ignore errors: true
.. .
注: test new user 任務的 shell下面 添加 ? ignore errors: true

2. 任務依賴

對于這種內容發生更改,服務應該重啟的場景,在 playbook 中我們稱之為 " 關系依賴 " playbook 對于這種特殊的關系有兩個語法可以滿足解決方法的需求:
舉例說明:
順序依賴
安裝并啟動 Nginx 服務。先執行安裝 Nginx 的任務,安裝完成后再執行啟動 Nginx 的任務。
“Start Nginx” 任務依賴于 “Install Nginx” 任務,只有 Nginx 成功安裝后,才嘗試啟動它。如果不按此順序,在 Nginx 未安裝時就嘗試啟動,必然會失敗。

條件依賴
一個任務是否執行取決于另一個任務的執行結果(成功或失敗)。可以通過 when 語句結合任務執行結果的變量來實現。
數據依賴
一個任務需要使用另一個任務的輸出數據作為輸入。通常通過 register 關鍵字將一個任務的輸出注冊到變量,然后在其他任務中引用該變量。

為了解決這個問題,我們需要有?種?式能解決我們這種存在依賴關系的任務場景。

notify : 監控我們指定的動作涉及的內容是否發生了變化
handlers :接收到變化動作后,我們自動執行的其他操作命令

注:由于notify涉及到的動作是由handlers創建的,在實踐過程先寫handlers,再在notify中調用

1. 解決依賴[M]? ?增加了handler下面的內容
- hosts: webremote_user: roottasks:- name: create new useruser:name: nginx-testsystem: yesuid: 82shell: /sbin/nologin- name: test new usershell: getend passwd | grep nginx-testignore_errors: True- name: create web rootfile:name: /data/webserver/htmlowner: nginx-teststate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: install packageapt:name: nginxstate: present- name: copy configcopy:src: nginx.confdest: /etc/nginx/nginx.conf- name: copy subconfigcopy:src: nginx-define.confdest: /etc/nginx/conf.dnotify: restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yes  # 為了掩飾效果,不要改成restarthandlers:- name: restart nginxservice:name: nginxstate: restarted

2. 觸發多任務? ?

文件名:05-nginx.yml??

我們剛才基于 handler notify 的實踐實現的是一個 notify 觸發一個 handler 的效果,但是生產中肯定會出現一個 notify 觸發多個 handler 的效果。
在上面的文件最下面增加了下面的內容
- name : check nginx
? ? ?shell : netstat - tnulp | grep nginx > / tmp / nginx.test
sed - i 's/10089/10090/g' nginx-define.conf? 更改端口
ansible-playbook 05 - nginx.yml? ? #啟動任務
ansible web -m shell -a "netstat -tnulp | grep nginx"? ?檢查效果

3. 標簽??

一個 playbook 中有數十個任務,而我們只需要執行其中的一個? 這就是標簽存在的意義
ansible-playbook --list-tags 文件名? ?#查看標簽
給任務添加標簽??
給playbook中的拷貝配置?件的?任務添加標簽? 假設修改后的文件是06-nginx.yml
sed - i 's/10090/10091/g' nginx-define.conf? ? 修改啟動端口
ansible-playbook -- tags copyconfig 06-nginx.yml? ?? 重新執? playbook 效果
結果顯示:只有指定的 tag 標簽的任務被執行了
ansible web -m shell -a "netstat -tnulp | grep nginx"? ? 檢查效果
多標簽案例實踐
清除環境
ansible web - m service - a "name=nginx state=stopped"
ansible web - m yum? - a "name=nginx,nginx-common state=absent"
ansible web - m file - a "path=/data/webserver state=absent"
ansible web - m user - a "name=nginx-test state=absent"
修改文件? 假設文件名為07-nginx.yml
- hosts: webtags: host-tagsremote_user: roottasks:- name: create new useruser:name: nginx-testsystem: yesuid: 82shell: /sbin/nologintags: installtask- name: test new usershell: getend passwd | grep nginx-testignore_errors: Truetags: installtask- name: create web rootfile:name: /data/webserver/htmlowner: nginx-teststate: directorytags: installtask- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.htmltags: installtask- name: install packageyum:name: nginxstate: presenttags: installtask- name: copy configcopy:src: nginx.confdest: /etc/nginx/nginx.conftags: installtask- name: copy subconfigcopy:src: nginx-define.confdest: /etc/nginx/conf.dnotify:- restart nginx- check nginxtags:- changetask- installtask- name: start serviceservice:name: nginxstate: startedenabled: yestags: installtaskhandlers:- name: restart nginxservice:name: nginxstate: restarted- name: check nginxshell: netstat -tnulp | grep nginx > /tmp/nginx.test
sed - i 's/10091/10086/g' nginx-define.conf? ? ?#更改端口
ansible-playbook --tags installtask 07-nginx.yml? ?#重新啟動執行playbook效果
sed - i 's/10086/10096/g' nginx-define.conf? ? #再次更改端口
ansible-playbook --tags changetask ? 07 -nginx .yml? ?#重新啟動執行playbook效果

4 綜合實踐[T]

暫定 未完待續。。。176

5. 變量進階

ansible all -a "hostname" -o? ? #查看主機名
ansible all -m hostname -a "name=xxx"? ?#修改主機名
需求 想讓三臺主機的主機名不一樣 用ansible如何來實現?例如
1
0.0.0.12? ?aaa
10.0.0.15? ?bbb
10.0.0.18? ?ccc

變量的多種設定方法

ansible 中有很多方式來設定變量,優先級從上到下依次增強。常見的方法有以下幾種: ? ?
1 目標主機默認的屬性 ? ?
2 主機清單中定義的特有屬性 ? ? ? ? ? ?/etc/ansible/hosts
3 playbook 通過 vars 定義的特有屬性? ?例如:主機清單里面 vars的 值名:值變量
4? 專用的 YAML 定義的特有屬性文件? 例:vars.yml? 里面文件: qian:A hou:B??
5? 命令行定義的特定屬性 ? ? ?例:ansible/ansible-playbook -e qian=xxx 01-v.yml
定制主機名
ansible 10.0.0.12?-m hostname -a "name=ansible.example.com"

涉及4個屬性:ansible_domain ansible_fqdn ansible_hostname ansible_nodename
定制 playbook.yml? ?文件名為01-v.yml
- hosts: allremote_user: roottasks:- name: create filefile:name: /var/log/var-{{ ansible_fqdn }}.logstate: touchowner: daemon
ansible-playbook 01-v.yml? ?#執行
ansible all -m shell -a "ls /var/log/var-* " -o? ? ? ? ? 效果如下
結果顯示:可以根據主機屬性的方式獲取獨有的信息

1. 主機列表變量

/ etc / ansible / hosts 文件中定義主機變量主要有兩種樣式:公共變量普通變量
普通變量比公共變量的優先級高
普通變量? 例如:
10.0.0.12 ?nginx_port = 83
實踐:? 文件名02-v.yml
- hosts: webremote_user: roottasks:- name: set hostnamehostname:name: ansible-{{ name }}.example.com

主機清單下改成這個

ansible web -m shell -a "hostname" -o? ? 得到下面的結果
公共() 變量??例如:
[web_group : vars]
hostname = www
實踐:? 文件名03-v.yml
主機清單下改成這個
編寫?個設定主機名的任務 03-v.yml
- hosts: webremote_user: roottasks:- name: set hostnamehostname: name={{ qian }}-{{ name }}{{ hou }}
nsible web -m shell -a "hostname" -o? ? 得到下面的結果

2. 命令行

ansible命令
ansible 目標主機 - e 變量名 = 變量值 - m 模塊 - a " 可執行命令 "
ansible 目標主機 - e ' 變量名 = 變量值 變量名 = 變量值 ' - m 模塊 - a " 可執行命令 "
注意:可以直接設定多個環境變量名,彼此之間使用空格隔開,外側使用單引號擴住即可。
ansible-playbook命令
ansible-playbook - e 變量名 = 變量值 playbook.yaml
ansible 命令設定變量
設定所有主機的 ip 地址
ansible web -e hou='.ansible.org' -m hostname -a "name={{ qian?}}-{{ name }}{{ hou?}}"??
ansible web -m shell -a "hostname" -o? ?效果如下

3. playbook實踐

執行playbook 的時候,設定 qian 的值為bushiba
ansible-playbook - e qian=bushiba 02-v.yml
ansible web -m shell -a "hostname" -o? ?#效果如下

4. playbook變量基礎

vars 格式
- hosts : web
?remote_user : root
?vars : ? ?
- 變量名 : 變量值 ? ?? ?
.. .
playbook 中專門設置變量的屬性叫 vars
vars 中的變量是以列表的形式展示的
每一個變量都是以 " 變量名 : 變量值 " 的格式來展示的。
vars應用 ? ?文件名04-v.yml? ??
- hosts: webremote_user: rootvars:- head: ni- hostid: hao- tail: .shuai.comtasks:- name: set hostnamehostname:name: "{{ qian }}-{{ name }}{{ hou }}"

出來的結果不是想要的結果 疑?? ? 待解決?
ansible-playbook 04-v.yml? ? 執行
??
ansible web -m shell -a "hostname" -o? ?#查看結果

-e 設定的環境變量優先級高
ansible-playbook - e qian =nene ? 04 - v.yml
文件變量實踐
playbook.yaml ?錄下創建專?變量?件
vim vars.yaml
qian : ?A
hou : .B
定制plybook文件 文件名06-v.yml
- hosts: webremote_user: rootvars_files:- vars.yamlvars:- head: www- tail: .ansible.toptasks:- name: set hostnamehostname: name={{ qian }}-{{ name }}{{ hou }}
ansible web -a "hostname" -o? ?查看效果?


6. 模板

Jinja2 是一種現代的、設計友好的 Python 模板語言,而 Ansible 作為自動化運維工具,大量使用 Jinja2 來處理配置文件、動態生成內容和實現復雜的邏輯控制。
Ansible 中, Jinja2 模板主要用于
使用 template 模塊生成動態配置文件
playbook 中使用 {{ }} 語法進行變量插值
when 條件語句中使用 Jinja2 表達式
在循環 (with_items, with_dict ) 中處理復雜數據結構
清理之前的環境
ansible web - m service - a "name=nginx state=stopped"
ansible web - m yum? - a "name=nginx,nginx-common state=absent"
ansible web - m file - a "path=/data/webserver state=absent"
ansible web - m user - a "name=nginx-test state=absent"
案例實踐
1. 準備基準配置?件
mkdir / data / ansible / playbook / templates / templates - p
cd / data / ansible / playbook / templates
2.定制主機清單
10.0.0.12 ?nginx_port = 81
10.0.0.15 ?nginx_port = 82
10.0.0.18 ?nginx_port = 83
3.改造基準配置文件? ? ?
vim templates/nginx-define.conf.j2
server {listen {{ nginx_port }};root /data/webserver/html;location / {}
}

4.改造playbook.yaml

vim /data/ansible/playbook/templates/01-template.yml
- hosts: webremote_user: roottasks:- name: install packageyum:name: nginxstate: present- name: create web rootfile:name: /data/webserver/htmlstate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: delete default nginx conffile:name: /etc/nginx/sites-enabled/defaultstate: absent- name: copy configtemplate:src: ./templates/nginx-define.conf.j2dest: /etc/nginx/conf.d/nginx-define.confnotify:- restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yeshandlers:- name: restart nginxservice:name: nginxstate: restarted
注:上面的文件只是將 copy 模塊更改為了 template 模塊
src 如果采用相對路徑的話,其 根路徑就是 playbook.yaml 所在目錄

實踐后期出現這個報錯,但是01-template.yml 格式是正確的? 原因是nginx有殘留

做法:在每臺主機上都yum autoremove 一下 清理掉nginx殘存的東西

得到下面的結果

清理環境
ansible web - m service - a "name=nginx state=stopped"
ansible web - m yum? - a "name=nginx,nginx-common state=absent"
ansible web - m file - a "path=/data/webserver state=absent"

1.條件管理

在ansible動態生成配置文件的場景中,when語句可以對變量facts的值進行條件判斷,從而實現不同的效果。
- hosts: webremote_user: roottasks:- name: install packageapt: name=nginx state=presentwhen: ansible_os_family == "RedHat"
位置: when 語句是針對條件判斷是否執行動作的,所以他是 task 下面的一條配置項 ? ?
格式: when : 條件對象 判斷操作符 判斷值 ? ?
內容: when 語句中的條件對象可以是變量、 Facts 、命令結果等 ? ?
判斷: when 語句中的條件判斷操作符可以是以下幾種類型: ? ?
算術運算 + , - , , / , // , % , * ? ?
比較操作 == , != , > , >= , < , <= ? ?
邏輯運算 and, or, not, ( 表達式組 )
代碼示例
# 滿足多個條件
tasks :
- name : "shut down CentOS 6 systems"
? ?command : / sbin / shutdown - t now
? ?when : ? ??
- ansible_facts[ 'distribution' ] == "CentOS"
- ansible_facts[ 'distribution_major_version' ] == "6"
# 判斷某個變量是否存在信息 is defined
- name : Configure database connection
?template :
? ?src : db_config.j2
? ?dest : / etc / db.conf
?when : db_password is defined
案例實踐 [ M ]? ?文件名02-when.yml
- hosts: webremote_user: roottasks:- name: ps_checkshell: ps -ef | grep nginx | grep -v grep | wc -lregister: nginx_numchanged_when: falseignore_errors: true- name: print debug messagedebug:msg: "System {{ inventory_hostname }} has nginx service."when: nginx_num.stdout != "0"- name: install packageyum:name: nginxstate: presentwhen: nginx_num.stdout == "0"- name: create web rootfile:name: /data/webserver/htmlstate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: delete default nginx conffile:name: /etc/nginx/sites-enabled/defaultstate: absent- name: copy configtemplate:src: ./templates/nginx-define.conf.j2dest: /etc/nginx/conf.d/nginx-define.confnotify:- restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yeshandlers:- name: restart nginxservice:name: nginxstate: restarted
ansible-playbook 02-when.yml - l 10.0.0.12
ansible-playbook 02-when.yml? - l 10.0.0.15
ansible web -m shell -a "netstat -tnulp | grep nginx"? ?測試結果如下
清楚環境
ansible web - m service - a "name=nginx state=stopped"
ansible web - m yum? - a "name=nginx,nginx-common state=absent"
ansible web - m file - a "path=/data/webserver state=absent"
ansible web - m user - a "name=nginx-test state=absent"

2.迭代管理??

- hosts: webremote_user: roottasks:- name: add usergroupgroup:name: webgroupstate: present- name: add several usersuser:name: "{{ item }}"state: presentgroups: webgroupwith_items:- testuser1- testuser2
即:在所有主機上都重復創建兩個用戶
ansible web -m shell -a "getent passwd | grep testu"
ansible web -m shell -a "getent group | grep testu"
所有主機上的用戶都是兩個,而且都加入到了 wheel 組。
清空環境
ansible web - m user - a "name=testuser1,testuser2,webgroup state=absent"
ansible web - m group - a "name=testuser1,testuser2,webgroup state=absent"
擴展 特定主機 安裝軟件實踐
- hosts: webremote_user: roottasks:- name: install packageyum:name: "{{ item }}"state: presentwith_items:- 'nginx'- 'redis'- 'mariadb-server'
如果安裝不成功的話,原因之一就是:遠程主機上有對應的軟件,需要把遠程主機的軟件移除即可
ansible web - m yum? - a "name=nginx,redis,mariadb-server state=absent"
3.多值迭代需求[M]
- hosts: webremote_user: roottasks:- name: add some groupuser:name: "{{ item }}"state: presentwith_items:- group1- group2- group3- name: add some usersuser:name: "{{ item.name }}"group: "{{ item.group }}"state: presentwith_items:- { name: 'user1', group: 'group1' }- { name: 'user2', group: 'group2' }- { name: 'user3', group: 'group3' }
ansible 10.0.0.15?-m shell -a "id user1"
清空環境
for i in user{ 1..3 } group { 1..3 } ; do ansible web - m user - a "name= $i state=absent" ; done

3.流程語法解析

{{ ?}} 用于表達式,比如變量、表達式等
{ % ? % } 用于控制語句,比如 if for 等語句結構
{ # #} 用于注釋,當模板文件被渲染后,該部分內容不會被顯示

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

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

相關文章

LRC and VIP

//首先排除所有數相等的情況,再把最大值放在一個組&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判斷剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…

企業應用AI對向量數據庫選型思考

一、向量數據庫概述 向量數據庫是一種專門用于存儲和檢索高維向量數據的數據庫系統&#xff0c;它能夠高效地處理基于向量相似性的查詢&#xff0c;如最近鄰搜索等&#xff0c;在人工智能、機器學習等領域的應用中發揮著重要作用&#xff0c;為處理復雜的向量數據提供了有力的…

設計模式——迭代器設計模式(行為型)

摘要 本文詳細介紹了迭代器設計模式&#xff0c;這是一種行為型設計模式&#xff0c;用于順序訪問集合對象中的元素&#xff0c;同時隱藏集合的內部結構。文章首先定義了迭代器設計模式并闡述了其核心角色&#xff0c;包括迭代器接口、具體迭代器、容器接口和具體容器。接著&a…

Java8 list集合根據屬性分組

在Java8中&#xff0c;可以使用Collectors.groupingBy方法對List集合根據屬性進行分組。以下是一個完整的示例&#xff0c;展示如何根據對象的不同屬性分組。 根據對象屬性分組 假設有一個Student類&#xff0c;包含name、age和grade屬性&#xff1a; public class Student …

更新已打包好的 Spring Boot JAR 文件中的 class 文件

# 1. 解壓原始 JAR unzip -q original-app.jar -d temp # 2. 替換 class 文件 cp ~/projects/new-classes/*.class temp/BOOT-INF/classes/com/example/ # 3. 保留原始清單 cp temp/META-INF/MANIFEST.MF . # 4. 重新打包 jar -cf0m new-app.jar MANIFEST.MF -C temp/ . # …

《HelloGitHub》第 110 期

興趣是最好的老師&#xff0c;HelloGitHub 讓你對開源感興趣&#xff01; 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等&#xff0c;涵蓋多種編程語言 Python、…

當 “歐洲版 Cursor” 遇上安全危機

在 AI 編程助手蓬勃發展的當下&#xff0c;安全問題正成為行業不容忽視的隱憂。近期&#xff0c;AI 編程助手公司 Replit 與號稱 “歐洲版 Cursor” 的 Lovable 之間&#xff0c;因安全漏洞問題掀起了一場風波&#xff0c;引發了業界的廣泛關注。? Replit 的員工 Matt Palmer…

centos掛載目錄滿但實際未滿引發系統宕機

測試服務器應用系統突然掛了&#xff0c;經過排查發現是因為磁盤“滿了”導致的&#xff0c;使用df -h查看磁盤使用情況/home目錄使用率已經到了100%,但使用du -sh /home查看發現實際磁盤使用還不到1G&#xff0c;推測有進程正在寫入或占用已刪除的大文件&#xff08;Linux 系統…

乾坤qiankun的使用

vue2 為主應用 react 為子應用 在項目中安裝乾坤 yarn add qiankun # 或者 npm i qiankun -Svue主應用 在main.js中新增 &#xff08;需要注意的是路由模型為history模式&#xff09; registerMicroApps([{name: reactApp,entry: //localhost:3011,container: #container,/…

PostgreSQL的擴展 auth_delay

PostgreSQL的擴展 auth_delay auth_delay 是 PostgreSQL 提供的一個安全相關擴展&#xff0c;主要用于防止暴力破解攻擊。它通過在認證失敗后引入人為延遲來增加暴力破解的難度。 一、擴展基礎 功能&#xff1a;在認證失敗后增加延遲目的&#xff1a;減緩暴力破解和字典攻擊…

Web前端為什么要打包?Webpack 和 Vite 如何助力現代開發?

一. 為什么要使用框架庫? 1.1 傳統網頁與現代前端的差異 在最早期的網頁開發中,我們只需要寫幾個.html文件,配上.css和.js文件,瀏覽器直接加載就能展現頁面,每個文件都是獨立的靜態資源,簡單且直觀 但現在網站越來越復雜了: 需要用到最新的js語法(比如ES6)使用框架(Vue…

使用pdm+uv替換poetry

用了好幾年poetry了&#xff0c;各方面都還挺滿意&#xff0c;就是lock實在太慢&#xff1b; 已經試用pdmuv一段時間了&#xff0c;確實是快&#xff0c;也基本能覆蓋poetry的功能。 至于為什么用pdmuv&#xff0c;而不是只用uv&#xff0c;原因很多&#xff0c;有興趣的可以…

java后端生成心電圖-jfreechart

用jfreechart生成心電圖 先上成功的圖片 上代碼 1.導入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.實現代碼 對數據進行濾波 轉換單位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…

微軟Build 2025:Copilot Studio升級,解鎖多智能體協作未來

微軟Build 2025大會圓滿落幕&#xff0c;作為年度科技盛會&#xff0c;它一直是開發與AI技術突破性創新的重要展示平臺。對于工程師、創作者和領域專家來說&#xff0c;這是了解微軟生態未來動向的關鍵時刻。今年&#xff0c;Microsoft Copilot Studio推出了一系列新功能&#…

LabVIEW雜草識別與精準噴灑

基于LabVIEW構建了一套集成機器視覺、智能決策與精準控制的農業雜草識別系統。通過高分辨率視覺傳感器采集作物圖像&#xff0c;利用 LabVIEW 的 NI Vision 模塊實現圖像顏色匹配與特征分析&#xff0c;結合 Arduino 兼容的工業級控制硬件&#xff0c;實現雜草定位與除草劑精準…

使用 Akamai 分布式云與 CDN 保障視頻供稿傳輸安全

作者簡介&#xff1a;David Eisenbacher 是 EZDRM 公司的首席執行官兼聯合創始人&#xff0c;該公司是首家提供 "DRM 即服務" 的企業。作為 CEO&#xff0c;David 始終秉持為企業確立的使命&#xff1a;為視頻服務商提供簡潔有效的數字版權管理方案&#xff0c;助力其…

javascript 實戰案例 二級聯動下拉選框

本案例完全使用原生javascript實現&#xff0c;使用時只需填充platform_list二維數組即可&#xff0c;platform_list填充規則如下&#xff1a; [‘一級選項1’,‘二級選項11’,‘二級選項12’,‘二級選項13’,‘二級選項14’,…], [‘一級選項2’,‘二級選項21’,‘二級選項22’…

Elasticsearch集群最大分片數設置詳解:從問題到解決方案

目錄 前言 1 問題背景&#xff1a;重啟后設置失效 2 核心概念解析 2.1 什么是分片(Shard)&#xff1f; 2.2 cluster.max_shards_per_node的作用 2.3 默認值是多少&#xff1f; 3 參數設置的兩種方式 3.2 持久性設置(persistent) 3.2 臨時設置(transient) 4 問題解決方…

Redis Sorted Set 深度解析:從原理到實戰應用

Redis Sorted Set 深度解析&#xff1a;從原理到實戰應用 在 Redis 豐富的數據結構家族中&#xff0c;Sorted Set&#xff08;有序集合&#xff09;憑借獨特的設計和強大的功能&#xff0c;成為處理有序數據場景的得力工具。無論是構建實時排行榜&#xff0c;還是實現基于時間的…

Java并發編程:讀寫鎖與普通互斥鎖的深度對比

在Java并發編程中&#xff0c;鎖是實現線程安全的重要工具。其中&#xff0c;普通互斥鎖&#xff08;如synchronized和ReentrantLock&#xff09;和讀寫鎖&#xff08;ReentrantReadWriteLock&#xff09;是兩種常用的同步機制。本文將從多個維度深入分析它們的區別、適用場景及…