Ansible基於Python開發,默認經過SSH協議進行遠程命令執行或下發配置,無需部署任何客戶端代理軟件,可同時支持多臺主機進行管理。ansible是基於模塊工做的,自己沒有批量部署的能力,真正具備批量部署的是ansible所運行的模塊,可以實現批量運行命令、部署程序、配置系統等功能。mysql
(1)Ansible core核心引擎。
(2)Host inventory 主機清單:用來定義Ansible管理的主機,默認是在Ansible配置文件中定義被管理主機,同時也支持自定義動態主機清單。
(3)Comecton pugins鏈接插件:負責和被管理主機實現通訊。除支持使用SSH鏈接被管理主機外,Ansible還支持其餘的鏈接方式,因此須要有鏈接插件將各個主機用鏈接插件鏈接到Ansible。
(4)Core modules核心模塊:是Ansible自帶的模塊,使用這些模塊將資源分發到被管理主機,使其執行特定任務或匹配特定的狀態。
(5)Custom meodle自定義模塊:用於完成模塊功能的補充,可藉助相關插件完成記
錄日誌、發送郵件等功能。
(6)Playbooks (yaml, jinja2) 劇本:用來集中定義Ansible任務的配置文件,即將多個任務定義在一個劇本中由Ansible自動執行,能夠由控制主機針對多臺被管理主機同時運行多個任務。web
系統環境:sql
主機 | 操做系統 | IP地址 | 組名 |
---|---|---|---|
控制主機 | CentOS 7.4 x86_64 | 192.168.100.138 | |
被管理主機 | CentOS 7.4 x86_64 | 192.168.100.131 | webserver |
被管理主機 | CentOS 7.4 x86_64 | 192.168.100.132 | mysql |
準備yum源,直接使用yum命令安裝Ansibleshell
yum install -y epel-release #安裝epel源 yum install ansible -y
查看ansible軟件的版本信息vim
ansible --version
Ansible主要相關配置文件在/etc/ansible目錄下。bash
[root@promote ~]# cd /etc/ansible/ [root@promote ansible]# pwd /etc/ansible [root@promote ansible]# ll 總用量 24 -rw-r--r--. 1 root root 19549 7月 6 23:53 ansible.cfg #配置文件 -rw-r--r--. 1 root root 1016 7月 6 23:53 hosts #管控主機文件 drwxr-xr-x. 2 root root 6 7月 6 23:53 roles
修改主機與組配置後,可同時鏈接到多個被管理主機上執行任務。架構
cd /etc/ansible vim hosts [webserver] #被管理主機分類 192.168.100.131 [mysql] 192.168.100.132 #被管理主機分類
使用ssh-keygen產生一對密鑰,使用ssh-copy-id來下發生成的公鑰。ssh
ssh-keygen -t rsa #基於ssh密鑰的鏈接 ssh-copy-id root@192.168.100.131 ssh-copy-id root@192.168.100.132 #配置密鑰對驗證
爲了實現免交互代理,能夠輸入如下命令:ide
ssh-agent bash ssh-add
Ansible可使用命令行方式進行自動化管理,它的命令行管理工具都是由一系列模塊、參數所支持的,基本語法以下:工具
ansible [主機] [-m 模塊] [-a args]
Ansible自帶了不少模塊,可以下發執行Ansible的各類管理任務。不過查看模塊幫助信息能夠用ansible-doc工具。
ansible-doc -l #列出全部已安裝的模塊 注:按q退出 ansible-doc -s yum #-s列出yum模塊描述信息和操做動做
-m選項指定使用模塊,默認使用command模塊,用於在被管理主機上運行命令。
(1)使用IP地址指定運行主機
ansible 192.168.100.131 -m command -a 'date'
(2)使用被管理主機的分類運行
ansible mysql -m command -a 'date'
(3)在全部主機清單中的主機運行
ansible all -m command -a 'date'
(4)不加-m選項,默認運行command模塊
ansible all -a 'tail -1 /etc/passwd'
cron模塊用於定義任務計劃。其中有兩種狀態(state ):present表示添加(省略狀態默認使用),absent表示移除。
(1)添加任務計劃
ansible webserver -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"'
#查看計劃是否添加成功 ansible webserver -a 'crontab -l'
進webserver組的主機查看
(2)移除任務計劃
ansible webserver -m cron -a 'name="test cron job" state=absent'
user模塊用於建立新用戶和更改、刪除已存在的用戶。其中name選項用來指明建立的用戶名稱。請求的是useradd, userdel, usermod三個指令
(1)建立用戶
ansible mysql -m user -a 'name="test01"'
#查看用戶是否添加成功 ansible mysql -m command -a 'tail /etc/passwd'
(2)刪除用戶
ansible mysql -m user -a 'name="test01" state=absent'
group模塊用於對用戶組進行管理。請求的是groupadd, groupdel, groupmod 三個指令。
例如:建立mysql組,將已建立好的用戶test01添加到mysql組中。
#建立mysql組 ansible mysql -m group -a 'name=mysql gid=306 system=yes'
#查看組是否添加 ansible mysql -a 'tail /etc/group'
#將用戶mysql添加到mysql組中 ansible mysql -m user -a 'name=mysql uid=306 system=yes group=mysql'
#查看用戶mysql是否添加到mysql組中 ansible mysql -a 'tail -1 /etc/passwd'
copy模塊用於實現文件複製和批量下發文件。其中使用src來定義本地源文件路徑,使用dest定義被管理主機文件路徑,使用content則是經過指定信息內容來生成目標文件。
(1)將本地文件/etc/fstab複製到被管理主機上的/opt/fstab.back,將全部者設置爲root,權限設置爲640.
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640'
#查看是否存在複製的文件 ansible mysql -a 'ls -l /opt'
(2)將hello heihei!寫入/opt/fstab.back。
ansible mysql -m copy -a 'content="hello heihei!" dest=/opt/fstab.back'
#查看內容是否寫入 ansible mysql -a 'cat /opt/fstab.back'
file模塊來設置文件屬性。其中使用path指定文件路徑,使用src定義源文件路徑,使用name或dest來替換建立文件的符號連接。
(1)設置文件/opt/fstab.back的所屬主爲mysql,所屬組爲mysql,權限爲644.
ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back'
#查看文件的屬性 ansible mysql -a 'ls -l /opt/'
(2)設置/opt/fstab.link爲/opt/fstab.back的連接文件。
ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'
#查看連接文件 ansible mysql -a 'ls -l /opt/'
(3)刪除文件/opt/fstab.back
ansible mysql -m file -a "path=/opt/fstab.back state=absent"
(4)建立文件/opt/test。
ansible mysql -m file -a "path=/opt/test state=touch"
ping,模塊是用來檢測指定主機的連通性。
ansible all -m ping
shell模塊能夠在被管理主機上運行命令,並支持像管道符等功能的複雜命令。
例如,建立用戶使用無交互模式給用戶設置密碼。
#建立用戶user1 ansible mysql -m user -a 'name=user1' #無交互給用戶user1設置密碼 ansible mysql -m shell -a 'echo abc123|passwd --stdin user1'
script模塊能夠將本地腳本複製到被管理主機上進行運行。須要注意的是,使用相對路徑來指定腳本。
例如,編輯一個本地腳本test.sh,複製到被管理主機上運行。
vi /opt/test.sh #!/bin/bash echo "hello ansible from script"> /opt/script.txt chmod +x /opt/test.sh ansible mysql -m script -a '/opt/test.sh'
#查看腳本實現 ansible mysql -a 'cat /opt/script.txt'
yum模塊復責在被管理主機上安裝與卸載軟件包,其中使用name指定要安裝的軟件包,使用state指定安裝軟件包的狀態,present、latest用來表示安裝,absent表示卸載。
(1)安裝zsh軟件包
ansible mysql -m yum -a 'name=zsh'
#查看是否安裝 ansible mysql -a 'rpm -q zsh'
(2)卸載zsh軟件包
ansible mysql -m yum -a 'name=zsh state=absent'
(3)安裝httpd軟件包
ansible webserver -m yum -a 'name=httpd'
service模塊用來控制管理服務的運行狀態。其中enabled表示是否開機自啓動,取值爲true或false,使用name定義服務名稱,使用state指定服務狀態,取值分別爲started、stoped、restarted.
(1)啓動httpd服務並設置開機自啓動。
ansible webserver -m service -a 'enabled=true name=httpd state=started'
(2)查看httpd服務的狀態
ansible webserver -a 'systemctl status httpd'
setup模塊收集、查看被管理主機的facts。每一個被管理主機在接並運行管理命令以前,都會將本身的相關信息(操做系統、IP地址)發送給控制主機。
例如,查看mysql組的facts信息。
ansible mysql -m setup
以上皆是Ansible經常使用的模塊,若是用到其餘模塊可使用ansible-doc工具。