ansiblle具有如下特點: 1、部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作; 2、默認使用SSH協議對設備進行管理; 3、主從集中化管理; 4、配置簡單、功能強大、擴展性強; 5、支持API及自定義模塊,可通過Python輕松擴展; 6、通過Playbooks來定制強大的配置、狀態管理 7、對雲計算平台、大數據都有很好的支持;redis配置文件:這樣寫可以獲取到客戶機的ipv4地址,bind {{ ansible_default_ipv4.address }}
1 安裝ansible Ansible倉庫默認不在yum倉庫中,因此我們需要使用下面的命令啟用epel倉庫。 yum install epel-release -y yum install ansible -y 2. ansible命令參數 anisble命令語法: ansible [-i 主機文件] [-f 批次] [組名] [-m 模塊名稱] [-a 模塊參數] ansible詳細參數: -v,–verbose # 詳細模式,如果命令執行成功,輸出詳細的結果 (-vv –vvv -vvvv) -i PATH, -inventory=PATH # 指定 host 文件的路徑,默認是在 /etc/ansible/hosts inventory [ˈɪnvəntri] 庫存 -f NUM,-forks=NUM # NUM 是指定一個整數,默認是 5 ,指定 fork 開啟同步進程的個數。 -m NAME,-module-name=NAME # 指定使用的 module 名稱,默認使用 command模塊 -a,MODULE_ARGS #指定 module 模塊的參數 -k,-ask-pass #提示輸入 ssh 的密碼,而不是使用基於 ssh 的密鑰認證 -sudo # 指定使用 sudo 獲得 root 權限 -K,-ask-sudo-pass #提示輸入 sudo 密碼,與 -sudo 一起使用 -u USERNAME,-user=USERNAME # 指定移動端的執行用戶 -C,–check #測試此命令執行會改變什么內容,不會真正的去執行
3. 生成密鑰 ssh-keygen默認就行 使用ssh-copy-id命令來復制Ansible公鑰到節點 ssh-copy-id root@節點ip
43. 定義主機清單 1、基於端口,用戶,密碼定義主機清單 ansible基於ssh連接-i (inventory)參數后指定的遠程主機時,也可以寫端口,用戶,密碼。 格式:ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定 ssh 用戶 ansible_ssh_pass:指定 ssh 用戶登錄是認證密碼(明文密碼不安
全) ansible_sudo_pass:指明 sudo 時候的密碼 vim /etc/ansible/hosts #文件 /etc/ansible/hosts 維護着Ansible中服務器的清單。在文件最后追加以下內容 [web-servers] ansible服務器ip ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 [web-server] 節點ip
5. 測試主機連通性 ansible -i /etc/ansible/hosts web-servers -m ping -i # 指定 host 文件的路徑,默認是在 /etc/ansible/hosts -m # 指定使用的ping模塊 報錯: 192.168.1.63 | FAILED! => { "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host." } ssh root@192.168.1.63 #手動連接一下/etc/ansible/hosts主機清單中的主機,這樣就可以在ansible服務器上保存目標主機的fingerprint指紋。再連接試試,如果不行,修改配置文件ansible.cfg,將host_key_checking = False打開就OK了。
5.1 獲取節點服務器運行時間 ansible -m command -a "uptime" web-servers ansible -i hosts web-servers -m command -a "uptime"
5.2 給節點增加用戶 ansible -i hosts web-servers -m command -a "useradd xiaoxiao"
5.3 scripts模塊 使用scripts模塊可以在本地寫一個腳本,在遠程服務器上執行 copy模塊 實現主控端向目標主機拷貝文件,類似scp功能 ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/ai.sh dest=/tmp owner=liutao group=liutao mode=755" 相當於scp文件,可以定義擁有者,組以及權限。
5.4 獲取遠程文件信息 stat模塊 ansible -i hosts web-servers -m stat -a "path=/tmp/ai.sh"
5.5 get_url模塊實現遠程主機下載指定url到本地 ansible -i /etc/ansible/hosts web-servers -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440 force=yes" 注:url=https://xxx 的等號=前后不能有空格 如果force=yes,當下載文件時,如果所下的內容和原目錄下的文件內容不一樣,則替換原文件,如果一樣,就不下載了。 如果為“否”,則僅在目標不存在時才下載文件。 一般來說,只有小型本地文件才應該為“是”。 在0.6之前,該模塊表現為默認為“是”
5.6 yum模塊linux平台軟件包管理。 yum模塊可以提供的status狀態: latest ,present,installed #這3個代表安裝;removed, absent #后面2個是卸載 安裝http,mysql軟件 ansible -i /etc/ansible/hosts web-servers -m yum -a "name=httpd state=latest"
5.7 cron模塊:執行定時任務 ansible -i /etc/ansible/hosts web-servers -m cron -a "name='mkdir' minute=5 hour=02 day=15 month=8 weekday=3 job='mkdir /tmp/a.txt'" minute hour day month weekday 分 時 日 月 周
5.8 service模塊 遠程主機系統服務管理 name參數:此參數用於指定需要操作的服務名稱,比如 nginx,httpd。 state參數:此參數用於指定服務的狀態,比如,我們想要啟動遠程主機中的httpd,則可以將 state 的值設置為 started;如果想要停止遠程主機中的服務,則可以將 state 的值設置為 stopped。此參數的可用值有 started、stopped、restarted(重啟)、reloaded。 enabled參數:此參數用於指定是否將服務設置為開機 啟動項,設置為 yes 表示將對應服務設置為開機啟動,設置為 no 表示不會開機啟動。 注:想使用service模塊啟動服務,被啟動的服務,必須可以使用service 命令啟動或關閉 reloaded, restarted, started, stopped 平滑重啟,重啟,啟動,關閉 enabled=yes開機自啟動,no開機不啟動 ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd state=started" ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd enabled=yes"
5.9 sysctl模塊遠程主機sysctl配置。 開啟路由轉發功能 ansible -i /etc/ansible/hosts web-servers -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes" user模塊遠程主機用戶管理 ansible -i hosts web-servers -m user -a "name=xxx state=present" state參數state=absent(刪除用戶,不刪除家目錄) 默認是present(創建用戶) state=absent remove=yes(刪除用戶同事刪除家目錄,用戶不存在不操作)