Ansible是一個基於Python開發的設定管理和應用部署工具,現在也在自動化管理領域大放異彩。它融合了眾多老牌運維工具的優點,Pubbet和Saltstack能實現的功能,Ansible基本上都可以實現。
Ansible能批次設定、部署、管理上千臺主機。比如以前需要切換到每個主機上執行的一或多個操作,使用Ansible只需在固定的一臺Ansible控制節點上去完成所有主機的操作。
Ansible是基於模組工作的,它只是提供了一種執行框架,它本身沒有完成任務的能力,真正執行操作的是Ansible的模組, 比如copy模組用於拷貝檔案到遠端主機上,service模組用於管理服務的啟動、停止、重啟等。
Ansible其中一個比較鮮明的特性是Agentless,即無Agent的存在,它就像普通命令一樣,並非C/S軟體,也只需在某個作為控制節點的主機上安裝一次Ansible即可,通常它基於ssh連線來控制遠端主機,遠端主機上不需要安裝Ansible或其它額外的服務。
使用者在使用時,在伺服器終端輸入命令或者playbooks,會通過預定好的規則將playbook拆解為play,再組織成ansible可以識別的任務,呼叫模組和外掛,根據主機清單通過SSH將臨時檔案發給遠端的使用者端執行並返回結果,執行結束後自動刪除
Ansible的另一個比較鮮明的特性是它的絕大多數模組都具備冪等性(idempotence)。所謂冪等性,指的是無論執行多少次同樣的運算,結果都是相同的,即一條命令,任意多次執行所產生的影響均與一次執行的影響相同。比如執行 systemctl stop xxx 命令來停止服務,當發現要停止的目標服務已經處於停止狀態,它什麼也不會做, 所以多次停止的結果仍然是停止,不會改變結果,它是冪等的,而 systemctl restart xxx 是非冪等的。
Ansible的很多模組在執行時都會先判斷目標節點是否要執行任務,所以,可以放心大膽地讓Ansible去執行任務,重複執行某個任務絕大多數時候不會產生任何副作用。
管理端:192.168.1.100 ansible 被管理端:192.168.1.101 被管理端:192.168.1.102
yum install -y epel-release //先安裝 epel 源
yum install -y ansible
/etc/ansible/
├── ansible.cfg #ansible的組態檔,一般無需修改
├── hosts #ansible的主機清單,用於儲存需要管理的遠端主機的相關資訊
└── roles/ #公共角色目錄
cd /etc/ansible
vim hosts
[webservers] #設定組名
192.168.1.101 #組裡包含的被管理的主機IP地址或主機名(主機名需要先修改/etc/hosts檔案)
[dbservers]
192.168.1.102
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
yum install -y sshpass
sshpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]
sshpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
用於生成一個RSA型別的SSH金鑰對。以下是對該命令中各個選項的解釋:
-t rsa
:指定使用RSA演演算法生成金鑰對。
-P ''
:設定金鑰的密碼為空(即無密碼)。
-f ~/.ssh/id_rsa
:指定生成的金鑰檔案的路徑和名稱
shpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]
用於通過SSH複製公鑰到目標主機。以下是對該命令中各個選項的解釋:
sshpass -p '123123'
:使用sshpass
工具來提供密碼,其中-p
選項用於指定密碼。請注意,使用明文密碼是不安全的,在生產環境中應該避免使用此方法。
ssh-copy-id
:該命令用於將本地公鑰複製到遠端主機的authorized_keys
檔案中,以實現無密碼登入。
-o StrictHostKeyChecking=no
:該選項用於禁用StrictHostKeyChecking,以便在首次連線時不會提示對目標主機的驗證。
驗證: