十六款违、運(yùn)維自動(dòng)化Ansible及HTTP服務(wù)

一唐瀑、Ansible介紹

???????基于python語(yǔ)言實(shí)現(xiàn),無(wú)需代理奠货,適用中小型應(yīng)用環(huán)境介褥。

???????特性:
???????模塊化:調(diào)用特定的模塊,完成特定任務(wù)
???????有Paramiko,PyYAML柔滔,Jinja2(模板語(yǔ)言)三個(gè)關(guān)鍵模塊
???????支持自定義模塊
???????基于Python語(yǔ)言實(shí)現(xiàn)
???????部署簡(jiǎn)單溢陪,基于python和SSH(默認(rèn)已安裝)
???????安全,基于OpenSSH
???????支持playbook編排任務(wù)
???????冪等性:一個(gè)任務(wù)執(zhí)行1遍和執(zhí)行n遍效果一樣睛廊,不因重復(fù)執(zhí)行帶來(lái)意外情況
???????無(wú)需代理不依賴PKI(無(wú)需ssl)
???????可使用任何編程語(yǔ)言寫(xiě)模塊
???????YAML格式形真,編排任務(wù),支持豐富的數(shù)據(jù)結(jié)構(gòu)
???????較強(qiáng)大的多層解決方案

1.1 Ansible主要組成

  • ANSIBLE PLAYBOOKS:任務(wù)劇本(任務(wù)集)超全,編排定義Ansible任務(wù)集的配置文件咆霜,由Ansible順序依次執(zhí)行,通常是JSON格式的YML文件
  • INVENTORY:Ansible管理主機(jī)的清單/etc/anaible/hosts
  • MODULES:Ansible執(zhí)行命令的功能模塊嘶朱,多數(shù)為內(nèi)置核心模塊蛾坯,也可自定義
  • PLUGINS:模塊功能的補(bǔ)充,如連接類(lèi)型插件疏遏、循環(huán)插件脉课、變量插件、過(guò)濾插件等财异,該功能不常用
  • API:供第三方程序調(diào)用的應(yīng)用程序編程接口
  • ANSIBLE:組合INVENTORY倘零、API、MODULES戳寸、PLUGINS的綠框呈驶,可以理解為是ansible命令工具,其為核心執(zhí)行工具

ansible命令執(zhí)行來(lái)源:

  • USER疫鹊,普通用戶袖瞻,即SYSTEM ADMINISTRATOR
  • CMDB(配置管理數(shù)據(jù)庫(kù)) API 調(diào)用
  • PUBLIC/PRIVATE CLOUD API調(diào)用
  • USER-> Ansible Playbook -> Ansibile

利用ansible實(shí)現(xiàn)管理的方式:

  • Ad-Hoc 即ansible命令,主要用于臨時(shí)命令使用場(chǎng)景
  • Ansible-playbook 主要用于長(zhǎng)期規(guī)劃好的订晌,大型項(xiàng)目的場(chǎng)景虏辫,需要有前期的規(guī)劃過(guò)程

Ansible-playbook(劇本)執(zhí)行過(guò)程:

  • 將已有編排好的任務(wù)集寫(xiě)入Ansible-Playbook
  • 通過(guò)ansible-playbook命令分拆任務(wù)集至逐條ansible命令,按預(yù)定規(guī)則逐條執(zhí)行

Ansible主要操作對(duì)象:

  • HOST 主機(jī)
  • NETWORKING 網(wǎng)絡(luò)設(shè)備

1.2 Ansible架構(gòu)

架構(gòu)圖

1.3 Ansible工作原理

工作原理示意圖

1.4 playbook 介紹

  • playbook是由一個(gè)或多個(gè)“play”組成的列表
  • play的主要功能在于將預(yù)定義的一組主機(jī)锈拨,裝扮成事先通過(guò)ansible中的task定義好的角色砌庄。Task實(shí)際是調(diào)用ansible的一個(gè)module,將多個(gè)play組織在一個(gè)playbook中奕枢,即可以讓它們聯(lián)合起來(lái)娄昆,按事先編排的機(jī)制執(zhí)行預(yù)定義的動(dòng)作
  • Playbook采用YAML語(yǔ)言編寫(xiě)

1.4.1 YAML 語(yǔ)言

???????YAML是一個(gè)可讀性高的用來(lái)表達(dá)資料序列的格式。
???????特性:
???????- YAML的可讀性好
???????- YAML和腳本語(yǔ)言的交互性好
???????- YAML使用實(shí)現(xiàn)語(yǔ)言的數(shù)據(jù)類(lèi)型
???????- YAML有一個(gè)一致的信息模型
???????- YAML易于實(shí)現(xiàn)
???????- YAML可以基于流來(lái)處理
???????- YAML表達(dá)能力強(qiáng)缝彬,擴(kuò)展性好

1.4.1.1 YAML 語(yǔ)法

  • 在單一檔案中萌焰,可用連續(xù)三個(gè)連字號(hào)(- - -)區(qū)分多個(gè)檔案。另外谷浅,還有選擇性的連續(xù)三個(gè)點(diǎn)號(hào)( ... )用來(lái)表示檔案結(jié)尾
  • 次行開(kāi)始正常寫(xiě)Playbook的內(nèi)容扒俯,一般建議寫(xiě)明該P(yáng)laybook的功能
  • 使用#號(hào)注釋代碼
  • 縮進(jìn)必須是統(tǒng)一的奶卓,不能空格和tab混用
  • 縮進(jìn)的級(jí)別也必須是一致的,同樣的縮進(jìn)代表同樣的級(jí)別撼玄,程序判別配置的級(jí)別是通過(guò)縮進(jìn)結(jié)合換行來(lái)實(shí)現(xiàn)的
  • YAML文件內(nèi)容是區(qū)別大小寫(xiě)的夺姑,k/v的值均需大小寫(xiě)敏感
  • 多個(gè)k/v可同行寫(xiě)也可換行寫(xiě),同行使用掌猛,分隔
  • v可是個(gè)字符串盏浙,也可是另一個(gè)列表
  • 一個(gè)完整的代碼塊功能需最少元素需包括 name 和 task
  • 一個(gè)name只能包括一個(gè)task
  • YAML文件擴(kuò)展名通常為yml或yaml

List:列表,其所有元素均使用“-”打頭
示例:
# A list of tasty fruits

  • Apple
  • Orange
  • Strawberry
  • Mango

Dictionary:字典荔茬,通常由多個(gè)key與value構(gòu)成
示例1:
---
# An employee record
name: Example Developer
job: Developer
skill: Elite
也可以將key:value放置于{}中進(jìn)行表示废膘,用,分隔多個(gè)key:value

示例2:
---
# An employee record
{name: Example Developer, job: Developer, skill: Elite}

1.4.2 playbook 核心組成

  • hosts 執(zhí)行的遠(yuǎn)程主機(jī)列表
  • tasks 任務(wù)集
  • variables 內(nèi)置變量或自定義變量在playbook中調(diào)用
  • templates 模板,可替換模板文件中的變量并實(shí)現(xiàn)一些簡(jiǎn)單邏輯的文件
  • handlers 和 notity 結(jié)合使用慕蔚,由特定條件觸發(fā)的操作丐黄,滿足條件方才執(zhí)行,否則不執(zhí)行
  • tags 標(biāo)簽 指定某條任務(wù)執(zhí)行孔飒,用于選擇運(yùn)行playbook中的部分代碼孵稽。ansible具有冪等性,因此會(huì)自動(dòng)跳過(guò)沒(méi)有變化的部分十偶,即便如此,有些代碼為測(cè)試其確實(shí)沒(méi)有發(fā)生變化的時(shí)間依然會(huì)非常地長(zhǎng)园细。此時(shí)惦积,如果確信其沒(méi)有變化,就可以通過(guò)tags跳過(guò)此些代碼片斷

1.4.3 playbook 基礎(chǔ)結(jié)構(gòu)

- hosts:
???????playbook中的每一個(gè)play的目的都是為了讓特定主機(jī)以某個(gè)指定的用戶身份執(zhí)行任務(wù)猛频。hosts用于指定要執(zhí)行指定任務(wù)的主機(jī)狮崩,須事先定義在主機(jī)清單中
可以為如下形式:
one.example.com
one.example.com:two.example.com
192.168.1.50
192.168.1.*
websrvs:dbsrvs 或者,兩個(gè)組的并集
websrvs:&dbsrvs 與鹿寻,兩個(gè)組的交集
webservers:!dbsrvs 在websrvs組睦柴,但不在dbsrvs組

remote_user: 可用于Host和task中。也可以通過(guò)指定其通過(guò)sudo的方式在遠(yuǎn)程主機(jī)上執(zhí)行任務(wù)毡熏,其可用于play全局或某任務(wù)坦敌;此外,甚至可以在sudo時(shí)使用sudo_user指定sudo時(shí)切換的用戶
示例:
- hosts: websrvs
remote_user: root
tasks:
- name: test connection
ping:
remote_user: magedu
sudo: yes #默認(rèn)sudo為root
sudo_user:wang #sudo為wang

  • task列表和action
    ???????play的主體部分是task list痢法,task list中的各任務(wù)按次序逐個(gè)在hosts中指定的所有主機(jī)上執(zhí)行狱窘,即在所有主機(jī)上完成第一個(gè)任務(wù)后,再開(kāi)始第二個(gè)任務(wù)
    ???????task的目的是使用指定的參數(shù)執(zhí)行模塊财搁,而在模塊參數(shù)中可以使用變量蘸炸。模塊執(zhí)行是冪等的,這意味著多次執(zhí)行是安全的尖奔,因?yàn)槠浣Y(jié)果均一致
    ???????每個(gè)task都應(yīng)該有其name搭儒,用于playbook的執(zhí)行結(jié)果輸出穷当,建議其內(nèi)容能清晰地描述任務(wù)執(zhí)行步驟。如果未提供name淹禾,則action的結(jié)果將用于輸出

tasks:任務(wù)列表
兩種格式:
(1) action: module arguments
(2) module: arguments 建議使用
注:shell和command模塊后面跟命令馁菜,而非key=value
某任務(wù)的狀態(tài)在運(yùn)行后為changed時(shí),可通過(guò)“notify”通知給相應(yīng)的handlers
任務(wù)可以通過(guò)"tags“打標(biāo)簽稀拐,可在ansible-playbook命令上使用-t指定進(jìn)行調(diào)用
示例:
tasks:

  • name: disable selinux
    command: /sbin/setenforce 0

如果命令或腳本的退出碼不為零火邓,可以使用如下方式替代
tasks:

  • name: run this command and ignore the result
    shell: /usr/bin/somecommand || /bin/true

或者使用ignore_errors來(lái)忽略錯(cuò)誤信息
tasks:

  • name: run this command and ignore the result
    shell: /usr/bin/somecommand
    ignore_errors: True

1.4.2 playbook 基本使用

  • 運(yùn)行playbook的方式
    ansible-playbook <filename.yml> ... [options]

常見(jiàn)選項(xiàng)
--check -C 只檢測(cè)可能會(huì)發(fā)生的改變,但不真正執(zhí)行操作
--list-hosts 列出運(yùn)行任務(wù)的主機(jī)
--list-tags 列出tag
--list-tasks 列出task
--limit 主機(jī)列表 只針對(duì)主機(jī)列表中的主機(jī)執(zhí)行
-v -vv -vvv 顯示過(guò)程

示例:實(shí)現(xiàn)自動(dòng)化安裝httpd

yum -y install ansible  ##來(lái)自epel軟件倉(cāng)庫(kù)源
cat httpd.yml
---

- hosts: all
  remote_user: root

  tasks:
    - name: install package.
      yum: name=httpd

    - name: service
      service: name=httpd state=started enabled=yes
      tags: service

二德撬、HTTP服務(wù)介紹

???????超文本傳輸協(xié)議 http(Hyper Text Transfer Protocol)铲咨,工作在應(yīng)用層。默認(rèn)端口:tcp/80蜓洪。

2.1 HTTP工作機(jī)制

工作機(jī)制:
http請(qǐng)求:http request
http響應(yīng):http response
一次http事務(wù):請(qǐng)求<-->響應(yīng)

提高HTTP連接性能:
并行連接:通過(guò)多條TCP連接發(fā)起并發(fā)的HTTP請(qǐng)求
持久連接:keep-alive,長(zhǎng)連接纤勒,重用TCP連接,以消除連接和關(guān)閉的時(shí)延,以事務(wù)個(gè)數(shù)和時(shí)間來(lái)決定是否關(guān)閉連接
管道化連接:通過(guò)共享TCP連接發(fā)起并發(fā)的HTTP請(qǐng)求
復(fù)用的連接:交替?zhèn)魉驼?qǐng)求和響應(yīng)報(bào)文(實(shí)驗(yàn)階段)

  • Web資源:web resource
    一個(gè)網(wǎng)頁(yè)由多個(gè)資源構(gòu)成隆檀,打開(kāi)一個(gè)頁(yè)面摇天,會(huì)有多個(gè)資源展示出來(lái),但是每個(gè)資源都要單獨(dú)請(qǐng)求恐仑。因此泉坐,一個(gè)“Web 頁(yè)面”通常并不是單個(gè)資源,而是一組資源的集合

  • 靜態(tài)文件:無(wú)需服務(wù)端做出額外處理
    文件后綴:.html, .txt, .jpg, .js, .css, .mp3, .avi

  • 動(dòng)態(tài)文件:服務(wù)端執(zhí)行程序裳仆,返回執(zhí)行的結(jié)果
    文件后綴:.php, .jsp ,.asp

2.2 HTTP通信過(guò)程

通信過(guò)程示意圖

2.3 HTTP服務(wù)器

http服務(wù)器程序:
apache(httpd)
nginx
lighttpd

2.3.1 httpd 介紹

???????20世紀(jì)90年代初腕让,國(guó)家超級(jí)計(jì)算機(jī)應(yīng)用中心NCSA開(kāi)發(fā)
???????1995年開(kāi)源社區(qū)發(fā)布apache(a patchy server)

???????功能特性:
???????- 虛擬主機(jī)
???????IP、Port歧斟、FQDN
???????- CGI:Common Gateway Interface纯丸,通用網(wǎng)關(guān)接口
???????- 反向代理
???????- 負(fù)載均衡
???????- 路徑別名
???????- 豐富的用戶認(rèn)證機(jī)制
???????basic
???????digest
???????- 支持第三方模塊

2.3.2 httpd 虛擬主機(jī)

  • 站點(diǎn)標(biāo)識(shí): socket
    IP相同,但端口不同
    IP不同静袖,但端口均為默認(rèn)端口
    FQDN不同: 請(qǐng)求報(bào)文中首部 Host: www.bza.com
  • 有三種實(shí)現(xiàn)方案:
    基于ip:為每個(gè)虛擬主機(jī)準(zhǔn)備至少一個(gè)ip地址
    基于port:為每個(gè)虛擬主機(jī)使用至少一個(gè)獨(dú)立的port
    基于FQDN:為每個(gè)虛擬主機(jī)使用至少一個(gè)FQDN

配置示例:建立httpd服務(wù)器觉鼻,要求提供兩個(gè)基于名稱的虛擬主機(jī)

yum -y install httpd ##安裝httpd軟件包

mkdir -pv /web/vhosts/{x,y}  ##創(chuàng)建虛擬主機(jī)的站點(diǎn)目錄
echo 'www.X.com' > /web/vhosts/x/index.html  ##創(chuàng)建并寫(xiě)入站點(diǎn)1默認(rèn)主頁(yè)文件內(nèi)容
echo 'www.Y.com' > /web/vhosts/y/index.html  ##創(chuàng)建并寫(xiě)入站點(diǎn)2默認(rèn)主頁(yè)文件內(nèi)容


cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/vhosts.conf  ##拷貝虛擬主機(jī)配置模板文件
vi /etc/httpd/conf.d/vhosts.conf  ##編輯虛擬主機(jī)配置文件,修改如下內(nèi)容
<VirtualHost *:80>
ServerName www.X.com
DocumentRoot "/web/vhosts/x"
ErrorLog "/var/log/httpd/x.err"
CustomLog "/var/log/httpd/x.access" common

<Directory "/web/vhosts/x">
Options None
AllowOverride None
Require all granted
</Directory>

</VirtualHost>

<VirtualHost *:80>
ServerName www.Y.com
DocumentRoot "/web/vhosts/y"
ErrorLog "/var/log/httpd/www2.err"
CustomLog "/var/log/httpd/y.access" common

<Directory "/web/vhosts/y">
Options None
AllowOverride None
Require all granted
</Directory>

</VirtualHost>

systemctl restart httpd  ##重啟服務(wù)队橙,使更改生效
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坠陈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捐康,更是在濱河造成了極大的恐慌畅姊,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吹由,死亡現(xiàn)場(chǎng)離奇詭異若未,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)倾鲫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)粗合,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萍嬉,“玉大人,你說(shuō)我怎么就攤上這事隙疚∪雷罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵供屉,是天一觀的道長(zhǎng)行冰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伶丐,這世上最難降的妖魔是什么悼做? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮哗魂,結(jié)果婚禮上肛走,老公的妹妹穿的比我還像新娘。我一直安慰自己录别,他們只是感情好朽色,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著组题,像睡著了一般葫男。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崔列,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天腾誉,我揣著相機(jī)與錄音,去河邊找鬼峻呕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趣效,可吹牛的內(nèi)容都是我干的瘦癌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼跷敬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼讯私!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起西傀,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斤寇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拥褂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體娘锁,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年饺鹃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莫秆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片间雀。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖镊屎,靈堂內(nèi)的尸體忽然破棺而出惹挟,到底是詐尸還是另有隱情,我是刑警寧澤缝驳,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布连锯,位于F島的核電站,受9級(jí)特大地震影響用狱,放射性物質(zhì)發(fā)生泄漏运怖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一齿拂、第九天 我趴在偏房一處隱蔽的房頂上張望驳规。 院中可真熱鬧,春花似錦署海、人聲如沸吗购。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捻勉。三九已至,卻和暖如春刀森,著一層夾襖步出監(jiān)牢的瞬間踱启,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工研底, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埠偿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像履恩,于是被迫代替她去往敵國(guó)和親才漆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349