1. 程式人生 > 其它 >自動化運維工具-Ansible基礎

自動化運維工具-Ansible基礎

自動化運維工具-Ansible基礎

自動化運維工具-Ansible基礎

Ansible基本概述

什麼是Ansible

Ansible是一個自動化統一配置管理工具,自動化主要體現在Ansible集成了豐富模組以及功能元件,可以通過一個命令完成一系列的操作,進而能減少重複性的工作和維護成本,可以提高工作效率。

同類型軟體對比

  • 1.puppet 學習難,安裝ruby環境難,沒有遠端執行功能

  • 2.ansible 輕量級,大規模環境下只通過ssh會很慢,序列的

  • 3.saltstack 一般選擇salt會使用C/S結構的模式,salt-mastersalt-minion,並行的,大規模批量操作的情況下,會比Ansible速度快一些,底層使用的是zero-MQ

    消協隊

自動化運維時代

  • 1.批量命令執行
  • 2.批量安裝服務
  • 3.批量配置同步
  • 4.批量任務執行
  • 5.批量程式碼部署

自動化運維工具的優勢

  • 1、提高工作效率
  • 2、提高工作準確度
  • 3、減少維護成本
  • 4、減少重複性工作

Ansible優缺點

Ansible優點

1.遠端執行
批量執行遠端命令,可以對多臺主機進行遠端操作

2.配置管理
批量配置軟體服務,可以進行自動化方式配置,服務的統一配置管理,和啟停

3.事件驅動
通過Ansible的模組,對服務進行不同的事件驅動
比如:
1)修改配置後重啟
2)只修改配置檔案,不重啟
3)修改配置檔案後,重新載入
4)遠端啟停服務管理

4.管理公有云
通過API介面的方式管理公有云,不過這方面做的不如saltstack

.
saltstack本身可以通過saltcloud管理各大雲廠商的雲平臺。

5.二次開發
因為語法是Python,所以便於運維進行二次開發。

6.任務編排
可以通過playbook的方式來統一管理服務,並且可以使用一條命令,實現一套架構的部署

7.跨平臺,跨系統
幾乎不受到平臺和系統的限制,比如安裝apache和啟動服務

在Ubuntu上安裝apache服務名字叫apache2
在CentOS上安裝apache服務名字叫httpd

在CentOS6上啟動伺服器使用命令:/etc/init.d/nginx start
在CentOS7上啟動伺服器使用命令:systemctl start ngin

Ansible缺點

1、受到ssh的限制

2、序列執行任務

Ansible的架構

1、連線外掛connection plugins用於連線主機 用來連線被管理端

2、核心模組core modules連線主機實現操作, 它依賴於具體的模組來做具體的事情

3、自定義模組custom modules根據自己的需求編寫具體的模組

4、外掛plugins完成模組功能的補充

5、劇本playbookansible的配置檔案,將多個任務定義在劇本中,由ansible自動執行

6、主機清單inventor定義ansible需要操作主機的範圍

最重要的一點是 ansible是模組化的 它所有的操作都依賴於模組

Ansible的執行流程

1.Ansible讀取playbook劇本,劇本中會記錄對哪些主機執行哪些任務。

2.首先Ansible通過主機清單找到要執行的主機,然後呼叫具體的模組。

3.其次Ansible會通過連線外掛連線對應的主機並推送對應的任務列表。

4.最後被管理的主機會將Ansible傳送過來的任務解析為本地Shell命令執行

安裝Ansible

環境準備

主機名 角色 外網IP 角色
m01 Ansible管理端 10.0.0.61 172.16.1.61
web01 Ansible被管理端 10.0.0.7 172.16.1.7
web02 Ansible被管理端 10.0.0.8 172.16.1.8
db01 Ansible被管理端 10.0.0.51 172.16.1.51
backup Ansible被管理端 10.0.0.41 172.16.1.41
nfs Ansible被管理端 10.0.0.31 172.16.1.31
lb01 Ansible被管理端 10.0.0.5 172.16.1.5
lb02 Ansible被管理端 10.0.0.6 172.16.1.6
# 1.安裝Ansible
[root@m01 ~]# yum install -y ansible

# 2.ansible的配置檔案
[root@m01 ~]# vim /etc/ansible/ansible.cfg

# 3.ansible配置檔案讀取順序
1、$ANSIBLE_CONFIG
2、./ansible.cfg
3、~/.ansible.cfg
4、/etc/ansible/ansible.cfg

# 4.ansible配置檔案
[root@m01 ~]# cat /etc/ansible/ansible.cfg
#inventory    = /etc/ansible/hosts       #主機列表配置檔案
#library      = /usr/share/my_modules/   #庫檔案存放目錄
#remote_tmp   = ~/.ansible/tmp           #臨時py檔案存放在遠端主機目錄
#local_tmp    = ~/.ansible/tmp           #本機的臨時執行目錄
#forks        = 5                        #預設併發數
#sudo_user    = root                     #預設sudo使用者
#ask_sudo_pass = True                    #每次執行是否詢問sudo的ssh密碼
#ask_pass     = True                     #每次執行是否詢問ssh密碼
#remote_port  = 22                       #遠端主機埠
#poll_interval = 15                      #對於Ansible中的非同步任務, 這個是設定定義,當具體的pollinterval 沒有定義時,多少時間回查一下這些任務的狀態, 預設值是一個折中選擇15秒鐘.這個時間是個回查頻率和任務完成叫回頻率和當任務完成時的迴轉頻率的時鐘。

## ansible配置檔案主要修改以下兩個,將註釋取消
host_key_checking = False                 #跳過檢查主機指紋
log_path = /var/log/ansible.log           #ansible日誌

Ansible Inventory(主機清單)

/etc/ansible/hosts是ansible預設主機資產清單檔案,用於定義被管理主機的認證資訊, 例如ssh登入使用者名稱、密碼以及key相關資訊。Inventory檔案中填寫需要被管理的主機與主機組資訊。還可以自定義Inventory主機清單的位置,使用-i指定檔案位置即可。

ansible 語法

anisble [主機名] -m 指定模組
ansible all -m ping
ansible連線方式一:基於密碼連線
[root@m01 ~]# vim /etc/ansible/hosts
[dsr_web]
172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
172.16.1.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

[dsr_db]
172.16.1.51 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

[dsr_lb]
172.16.1.5 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
172.16.1.6 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

[dsr_nfs]
172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

[dsr_backup]
172.16.1.41 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

ansible連線方式二:基於主機名連線(變數)

[webs]
web0[1:2]

[webs:vars]
ansible_ssh_pass='1'
ansible_ssh_user=root
ansible_ssh_port=22

ansible連線方式三:基於祕鑰連線

# 1.在ansible管理端生成祕鑰對
[root@m01 ~]# ssh-keygen

# 2.下發公鑰
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

# 3.主機清單
[root@m01 ~]# vim /etc/ansible/hosts
[xxx]
172.16.1.7
172.16.1.8
172.16.1.5
172.16.1.6
172.16.1.31
172.16.1.41
172.16.1.51

[root@m01 ~]# ansible xxx -m ping

ansible連線方式四:主機名+IP+免密

[root@m01 ~]# vim /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8

[lb_group]
lb01 ansible_ssh_host=172.16.1.5
lb02 ansible_ssh_host=172.16.1.6

[nfs_group]
nfs ansible_ssh_host=172.16.1.31

[bakcup_group]
backup ansible_ssh_host=172.16.1.41

[db_group]
db01 ansible_ssh_host=172.16.1.51

# 使用ansible同時檢視遠端web01和web02的記憶體資訊
[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         196         310          41         465         553
Swap:          1023           0        1023
web02 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         191         429          43         351         567
Swap:          1023           0        1023