# ansible的特性
**基于python語言實現,由Paramiko,PyYAML和Jinjia2三個關鍵模塊:**
- 部署簡答,agentless
- 默認使用ssh協議,
- 主從模式:
* master:ansible,ssh client
* slave:ssh server
* 支持自定義模塊:支持各種編程語言
* 支持Playbook
* 基于“模塊”完成各種”任務“
**ansible主要組成部分功能說明**
- PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置文件,由Ansible順序依次執行,通常是JSON格式的YML文件
- INVENTORY:Ansible管理主機的清單/etc/anaible/hosts
- MODULES:Ansible執行命令的功能模塊,多數為內置的核心模塊,也可自定義,ansible-doc –l 可查看模塊
- PLUGINS:模塊功能的補充,如連接類型插件、循環插件、變量插件、過濾插件等,該功能不常用
- API: 供第三方程序調用的應用程序編程接口
- ANSIBLE:組合INVENTORY、 API、 MODULES、PLUGINS的綠框,可以理解為是ansible命令工具,其為核心執行工具
# 安裝ansible
ansible依賴于epel源、Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。
## 編譯安裝
解決依賴關系
```
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
```
## rpm包安裝
yum install ansible
注意:不同版本的ansible的功能差異可能較大。
配置文件:/etc/ansible/ansible.cfg
Invertory:/etc/ansible/hosts
## 配置文件
配置文件或指令描述
```
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主機清單
/etc/ansible/roles/ 存放角色的目錄
/usr/bin/ansible 主程序,臨時命令執行工具
/usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy 下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook 定制自動化任務,編排劇本工具
/usr/bin/ansible-pull 遠程執行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面與用戶交互的執行工具
```
## inventory 主機清單
ansible必須通過Inventory 來管理主機。ansible 可同時操作屬于一個組的多臺主機,組和主機之間的關系通過 inventory 文件配置。ansible通過ssh實現配置管理、應用部署、任務執行等功能,因此,需要事先配置ansible端能基于密鑰認證的方式聯系各被管理節點。
語法格式:
```
green.example.com > FQDN
192.168.100.10 > IP地址
192.168.100.11:2222 > 非標準SSH端口
[webservers] > 定義了一個組名
alpha.example.org > 組內的單臺主機
192.168.100.10
[dbservers]
192.168.100.10 > 一臺主機可以是不同的組,這臺主機同時屬于[webservers]
[group:children] > 組嵌套組,group為自定義的組名,children是關鍵字,固定語法,必須填寫。
dns > group組內包含的其他組名
db > group組內包含的其他組名
[webservers]
www[001:006].yjscloud.com > 有規律的名稱列表,
這里表示相當于:
www001.yjscloud.com
www002.yjscloud.com
www003.yjscloud.com
www004.yjscloud.com
www005.yjscloud.com
www006.yjscloud.com
[databases]
db-[a:e].example.com > 定義字母范圍的簡寫模式,
這里表示相當于:
db-a.example.com
db-b.example.com
db-c.example.com
db-d.example.com
db-e.example.com
```
以下這2條定義了一臺主機的連接方式,而不是讀取默認的配置設定
```
localhost ansible_connection=local
www.163.com ansible_connection=ssh ansible_ssh_user=hunk
```
最后還有一個隱藏的分組,那就是all,代表全部主機,這個是隱式的,不需要寫出來的。
# YAML
## YAML介紹
YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發表了這種語言,另外Ingy d?t Net與Oren Ben-Kiki也是這語言的共同設計者。
YAML Ain't Markup Language,即YAML不是XML。不過,在開發的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。其特性:
- YAML的可讀性好
- YAML和腳本語言的交互性好
- YAML使用實現語言的數據類型
- YAML有一個一致的信息模型
- YAML易于實現
- YAML可以基于流來處理
- YAML表達能力強,擴展性好
更多的內容及規范參見`http://www.yaml.org`
## YAML語法
YAML的語法和其他高階語言類似,并且可以簡單表達清單、散列表、標量等數據結構。其結構(Structure)通過空格來展示,序列(Sequence)里的項用"-"來代表,Map里的鍵值對用":"分隔。下面是一個示例
```
name: John Smith
age: 41
gender: Male
spouse:
name: Jane Smith
age: 37
gender: Female
children:
- name: Jimmy Smith
age: 17
gender: Male
- name: Jenny Smith
age 13
gender: Female
```
YAML文件擴展名通常為.yaml,如example.yaml。
### list
列表的所有元素均使用“-”打頭,例如:
```
# A list of tasty fruits
- Apple
- Orange
- Strawberry
- Mango
```
### dictionary
字典通過key與valuef進行標識,例如:
```
# An employee record
name: Example Developer
job: Developer
skill: Elite
```
也可以將key:value放置于{}中進行表示,例如:
```
# An employee record
{name: Example Developer, job: Developer, skill: Elite}
```
# ansible基礎元素
## 變量
### 變量命名
變量名僅能由字母、數字和下劃線組成,且只能以字母開頭。
### acts
facts是由正在通信的遠程目標主機發回的信息,這些信息被保存在ansible變量中。要獲取指定的遠程主機所支持的所有facts,可使用如下命令進行:
# ansible hostname -m setup
### register
把任務的輸出定義為變量,然后用于其他任務,示例如下:
```
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True
```
### 通過命令行傳遞變量
在運行playbook的時候也可以傳遞一些變量供playbook使用,示例如下:
ansible-playbook test.yml --extra-vars "hosts=www user=mageedu"
### 通過roles傳遞變量
當給一個主機應用角色的時候可以傳遞變量,然后在角色內使用這些變量,示例如下:
```
- hosts: webservers
roles:
- common
- { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }
```
## Inventory
ansible的主要功用在于批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名。默認的inventory file為/etc/ansible/hosts。
inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成。
### inventory文件格式
inventory文件遵循INI文件風格,中括號中的字符為組名。可以將同一個主機同時歸并到多個不同的組中;此外,當如若目標主機使用了非默認的SSH端口,還可以在主機名稱之后使用冒號加端口號來標明,`inventory 主機清單`章節已對文件格式進行了說明這里就不在贅述。
### 主機變量
可以在inventory中定義主機時為其添加主機變量以便于在playbook中使用。例如:
```
[webservers]
www1.yjscloud.com http_port=80 maxRequestsPerChild=808
www2.yjscloud.com http_port=8080 maxRequestsPerChild=909
```
### 組變量
組變量是指賦予給指定組內所有主機上的在playboo中可用的變量。例如:
```
[webservers]
www1.yjscloud.com
www2.yjscloud.com
[webservers:vars]
ntp_server=ntp.yjscloud.com
nfs_server=nfs.yjscloud.com
```
### 組嵌套
inventory中,組還可以包含其它的組,并且也可以向組中的主機指定變量。不過,這些變量只能在ansible-playbook中使用,而ansible不支持。例如:
```
[apache]
httpd1.yjscloud.com
httpd2.yjscloud.com
[nginx]
ngx1.yjscloud.com
ngx2.yjscloud.com
[webservers:children]
apache
nginx
[webservers:vars]
ntp_server=ntp.yjscloud.com
```
### nventory參數
ansible基于ssh連接inventory中指定的遠程主機時,還可以通過參數指定其交互方式;這些參數如下所示:
```
ansible_ssh_host
連接到主機的名稱,如果你希望給不同的別名。
ansible_ssh_port
ssh端口號,如果不是22
ansible_ssh_user
默認使用ssh的用戶名。
ansible_ssh_pass
ssh密碼使用(這是不安全的,我們強烈建議使用——ask-pass或ssh密鑰)
ansible_sudo_pass
使用sudo密碼(這是不安全的,我們強烈建議使用——ask-sudo-pass)
ansible_connection
連接類型的主機。候選人都是本地,ssh或paramiko。默認是paramiko Ansible 1.2之前,和“smart”之后,檢測是否使用ssh的根據是否支持ControlPersist可行。
ansible_ssh_private_key_file
使用ssh私有密鑰文件。有用的,如果使用多個鍵和你不想使用SSH代理。
ansible_shell_type
shell型的目標系統。默認命令格式默認使用“sh”風格的語法。設置這個“csh”或“fish"將導致在目標系統上執行命令跟隨那些shell的語法。
ansible_python_interpreter
目標主機的python的道路。這是對系統更有用,比Python位于“/ usr / bin / Python”如\ * BSD,或者/usr/bin/python
不是一個2.X系列Python。我們不使用“/ usr / bin / env”機制,需要遠程用戶的路徑設置正確,也假設“python可執行為python可執行的可能被命名為“python26”
ansible\_\*\_interpreter
適用于任何諸如ruby、perl和ansible_python_interpreter一樣工作。這個模塊替換工作將在此主機上運行。
```
## 條件測試
如果需要根據變量、facts或此前任務的執行結果來做為某task執行與否的前提時要用到條件測試。
### when語句
在task后添加when子句即可使用條件測試;when語句支持Jinja2表達式語法。例如:
```
tasks:
- name: "shutdown Debian flavored systems"
command: /sbin/shutdown -h now
when: ansible_os_family == "Debian"
```
when語句中還可以使用Jinja2的大多“filter”,例如要忽略此前某語句的錯誤并基于其結果(failed或者sucess)運行后面指定的語句,可使用類似如下形式:
```
tasks:
- command: /bin/false
register: result
ignore_errors: True
- command: /bin/something
when: result|failed
- command: /bin/something_else
when: result|success
- command: /bin/still/something_else
when: result|skipped
```
此外,when語句中還可以使用facts或playbook中定義的變量。
## 迭代
當有需要重復性執行的任務時,可以使用迭代機制。其使用格式為將需要迭代的內容定義為item變量引用,并通過with_items語句來指明迭代的元素列表即可。例如:
```
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
```
上面語句的功能等同于下面的語句:
```
- name: add user testuser1
user: name=testuser1 state=present groups=wheel
- name: add user testuser2
user: name=testuser2 state=present groups=wheel
```
事實上,with_items中可以使用元素還可為hashes,例如:
```
- name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser1', groups: 'wheel' }
- { name: 'testuser2', groups: 'root' }
```
ansible的循環機制還有更多的高級功能,具體請參見[官方文檔](http://docs.ansible.com/playbooks_loops.html)
# 常見的模塊
- command:命令模塊,默認模塊,用于在遠程執行命令;
```
ansible all -a 'date'
```
- cron:管理計劃任務
* state:
present:安裝
absent:移除
```
ansible websrvs -m cron -a 'minute="*/10" job="/bin/echo hell" name="test cron job"'
```
- user:管理用戶賬號
* name=:指明創建的用戶的名字:
```
ansible websrvs -m group -a 'name=mysql gid=306 system=yes group=mysql'
```
- group:添加組或刪除組
```
ansible websrvs -m group -a 'name=mysql gid=306 system=yes'
```
- copy:
* src=:定義本地源文件路徑
* dest=:定義遠程目標文件路徑
* content=:取代src=,表示直接用此處指定的信息生成為目標文件內容;
```
ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640'
ansible all -m copy -a 'content="Hello Ansible\nHi yjscloud" dest=/tmp/test.ansible'
```
- file:設定文件屬性
* path=:指定文件路徑,可以使用name或dest來替換;
創建文件的符號鏈接
* src=:指明源文件
* path=:指明符號鏈接文件路徑
```
ansible all -m file -a 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'
```
- ping:測試指定主機是否能連接;
* serveice:指定運行狀態;
* enabled=:是否開機自動啟動,取值為true或者flase;
* name=:服務名稱
* state=:狀態,取值有started,stopped,restarted;
- shell:在遠程主機上運行命令
用到管道等功能的復雜命令;
- script:將本地腳本復制到遠程主機并運行之;
注意:要使用相對路徑指定腳本
- yum:安裝程序包
* name=:指明要安裝的程序包,可以帶上版本號;
* state=:present,latest表示安裝,absent表示卸載;
- setup:收集遠程主機的facts
每個被管理節點在接收并運行管理命令之前,會將自己主機相關信息,如操作系統版本、IP地址等報告給遠程的ansible主機;
- fetch:從遠程節點獲取文件(只能是文件)到本地目錄。默認會以主機清單中的主機名為目錄存放獲取到的文件
```
ansible all -m fetch -a 'src=/var/log/messages dest=/app'
```
注意,`src=/var/log/mess*` 這種通配符語法是不支持的
- get_url:從 HTTP, HTTPS, or FTP 下載文件
* timeout:下載超時時間,默認10s
* url:下載的URL
* url_password、url_username:主要用于需要用戶名密碼進行驗證的情況
* force:yes目標存在時是否下載,no目標文件不存在時下載
```
ansible all -m get_url -a 'dest=/app/ url="https://github.com/bennojoy/nginx/archive/master.zip"'
```
# ansible playbooks
playbook是由一個或多個“play”組成的列表。play的主要功能在于將事先歸并為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的一個module。將多個play組織在一個playbook中,即可以讓它們聯同起來按事先編排的機制同唱一臺大戲。下面是一個簡單示例。
```
- hosts: webnodes
vars:
http_port: 80
max_clients: 256
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
```
## playbook基礎組件
### Hosts和Users
playbook中的每一個play的目的都是為了讓某個或某些主機以某個指定的用戶身份執行任務。hosts用于指定要執行指定任務的主機,其可以是一個或多個由冒號分隔主機組;remote_user則用于指定遠程主機上的執行任務的用戶。如上面示例中的
```
-hosts: webnodes
remote_user: root
```
不過,remote_user也可用于各task中。也可以通過指定其通過sudo的方式在遠程主機上執行任務,其可用于play全局或某任務;此外,甚至可以在sudo時使用sudo_user指定sudo時切換的用戶。
```
- hosts: webnodes
remote_user: yjscloud
tasks:
- name: test connection
ping:
remote_user: yjscloud
sudo: yes
```
### 任務列表和action
play的主體部分是task list。task list中的各任務按次序逐個在hosts中指定的所有主機上執行,即在所有主機上完成第一個任務后再開始第二個。在運行自下而下某playbook時,如果中途發生錯誤,所有已執行任務都將回滾,因此,在更正playbook后重新執行一次即可。
task的目的是使用指定的參數執行模塊,而在模塊參數中可以使用變量。模塊執行是冪等的,這意味著多次執行是安全的,因為其結果均一致。
每個task都應該有其name,用于playbook的執行結果輸出,建議其內容盡可能清晰地描述任務執行步驟。如果未提供name,則action的結果將用于輸出。
定義task的可以使用“action: module options”或“module: options”的格式,推薦使用后者以實現向后兼容。如果action一行的內容過多,也中使用在行首使用幾個空白字符進行換行。
```
tasks:
- name: make sure apache is running
service: name=httpd state=running
```
在眾多模塊中,只有command和shell模塊僅需要給定一個列表而無需使用“key=value”格式,例如:
```
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來忽略錯誤信息:
```
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True
```
### handlers
用于當關注的資源發生變化時采取一定的操作。
“notify”這個action可用于在每個play的最后被觸發,這樣可以避免多次有改變發生時每次都執行指定的操作,取而代之,僅在所有的變化發生完成后一次性地執行指定操作。在notify中列出的操作稱為handler,也即notify中調用handler中定義的操作。
```
- name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache
```
handler是task列表,這些task與前述的task并沒有本質上的不同。
```
handlers:
- name: restart memcached
service: name=memcached state=restarted
- name: restart apache
service: name=apache state=restarted
```
案例:
heartbeat.yaml
```
- hosts: hbhosts
remote_user: root
tasks:
- name: ensure heartbeat latest version
yum: name=heartbeat state=present
- name: authkeys configure file
copy: src=/root/hb_conf/authkeys dest=/etc/ha.d/authkeys
- name: authkeys mode 600
file: path=/etc/ha.d/authkeys mode=600
notify:
- restart heartbeat
- name: ha.cf configure file
copy: src=/root/hb_conf/ha.cf dest=/etc/ha.d/ha.cf
notify:
- restart heartbeat
handlers:
- name: restart heartbeat
service: name=heartbeat state=restarted
```
# roles
ansilbe自1.2版本引入的新特性,用于層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變量、文件、任務、模塊及處理器放置于單獨的目錄中,并可以便捷地include它們的一種機制。角色一般用于基于主機構建服務的場景中,但也可以是用于構建守護進程等場景中。
一個roles的案例如下所示:
```
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/
```
而在playbook中,可以這樣使用roles:
```
- hosts: webservers
roles:
- common
- webservers
```
也可以向roles傳遞參數,例如:
```
- hosts: webservers
roles:
- common
- { role: foo_app_instance, dir: '/opt/a', port: 5000 }
- { role: foo_app_instance, dir: '/opt/b', port: 5001 }
```
甚至也可以條件式地使用roles,例如:
```
- hosts: webservers
roles:
- { role: some_role, when: "ansible_os_family == 'RedHat'" }
```
## 創建role的步驟
- 創建以roles命名的目錄;
- 在roles目錄中分別創建以各角色名稱命名的目錄,如webservers等;
- 在每個角色命名的目錄中分別創建files、handlers、meta、tasks、templates和vars目錄;用不到的目錄可以創建為空目錄,也可以不創建;
- 在playbook文件中,調用各角色;
## role內各目錄中可用的文件
- tasks目錄:至少應該包含一個名為main.yml的文件,其定義了此角色的任務列表;此文件可以使用include包含其它的位于此目錄中的task文件;
- files目錄:存放由copy或script等模塊調用的文件;
- templates目錄:template模塊會自動在此目錄中尋找Jinja2模板文件;
- handlers目錄:此目錄中應當包含一個main.yml文件,用于定義此角色用到的各handler;在handler中使用include包含的其它的handler文件也應該位于此目錄中;
- vars目錄:應當包含一個main.yml文件,用于定義此角色用到的變量;
- meta目錄:應當包含一個main.yml文件,用于定義此角色的特殊設定及其依賴關系;ansible 1.3及其以后的版本才支持;
- default目錄:為當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件;
# Tags
tags用于讓用戶選擇運行或路過playbook中的部分代碼。ansible具有冪等性,因此會自動跳過沒有變化的部分,即便如此,有些代碼為測試其確實沒有發生變化的時間依然會非常地長。此時,如果確信其沒有變化,就可以通過tags跳過此些代碼片斷。
# Jinja2相關
## 字面量
表達式最簡單的形式就是字面量。字面量表示諸如字符串和數值的 Python 對象。下面的字面量是可用的:
```
“Hello World”:
雙引號或單引號中間的一切都是字符串。無論何時你需要在模板中使用一個字 符串(比如函數調用、過濾器或只是包含或繼承一個模板的參數),它們都是 有用的。
```
```
42 / 42.23:
直接寫下數值就可以創建整數和浮點數。如果有小數點,則為浮點數,否則為 整數。記住在 Python 里, 42 和 42.0 是不一樣的。
```
```
[‘list’, ‘of’, ‘objects’]:
一對中括號括起來的東西是一個列表。列表用于存儲和迭代序列化的數據。例如 你可以容易地在 for 循環中用列表和元組創建一個鏈接的列表:
<ul>
{% for href, caption in [('index.html', 'Index'), ('about.html', 'About'),
('downloads.html', 'Downloads')] %}
<li><a href="{{ href }}">{{ caption }}</a></li>
{% endfor %}
</ul>
```
```
(‘tuple’, ‘of’, ‘values’):
元組與列表類似,只是你不能修改元組。如果元組中只有一個項,你需要以逗號 結尾它。元組通常用于表示兩個或更多元素的項。更多細節見上面的例子。
```
```
{‘dict’: ‘of’, ‘key’: ‘and’, ‘value’: ‘pairs’}:
Python 中的字典是一種關聯鍵和值的結構。鍵必須是唯一的,并且鍵必須只有一個 值。字典在模板中很少使用,罕用于諸如 xmlattr() 過濾器之類。
```
```
true / false:
true 永遠是 true ,而 false 始終是 false 。
```
## 算術運算
Jinja 允許你用計算值。這在模板中很少用到,但是為了完整性允許其存在。支持下面的 運算符:
+
把兩個對象加到一起。通常對象是素質,但是如果兩者是字符串或列表,你可以用這 種方式來銜接它們。無論如何這不是首選的連接字符串的方式!連接字符串見 ~ 運算符。 {{ 1 + 1 }} 等于 2 。
-
用第一個數減去第二個數。 {{ 3 - 2 }} 等于 1 。
/
對兩個數做除法。返回值會是一個浮點數。 {{ 1 / 2 }} 等于 {{ 0.5 }} 。
//
對兩個數做除法,返回整數商。 {{ 20 // 7 }} 等于 2 。
%
計算整數除法的余數。 {{ 11 % 7 }} 等于 4 。
*
用右邊的數乘左邊的操作數。 {{ 2 * 2 }} 會返回 4 。也可以用于重 復一個字符串多次。 {{ ‘=’ * 80 }} 會打印 80 個等號的橫條。
**
取左操作數的右操作數次冪。 {{ 2**3 }} 會返回 8 。
## 比較操作符
==
比較兩個對象是否相等。
!=
比較兩個對象是否不等。
>
如果左邊大于右邊,返回 true 。
>=
如果左邊大于等于右邊,返回 true 。
<
如果左邊小于右邊,返回 true 。
<=
如果左邊小于等于右邊,返回 true 。
## 邏輯運算符
對于 if 語句,在 for 過濾或 if 表達式中,它可以用于聯合多個表達式:
and
如果左操作數和右操作數同為真,返回 true 。
or
如果左操作數和右操作數有一個為真,返回 true 。
not
對一個表達式取反(見下)。
(expr)
表達式組。
- 獻給我的朋友們
- 一、個人對學習的看法
- 二、運維技能圖譜
- 三、運維常用技能
- 3.1 Vim(最好用的編輯器)
- 3.2 Nginx & Tengine(Web服務)
- 1. Nginx介紹和部署
- 2. Nginx配置解析
- 3. Nginx常用模塊
- 4. Nginx 的session 一致性問題
- 3.3 Tomcat(Web中間件)
- 3.4 Keepalived(負載均衡高可用)
- 3.5 Memcache(分布式緩存)
- 3.6 Zookeeper(分布式協調系統)
- 3.7 KVM(開源虛擬化)
- 1. 虛擬化介紹
- 2. KVM基礎
- 3. 設置VNC和時間同步
- 4. kvm虛擬機快照備份
- 5. kvm虛擬機在線擴展磁盤
- 6. kvm虛擬機靜態遷移
- 7. kvm虛擬機動態遷移
- 8. kvm虛擬機存儲池配置
- 9. cpu添加虛擬化功能
- 3.8 GitLab(版本控制)
- 3.8.1 GitLab安裝與漢化
- 3.9 Jenkins(運維自動化)
- 3.10 WAF(Web防火墻)
- 3.10.1初探WAF
- 四、常用數據庫
- 4.1 MySQL(關系型數據庫)
- 1. MySQL源碼安裝
- 4.2 Mongodb(適用與大數據分析的數據庫)
- 4.3 Redis(非關系數據庫)
- 五、自動化運維工具
- 5.1 Cobbler(系統自動化部署)
- 5.2 Ansible(自動化部署)
- 5.3 Puppet(自動化部署)
- 5.4 SaltStack(自動化運維)
- 六、存儲
- 6.1 GFS(文件型存儲)
- 6.2 Ceph(后端存儲)
- 七、運維監控工具
- 7.1 對監控的理解
- 7.2 Zabbix(運維監控)
- 7.2.1 Zabbix簡介
- 7.2.2 Zabbix服務部署
- 1. Zabbix服務端部署
- 2. Zabbix客服端部署
- 3. 配置前端展示
- 4. zabbix告警配置
- 7.2.3 Zabbix監控服務
- 1. 監控網絡設備
- 2. 自定義Nginx監控
- 7.3 云鏡(安全監控)
- 7.4 ELK(日志收集展示)
- 八、運維云平臺
- 8.1 OpenStack(開源云操作系統)
- 8.1.1 OpenStack簡介
- 8.1.2 實驗架構設計
- 8.1.3 集群環境準備
- 8.1.4 controller節點部署
- 1. 安裝Mariadb Galera Cluster集群
- 2. 安裝RabbitMQ Cluster集群
- 3. 安裝Pacemaker
- 4. 安裝HAProxy
- 5. 安裝配置Keystone
- 6. 安裝配置glance
- 1. 制作鏡像模板
- 7. 安裝配置nova
- 8. 安裝配置neutron
- 1. 配置虛擬機網絡
- 9. 安裝Dashboard
- 10. 安裝配置cinder
- 8.1.5 compute節點部署
- 1. 安裝相關軟件包
- 2. 安裝Neutron
- 3. 配置cinder
- 4. 創建第一個虛擬機
- 8.1.6 OpenStack報錯處理
- 1. cinder僵尸卷刪除
- 8.1.7 快速孵化虛擬機方案
- 8.1.8 Kolla容器化部署OpenStack
- 1. 單點部署
- 2. 多節點部署
- 8.2 Tstack(騰訊云平臺)
- 8.3 K8s(微服務容器化)
- 九、運維編程技能
- 9.1 Shell(運維必會語言)
- 9.2 Python(萬能的膠水語言)
- 十、Devops運維
- 10.1 理念
- 10.2 Devops實戰