Ansible 角色管理

環境準備

# 創建一個叫web的文件夾并進入(相當于新建一個工作目錄)[lyk@controller ~]$ mkdir web && cd web?# 創建Ansible的配置文件ansible.cfg[lyk@controller web]$ cat > ansible.cfg <<'EOF'[defaults]remote_user = lykinventory = ./inventory?[privilege_escalation]become = Truebecome_user = rootbecome_method = sudobecome_ask_pass = FalseEOF?[lyk@controller web]$ cat > inventory <<'EOF'controllernode1node2node3node4EOF

Ansible 角色(把重復任務打包成 “模塊”)

# 用ansible-galaxy創建一個叫lyk的角色(生成標準化的目錄結構)[lyk@controller web 11:28:45]$ ansible-galaxy init lyk- Role lyk was created successfully?[lyk@controller web 11:30:29]$ sudo yum install -y tree[lyk@controller web 11:31:09]$ tree lyklyk├── defaults│?? └── main.yml├── files├── handlers│?? └── main.yml├── meta│?? └── main.yml├── README.md├── tasks│?? └── main.yml├── templates├── tests│?? ├── inventory│?? └── test.yml└── vars└── main.yml?
Ansible 角色目錄位置

默認role使用以下三個目錄:

  • ~/.ansible/roles

  • /usr/share/ansible/roles

  • /etc/ansible/roles

優先級從上到下依次降低。

可以在ansible.cfg配置文件[defaults]塊中通過變量roles_path定義role位置:

[defaults]roles_path ?= ./roles......

多個路徑使用冒號分隔:

roles_path = /etc/ansible/roles:/home/student/web/roles
創建角色
# 創建一個存放角色的文件夾roles[lyk@controller web]$ mkdir roles?# 創建一個叫apache的角色(用來部署apache服務)[lyk@controller web]$ ansible-galaxy init apache- apache was created successfully?# 把apache角色移到roles文件夾(方便統一管理)[lyk@controller web]$ mv apache/ roles?# 也可以直接使用以下命令將角色放置到指定目錄(一步到位)[lyk@controller web]$ ansible-galaxy init apache --init-path=./roles?# 查看角色列表[lyk@controller web]$ ansible-galaxy list# /home/student/web/roles- apache, (unknown version)[lyk@controller web]$ cd roles/apache/?

從tasks開始,tasks/main.yml內容如下:

---# tasks file for apache- name: install webyum:name: "{{ web_package }}"state: latest?- name: "start {{ web_service }}"service:name: "{{ web_service }}"state: startedenabled: yes?- name: prepare motdtemplate:src: motd.j2dest: /etc/motd?- name: prepare lyk sitetemplate:src: lyk.conf.j2dest: /etc/httpd/conf.d/lyk.confnotify:- restart_web?- name: prepare DocumentRoot file:path: "/var/www/html/{{ ansible_hostname }}" state: directory?- name: prepare index.htmltemplate:src: index.html.j2dest: "/var/www/html/{{ ansible_hostname }}/index.html"--定義了部署 apache 的步驟:安裝軟件、啟動服務、生成歡迎頁、配置虛擬主機等。--比如:name: install web 是 “安裝 web 軟件”,yum模塊用來裝軟件,service模塊用來啟動服務。
  • defaults/main.yml 內容如下:

    ---# defaults file for apacheweb_package: httpdweb_service: httpd??--定義了web_package: httpd(要安裝的軟件名是 httpd)、web_service: httpd(服務名是 httpd)。--好處是:如果以后要換軟件(比如 nginx),改這里的變量就行,不用改任務列表。
  • templates/motd.j2 內容如下:

    hello guys!Welcome to {{ ansible_fqdn }}!??--motd.j2:登錄提示模板,{{ ansible_fqdn }}會自動替換成主機名(比如 node1.lyk.cloud);?
  • templates/lyk.conf.j2 內容如下:

    # {{ ansible_managed }}
    <VirtualHost *:80>ServerAdmin lyk@{{ ansible_fqdn }}ServerName {{ ansible_fqdn }}ErrorLog logs/{{ ansible_hostname }}-error.logCustomLog logs/{{ ansible_hostname }}-common.log commonDocumentRoot /var/www/html/{{ ansible_hostname }}/<Directory /var/www/html/{{ ansible_hostname }}/>Options +Indexes +FollowSymlinks +IncludesOrder allow,denyAllow from all</Directory>
    </VirtualHost>--lyk.conf.j2:apache 虛擬主機配置模板,自動生成對應主機的網站配置;
    
  • templates/index.html.j2 內容如下:

    Welcome to {{ ansible_fqdn }} !--index.html.j2:網頁首頁模板,顯示 “Welcome to 主機名”。

  • handlers/main.yml 內容如下:

    ---
    # handlers file for apache
    - name: restart_webservice:name: "{{ web_service }}"state: restarted--定義了restart_web(重啟 web 服務),當虛擬主機配置文件修改后,會自動觸發這個操作(通過notify: - restart_web調用)。
  • meta/main.yml 內容如下:

    ---
    galaxy_info:author: lykdescription: lyk webcompany: lyk worldlicense: license (GPLv2, CC-BY, etc)min_ansible_version: 2.4platforms:- name: Fedoraversions:- all- 25- name: SomePlatformversions:- allgalaxy_tags: [apache,web]
    dependencies: []--記錄角色作者、支持的系統版本等信息(類似 “說明書”)
調用角色(用 playbook 執行角色)
[lyk@controller apache 11:52:16]$ vim playbook.yml[lyk@controller web 11:54:10]$ curl http://node2/
Welcome to node2.lyk.cloud !

系統角色(用現成的 “官方模塊”)

# 安裝系統自帶的角色(比如時間同步、防火墻等預定義角色)
[lyk@controller web 13:31:28]$ sudo yum install -y rhel-system-roles
# 查看系統角色的位置(這些是現成的,不用自己寫)
[lyk@controller web 13:38:58]$ ls -1 /usr/share/ansible/roles/# 修改ansible.cfg,讓Ansible能找到系統角色
[lyk@controller web 13:46:30]$ vim ansible.cfg 1 [defaults]                                    2 remote_user = lyk                             3 inventory = ./inventory                       4 roles_path = ./roles:/usr/share/ansible/roles/                             5                                               6 [privilege_escalation]                        7 become = True                                 8 become_user = root                            9 become_method = sudo                          10 become_ask_pass = False  # 編輯playbook,用系統角色同步所有主機的時間 
[lyk@controller web 13:48:16]$ vim playbook.yml  1 - name: Manage timesync with servers2   hosts: all                    3   vars:                         4     timesync_ntp_servers:       5       - hostname: ntp.aliyun.com6         iburst: true            7   roles:                        8     - rhel-system-roles.timesync  --簡單說:系統角色是別人寫好的 “現成工具”,比如時間同步角色,不用自己寫任務,直接配置變量就能用,省時省力
負載均衡(用角色部署 haproxy 實現多機分流)
# 查看如何搜索Ansible角色(幫助命令)
[lyk@controller web 14:08:47]$ ansible-galaxy role search --help# 搜索作者geerlingguy的角色(他是Ansible社區知名作者,角色質量高)
[lyk@controller web 14:09:13]$ ansible-galaxy role search --author geerlingguy # 安裝他的haproxy角色(負載均衡工具),放在當前roles目錄
[lyk@controller web 14:16:20]$ ansible-galaxy role install geerlingguy.haproxy --roles-path ./roles# 重命名角色(把長名字改成haproxy,方便引用)
[lyk@controller web 14:18:02]$ mv roles/geerlingguy.haproxy/ roles/haproxy# 也可以從本地文件安裝角色(比如離線環境)
[lyk@controller web 14:13:27]$ ansible-galaxy install http://192.168.42.100/%E8%BD%AF%E4%BB%B6/ansible-role-haproxy-1.3.1.tar.gz# 查看已安裝的角色
[lyk@controller web 14:19:01]$  ls roles/
ansible-role-haproxy-1.3.1  apache  haproxy# 下載haproxy角色的說明文檔(README.md)到本地查看(sz是上傳下載命令)
[lyk@controller web 14:22:37]$ sz roles/haproxy/README.md # 編輯主機列表,把主機分組(LBs是負載均衡服務器,WEBs是網頁服務器)
[lyk@controller web 14:24:59]$ vim inventory 1 [LBs]2 controller    # controller作為負載均衡器3  4 [WEBs]5 node[1:4]    # node1到node4作為網頁服務器# 編輯playbook,部署負載均衡和網頁服務
[lyk@controller web 14:26:17]$ vim playbook.yml 1 - name: deploy LB    #部署負載均衡器2   hosts: LBs  	     # 在負載均衡服務器(controller)上執行3   vars:			      # 配置后端網頁服務器(node1到node4)4     haproxy_backend_servers:5       - name: node16         address: 10.1.8.11:80   # node1的IP和端口7       - name: node28         address: 10.1.8.12:809       - name: node310         address: 10.1.8.13:8011       - name: node412         address: 10.1.8.14:8013   roles:14     - haproxy     # 調用haproxy角色部署負載均衡15 - name: deploy apache     #部署網頁服務16   hosts: WEBs     # 在網頁服務器(node1-4)上執行17   roles:18     - apache      # 調用之前的apache角色部署網頁服務# 在node1上關閉可能占用80端口的nginx,啟動httpd(確保網頁服務正常)
[root@node1 ~ 14:39:46]# systemctl stop nginx.service 
[root@node1 ~ 14:39:54]# systemctl start httpd
[root@node1 ~ 14:40:04]# systemctl status httpd
● httpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)Active: active (running) since 二 2025-08-19 14:37:14 CST; 2min 58s ago# 執行playbook,部署負載均衡和網頁服務
[lyk@controller web 14:40:18]$ ansible-playbook playbook.yml # 測試負載均衡效果:訪問controller(負載均衡器),會輪流顯示node1-4的網頁
[lyk@controller web 14:40:33]$ curl http://controller/
Welcome to node2.lyk.cloud !
[lyk@controller web 14:41:35]$ curl http://controller/
Welcome to node3.lyk.cloud !
[lyk@controller web 14:41:37]$ curl http://controller/
Welcome to node4.lyk.lyk.cloud !
[lyk@controller web 14:41:38]$ curl http://controller/
Welcome to node1.lyk.cloud !
  • 簡單說:負載均衡就是 “分流”,用戶訪問 controller(負載均衡器)時,會自動分配到 node1-4 中的一個,避免單臺服務器壓力太大。這里用現成的 haproxy 角色快速實現,不用自己寫負載均衡配置。

總結

整個過程就是:用 Ansible 角色把重復的部署任務(比如裝 apache、配置負載均衡)打包成 “模塊”,然后通過 playbook 在指定主機上調用這些模塊,實現批量、自動化部署。角色的好處是 “一次編寫,多次使用”,大大簡化了復雜環境的管理。

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

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

相關文章

Java面試準備指南!

現在已經是8月中旬了&#xff0c;秋招馬上就要開始了&#xff0c;不知道大家準備好了嗎&#xff1f;現階段找工作真的是千軍萬馬過獨木橋&#xff0c;沒有真本事&#xff0c;真的會被淘汰掉&#xff0c;現實就是如此的殘酷&#xff01; 為了能夠幫助到大家在秋招Java面試中脫穎…

Encoder-Decoder Model編碼器-解碼器模型

Encoder-Decoder編碼器-解碼器是一種深度學習模型&#xff0c;應用于圖像處理、語音識別、自然語言處理等領域。主要由編碼器和解碼器兩部分組成&#xff0c;這種結構能夠處理序列到序列的任務。編碼器-解碼器模型具備獨特的雙階段處理&#xff0c;先對輸入信息進行編碼&#x…

Python函數總結

目錄 一、普通函數 1.1 函數的定義與調用 1.2 函數的說明文檔 1.3 函數的參數 1.4 函數的返回值 二、函數的作用域和關鍵字 2.1 局部作用域 2.2 全局作用域 2.4 global關鍵字和nonlocal關鍵字的使用 三、函數的遞歸與嵌套 3.1 嵌套函數 3.2遞歸函數 四、函數名的應…

sqlite-gui:一款開源免費、功能強大的SQLite開發工具

sqlite-gui 是一個輕量級的 SQLite 編輯器&#xff0c;基于 C/mingw64/WinAPI 開發&#xff0c;支持 Windows 平臺。 sqlite-gui 是一個免費開源的項目&#xff0c;代碼托管在 GitHub&#xff1a; https://github.com/little-brother/sqlite-gui 功能特性 支持 SQL 語法高亮…

Ethan獨立開發新品速遞 | 2025-08-19

每日精選Product Hunt上最值得關注的獨立產品&#xff0c;發現全球創新靈感&#xff0c;助力你的產品成長。 下面挑選出對獨立開發者最有參考價值的 10 個項目&#xff0c;側重開發工具、AI 工具、SaaS 和創業支持類產品&#xff0c;去除娛樂、小眾垂直和大公司產品。每條保留原…

從 Hive 數倉出發,全面剖析 StarRocks、MySQL、HBase 的使用場景與區別

以 Hive 數倉為底座,深入理解 StarRocks、MySQL 和 HBase 的區別與使用場景 一、前言 在現代大數據架構中,Hive 通常作為離線數倉的核心底座,負責批量數據的接入、清洗、計算與存儲。然而,為了滿足 實時計算、低延遲查詢、業務交互型操作和高并發存儲 等不同需求,我們往…

低延遲、跨平臺與可控性:直播SDK的模塊化價值解析

引言 音視頻直播已經從單純的娛樂應用&#xff0c;成長為產業級的實時交互基礎設施。無論是安防監控的秒級告警聯動、工業巡檢的遠程可視化操作&#xff0c;還是智慧教育中的多終端互動課堂、遠程醫療里的超低延遲手術協作&#xff0c;都離不開一條低延遲、高穩定性、跨平臺可…

JVM參數優化

JVM 參數優化是提升 Java 應用性能、減少 GC 停頓、避免 OOM&#xff08;內存溢出&#xff09;等問題的核心手段。優化的核心目標是平衡內存使用、GC 效率與應用響應速度&#xff0c;需結合應用類型&#xff08;如 Web 應用、批處理應用&#xff09;、業務場景&#xff08;如高…

pytest高級用法之插件開發

背景 pytest&#xff0c;python全功能測試框架&#xff08;用某句名言&#xff0c;甩unittest幾條街&#xff09;&#xff0c;鉤子函數、pytest插件、pytest裝飾器都能擴展pytest。 提及pytest高級用法&#xff0c;不得不說pytest插件&#xff0c;例如assert斷言失敗繼續斷言…

cesium中實時獲取鼠標精確坐標和高度

/*** 獲取鼠標位置的三維坐標(包含高度信息)* @param {Cesium.Cartesian2} position 鼠標位置* @returns {Cesium.Cartesian3|null} 三維坐標*/ function getMousePosition(position) {if (!position) return null;

Netty 集成 protobuf

什么是 Protobuf Protobuf(Protocol Buffers)是 Google 開發的一種高效、語言中立、平臺中立的序列化協議,用于在不同系統或語言之間傳輸結構化數據。開發者通過 .proto 文件定義消息結構,再使用生成的類進行序列化(轉為緊湊的二進制數據)和反序列化(還原為對象),相比…

程序調用 AI 大模型 -- Java

程序調用 AI 大模型 – Java 1、SDK 接入 安裝阿里云百煉SDK_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><!-- 請將 the-latest-version 替…

VMware 虛擬機完全使用教程:從基礎到高級應用

VMware 虛擬機完全使用教程&#xff1a;從基礎到高級應用 一、引言 在當今數字化時代&#xff0c;計算機技術的飛速發展使得硬件性能不斷提升&#xff0c;但同時也帶來了資源浪費和管理復雜等問題。虛擬機技術應運而生&#xff0c;它能夠在一臺物理計算機上模擬出多臺獨立的計…

函數對象 vs 函數指針 vs lambda:該用哪個才高效?

博主介紹&#xff1a;程序喵大人 35 - 資深C/C/Rust/Android/iOS客戶端開發10年大廠工作經驗嵌入式/人工智能/自動駕駛/音視頻/游戲開發入門級選手《C20高級編程》《C23高級編程》等多本書籍著譯者更多原創精品文章&#xff0c;首發gzh&#xff0c;見文末&#x1f447;&#x…

Java團隊項目開發規范——對象分層規范

分層與對象命名規范如上圖所示&#xff0c;系統劃分成3個層&#xff1a;Controller層&#xff0c;Service層&#xff0c;Domain層 Controller層&#xff1a; Controller層是接入層&#xff0c;提供對外或者前端的接口&#xff0c;該層主要作用是提供對外接口的封裝。基于CQRS分…

低功耗模式

1. 什么是低功耗&#xff1f;低功耗模式&#xff1a;MCU 暫停部分時鐘/外設&#xff0c;降低電流消耗&#xff0c;等待外部事件&#xff08;中斷/復位/喚醒&#xff09;再恢復運行。應用場景&#xff1a;電池供電設備&#xff08;傳感器、手持設備、IoT 節點&#xff09;——延…

GPT-5 官方前瞻:它將如何重塑你的數字生活?

你是否曾想過&#xff0c;有一天你的瀏覽器不再是一個被動等待指令的工具&#xff0c;而是一個能主動為你分憂解難的智能伙伴&#xff1f;OpenAI 的 CEO Sam Altman 最近的發言&#xff0c;以及關于 GPT-5 的種種跡象&#xff0c;都預示著這個未來比我們想象的更近。這不僅是一…

驅動開發系列65 - NVIDIA 開源GPU驅動open-gpu-kernel-modules 目錄結構

一:OS相關部分 kernel-open/ 內核接口層 kernel-open/nvidia/ nvidia.ko 的接口層,負責GPU初始化,顯存管理,PCIe通信,中斷處理,電源管理等底層功能。 kernel-open/nvidia-drm/ nvidia-drm.ko 的接口層,提供標準圖形接口,讓Xorg、Wayland、Kwin、GNOME等桌面環境能夠通…

GPT-4.1旗艦模型:復雜任務的最佳選擇及API集成實踐

GPT-4.1旗艦模型&#xff1a;復雜任務的最佳選擇及API集成實踐 概述 GPT-4.1作為新一代旗艦大模型&#xff0c;憑借其卓越的智能表現、強大的跨領域問題解決能力&#xff0c;成為復雜任務處理的首選。本文將詳細解析GPT-4.1的核心能力、接口用法、計費方式、功能對比及API集成…

paimon保姆級教程簡介

還在糾結 Flink 配 Hudi 還是 Iceberg&#xff1f;別選了&#xff0c;快來試試 Flink 的“天選之子”—— Apache Paimon&#xff01; 忘掉復雜的 Lambda 架構&#xff0c;擁抱真正的流批一體。我們的 Paimon 視頻教程&#xff0c;帶你用 Flink 原生湖倉格式&#xff0c;輕松構…