Ansible-綜合練習-生產案例

斌的招兒

????????網上教程大多都是官網模板化的教程和文檔,這里小斌用自己實際生產環境使用的例子給大家做一個詳解。涉及到一整套ansible的使用,對于roles的使用,也僅涉及到tasks和files目錄,方便大家快速上手并規范化管理。

0.環境配置

192.168.255.120 Ansible控制機

192.168.255.123 Ansible被控機

1.安裝Ansible

作為學習模擬使用,這里就使用yum安裝

[root@120 ~]# yum install -y ansible

2.配置免密

[root@120 ~]# ssh-keygen[root@120 ~]# ssh-copy-id root@192.168.255.123

3.配置主機列表

配置主機列表,我們一般會選擇在hosts文件中定義,但是面臨一個問題,后續管理主機多,不同項目也有可能設計同一臺主機,我們每次都要在一個文件里追加追加,極為不便,所以我們單獨建一個目錄用來管理主機列表。

我們修改一下配置文件里的主機清單位置,指定一個目錄,目錄下文件以.conf結尾,書寫格式于hosts中一致。

4.測試主機連通性

[root@120 ansible]# ansible yzb -m ping
192.168.255.123 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@120 ansible]#

5.生成角色

這里不需要手動創建目錄和文件,可以借助ansible自帶的ansible-galaxy工具。

[root@120 roles]# pwd
/etc/ansible/roles[root@120 roles]# ls[root@120 roles]# ansible-galaxy init init-nginx
- Role init-nginx was created successfully[root@120 roles]# ls
init-nginx[root@120 roles]# tree init-nginx/
init-nginx/
├── defaults
│?? └── main.yml
├── files
├── handlers
│?? └── main.yml
├── meta
│?? └── main.yml
├── README.md
├── tasks
│?? └── main.yml
├── templates
├── tests
│?? ├── inventory
│?? └── test.yml
└── vars└── main.yml8 directories, 8 files
[root@120 roles]#

我們可以看到使用 ansible-galaxy init 命令創建了一個新角色的框架

6.配置

開頭說過了,僅涉及到tasks和files目錄,方便大家快速上手并規范化管理。所以它來了:

這里我們以安裝nginx為例子,yum沒難度是吧,好的,我們用源碼安裝的形式教學。

1.熟悉源碼安裝nginx

只有熟悉怎么源碼安裝nginx,才能編寫劇本自動化安裝。源碼安裝其實就四步:

1.包弄上來解壓

2.添加補丁

3.編譯安裝

4.添加systemed管理

2.準備文件

如圖,我們看到四個文件,文件作用如下:

    • nginx.tar.gz:包含nginx源碼包和補丁包
    • install.sh:內容為將補丁文件應用到源代碼文件中,并執行編譯安裝,寫成腳本減少playbook的篇幅
    • nginx.conf:nginx的配置文件,如果業務有特殊模塊需求,可以提前編寫好配置文件發放到目標主機
    • nginx.service:nginx的systemed管理文件

nginx.conf

[root@120 files]# cat nginx.conf
pid /usr/local/nginx/nginx.pid;worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
worker_rlimit_nofile 102400;events {worker_connections 102400;multi_accept on;use epoll;
}http {vhost_traffic_status_zone;log_format json_format '{"timestamp":"$msec",''"time_iso":"$time_iso8601",''"time_local":"$time_local",''"request_time":"$request_time",''"remote_user":"$remote_user",''"remote_addr":"$remote_addr",''"http_x_forwarded_for":"$http_x_forwarded_for",''"request":"$request",''"status":"$status",''"body_bytes_send":"$body_bytes_sent",''"upstream_addr":"$upstream_addr",''"upstream_response_time":"$upstream_response_time",''"upstream_http_content_type":"$upstream_http_content_type",''"upstream_http_content_disposition":"$upstream_http_content_disposition",''"upstream_status":"$upstream_status",''"http_user_agent":"$http_user_agent",''"http_referer":"$http_referer",''"connection":"$connection",''"connection_requests":"$connection_requests",''"scheme":"$scheme",''"host":"$host",''"http_via":"$http_via",''"request_id":"$request_id"}';map $time_iso8601 $logdate {'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;default  'date-not-found';}# 日志文件名中帶有變量時由子進程創建,需要子進程具有目錄寫入權限access_log /ware/logs/nginx/access-$logdate.log json_format;error_log /ware/logs/nginx/error.log error;server_tokens off;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 30;keepalive_requests 100000;client_header_timeout 10;client_body_timeout 10;client_max_body_size 100m;reset_timedout_connection on;send_timeout 10;include mime.types;default_type application/octet-stream;charset UTF-8;gzip on;gzip_vary on;gzip_disable "MSIE [1-6].";gzip_http_version 1.0;gzip_comp_level 4;# gzip_static on;gzip_min_length 1024;gzip_buffers 4 16k;gzip_proxied expired no-cache no-store private auth;gzip_types text/plain text/css text/javascript application/x-javascript application/xml application/json application/xml+rss;open_file_cache max=100000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;proxy_connect_timeout 75;proxy_read_timeout 300;proxy_send_timeout 300;proxy_buffer_size 64k;proxy_buffers 4 64k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;include /opt/env/nginx/servs/*.upstreams;include /opt/env/nginx/servs/http-*.conf;
}stream {include /opt/env/nginx/servs/tcp-*.conf;
}

?nginx.service

[root@120 files]# cat nginx.service 
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

install.sh?

[root@120 files]# cat install.sh 
#!/bin/bashdir=/server/storagecd $dirtar xf nginx.tar.gzcd /server/storage/nginxunzip  nginx_upstream_check_module.zip
unzip  nginx-upstream-fair.zip
unzip  nginx-module-vts.zip
unzip  ngx_http_substitutions_filter_module.zip
tar zxvf nginx-1.16.1.tar.gzcd $dir/nginx/nginx-upstream-fair-master
sed -i 's/default_port/no_port/g' ngx_http_upstream_fair_module.c
patch -p1 < $dir/nginx/nginx_upstream_check_module-master/upstream_fair.patchcd $dir/nginx/nginx-1.16.1
patch -p1 < $dir/nginx/nginx_upstream_check_module-master/check_1.16.1+.patchcd $dir/nginx/nginx-1.16.1./configure \
--prefix=/usr/local/nginx \
--with-http_realip_module \
--with-http_ssl_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-stream \
--with-http_stub_status_module \
--add-module=${dir}/nginx/nginx_upstream_check_module-master \
--add-module=${dir}/nginx/nginx-upstream-fair-master \
--add-module=${dir}/nginx/nginx-module-vts-master \
--add-module=${dir}/nginx/ngx_http_substitutions_filter_module-mastermake && make install
3.編寫劇本
[root@120 tasks]# cd /opt/ansible/roles/init-nginx/tasks[root@120 tasks]# cat main.yml 
---
# tasks file for ./nginx- name: create nginx dirfile: path: /opt/env/nginx/servsstate: directoryowner: rootgroup: rootmode: 0755- name: create nginx certsfile:path: /opt/env/nginx/certsstate: directoryowner: rootgroup: rootmode: 0755- name: create nginx logsfile:path: /ware/logs/nginxstate: directoryowner: rootgroup: rootmode: 0755- name: modify logs shell: chmod -R 777 /ware/logs/nginx- name: yum installyum: name: "{{ with_item }}"state: latestvars:with_item:- wget- zip- unzip- patch- gcc- gcc-c++- pcre- pcre-devel- zlib- zlib-devel- openssl- openssl-devel- name: copy nginx.tar.gzvars:- item: /server/storage/copy:src: nginx.tar.gzdest: "{{ item }}"owner: rootgroup: rootmode: 0644- name: copy install.shcopy:src: install.shdest: /server/storage/nginx/mode: 755- name: install nginxshell: /server/storage/nginx/install.sh- name: copy nginx confcopy:src: nginx.confdest: /usr/local/nginx/conf/nginx.confowner: rootgroup: rootmode: 0644- name: copy nginx.servicecopy:src: nginx.servicedest: /usr/lib/systemd/systemowner: rootgroup: rootmode: 0644- name: daemon reloadshell: systemctl daemon-reload- name: enable nginxservice:name: nginxenabled: yes[root@120 tasks]#

7.你寫的不對

我們寫的playbook都是以hosts開頭的,你這直接以具體的task開頭,這咋運行?

????????沒錯,一般的劇本,都是以上圖的格式書寫的,但是我們學習Ad-Hoc和roles是干啥的,為了我們的規范化和模塊化,要讓不同的主機組都能使用一個roles。所以我們需要建一個文件,內容如下:

[root@120 ansible]# cat init-nginx.yml 
- hosts: yzbremote_user: rootroles:- role: init-nginx

????????我們單獨拉出來一個文件,這樣可以使不同的主機組、不同的任務都有單獨的配置文件,清晰明了,也實現了roles的復用!

8.執行劇本,完成目標主機nginx安裝

ansible-playbook init-nginx.yml

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

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

相關文章

想關掉一個qwidget是用deleteLater還是用close

在Qt中關閉一個QWidget可以選擇使用close()或者deleteLater()兩種方法&#xff0c;根據具體需求&#xff0c;兩者有不同的適用場景&#xff1a; close()方法&#xff1a; close()會觸發QWidget的closeEvent&#xff0c;也就是說&#xff0c;它會產生一個關閉事件&#xff0c;可…

聚星文社AI工具

聚星文社AI工具是一種基于人工智能技術開發的工具&#xff0c;旨在輔助作者和寫作人員提升創作效率和質量。 點擊下載 該工具可以提供多項功能&#xff0c;包括語法糾錯、智能推薦、文章自動摘要等。 通過使用聚星文社AI工具&#xff0c;用戶可以在寫作過程中得到即時的糾錯建…

memcached服務介紹

memcached 基礎概念安裝使用 基礎概念 Memcached 是一個高性能的分布式內存對象緩存系統&#xff0c;用于減少數據庫負載&#xff0c;加速動態 Web 應用。 Memcached 的基本概念 緩存&#xff1a;Memcached 的核心功能是緩存數據&#xff0c;它將經常訪問的數據存儲在內存中…

ECMAScript6介紹及環境搭建

這實際上說明&#xff0c;對象的解構賦值是下面形式的簡寫。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是說&#xff0c;對象的解構賦值的內部機制&#xff0c;是先找到同名屬性&#xff0c;然后再賦給對應的變量。真正被賦值的是后者&#xff0c;而…

數據結構_緒論

1.數據結構的研究內容 研究數據的特性和數據之間的關系 用計算機解決一個問題的步驟 1.具體問題抽象成數學模型 實質: 分析問題--->提取操作對象--->找出操作對象之間的關系(數據結構)--->用數學語言描述 操作對象對象之間的關系 2.設計算法 3.編程,調試,運行 …

GO語言面試題目,使用3個協程按照順序從1打印到100

GO語言面試題目&#xff0c;使用3個協程按照順序從1打印到100 稍微把題目拓展了下&#xff0c;使用N個協程 打印M個數&#xff0c;應該很好理解&#xff0c;創建一個N個協程的列表&#xff0c;然后每打印一個數&#xff0c;就傳到下一個chan中&#xff0c;一次循環 package m…

【數據結構與算法】哈希函數 詳解

哈希函數的構造方法有哪些&#xff1f; 直接定址法&#xff1a;直接使用關鍵字或者關鍵字的某個線性函數值作為哈希地址。 數字分析法&#xff1a;對關鍵字進行分析&#xff0c;選擇關鍵字中的某幾位或者進行某種運算得到的結果作為哈希地址。 平方取中法&#xff1a;先計算關…

通信協議總結

IIC 基本特點 同步&#xff0c;半雙工 標準100KHz&#xff0c;最高400KHz&#xff08;IIC主要應用于低速設備&#xff09; 硬件組成 需外接上拉電阻 通信過程 空閑狀態 SDA和SCL都處于高電平 開始信號S和終止信號P 在數據傳輸過程中&#xff0c;當SCL0時&#xff0c;SDA才…

十常侍亂政 | 第2集 | 愿領精兵五千,斬關入內,冊立新君,誅殺宦黨,掃清朝廷,以安天下 | 三國演義 | 逐鹿群雄

&#x1f64b;大家好&#xff01;我是毛毛張! &#x1f308;個人首頁&#xff1a; 神馬都會億點點的毛毛張 &#x1f4cc;這篇博客是毛毛張分享三國演義文學劇本中的經典臺詞和語句&#xff0c;本篇分享的是《三國演義》第Ⅰ部分《群雄逐鹿》的第2??集《十常侍亂政治》&am…

匯聚榮做拼多多運營第一步是什么?

匯聚榮做拼多多運營第一步是什么?在眾多電商平臺中&#xff0c;拼多多憑借其獨特的社交電商模式迅速崛起&#xff0c;吸引了大量消費者和商家的目光。對于希望在拼多多上開店的商家而言&#xff0c;了解如何進行有效運營是成功的關鍵。那么&#xff0c;匯聚榮做拼多多運營的第…

【Android面試八股文】Looper如何在子線程中創建?

文章目錄 一、Looper的幾個重要方法二、子線程中使用Looper的方式1三、子線程中使用Looper的方式23.1 使用HandlerThread實現3.2 HandlerThread源碼解析創建子線程的 Looper必須要通過 Looper.prepare()初始化looper,然后再通過 Looper.loop()方法讓 Loop運行起來。 那么具…

算法入門:二分查找及其Java實現

在程序開發中&#xff0c;算法是解決問題的核心。本篇博客將詳細講解一種高效的查找算法——二分查找&#xff0c;并通過Java代碼示例幫助你理解其實現和應用。 如果你覺得這篇文章對你有幫助&#xff0c;不要忘記點贊、收藏和關注我&#xff0c;這將是對我最大的支持和鼓勵&am…

VMware 最新的安全漏洞公告VMSA-2024-0013

#深度好文計劃# 一、摘要 2024年6月26日&#xff0c;VMware 發布了最新的安全漏洞公告 VMSA-2024-0013&#xff0c;修復了 VMware ESXi 和 VMware vCenter 中的多個安全漏洞。 VMSA-2024-0013&#xff1a;VMware ESXi 和 vCenter Server 更新修正了多個安全性漏洞 &#xff…

Unity3D 物體的運動

運動方式1 修改 position / localPosition &#xff0c;可以讓物體運動 例如&#xff0c; Vector3 pos this.transform.localPosition; pos.z distance; this.transform.localPosition pos; 此時&#xff0c;小車向Z 方向運動 具體代碼如下 using System.Collection…

C語言入門課程學習筆記10:結構體聯合體位域

C語言入門課程學習筆記10 第48課 - 自定義數據類型&#xff08;上&#xff09;實驗-typedef實驗小結 第49課 - 自定義數據類型&#xff08;中&#xff09;實驗實驗小結 第50課 - 自定義數據類型&#xff08;下&#xff09;實驗實驗小結 第51課 - 多文件程序設計實驗實驗實驗小結…

uni-app picker多列選項

預期實現的效果&#xff1a; 選中后的效果&#xff1a; // Dom部分 <template><picker mode"multiSelector" :range"ssqRange" range-key"name" columnchange"ssqColumnChange" change"ssqChange" class"p…

研究發現GPT-4o等較新的多模態AI模型的安全機制有不足之處

在 ChatGPT 和類似的生成式人工智能模型推出后&#xff0c;很多人都在強調安全問題&#xff0c;政府也參與其中&#xff0c;OpenAI 甚至成立了一個超級協調小組&#xff0c;以阻止未來的人工智能失控&#xff0c;但由于對人工智能安全的發展方向存在分歧&#xff0c;該小組于今…

03邏輯門電路

分立門電路&#xff1a; 集成門電路&#xff1a; TTL門電路 MOS門電路&#xff1a;NMOS門電路、PMOS門電路、CMOS門電路 BICMOS門電路&#xff1a;CMOS的高輸入阻抗和TTL的高放大倍數的結合 向更低功耗、更高速度發展 MOS管的Rdson在可變電阻區的阻值也一般會小于1000歐姆 …

達夢數據庫的系統視圖v$locked_object

達夢數據庫的系統視圖v$locked_object 在達夢數據庫&#xff08;Dameng Database&#xff09;中&#xff0c;V$LOCKED_OBJECT 視圖提供了與數據庫中被鎖定對象相關的信息。這通常用于監控和診斷數據庫中的鎖定問題&#xff0c;幫助管理員了解哪些對象被鎖定了&#xff0c;以及…

1.回溯算法.基礎

1.回溯算法 基礎知識題目1.組合2.組合-優化3.組合總和|||4.電話號碼和字母組合5.組合總和6.組合總和II7.分割回文串8.復原IP地址 基礎知識 回溯法也可以叫做回溯搜索法&#xff0c;它是一種搜索的方式。回溯是遞歸的副產品&#xff0c;只要有遞歸就會有回溯 因為回溯的本質是窮…