1、常見的自動化運維工具html
1.功能上分類node
OS Provisioning:PXE,cobbler:參考連接 http://renjunjie622.blog.51cto.com/2913680/1782190python
物理機:PXE、Cobblermysql
虛擬機:Image Templates(鏡像模板)sql
OS Config:程序包管理、用戶管理、配置文件、服務管理、cron任務等等;shell
puppet (ruby) vim
saltstack (python)ruby
chefbash
cfenginebabel
Task Exec:
fabric,func,saltstack
Deployment:
fabric
2.從代理上分類:
agent: puppet, func
agentless: ansible, fabric(運行ssh服務)
2、ansible介紹
1.ansible特性:
1.高度模塊化,藉助模塊完成各類任務
2.agentless,即無需在被控制端安裝agent
3.默認基於ssh協議向被控制端發送操做指令
基於密鑰認證
在inventory文件中指定帳號和密碼
4.一系列任務執行可寫成劇本(playbook)
5.具備冪等性:不會重複執行相同操做,好比不會重複安裝軟件
6.主從模式:master:ansible,ssh client slave:ssh server
2.ansible的核心組件:
ansible core(核心程序)
host inventory(主機列表)
core modules(核心模塊)
custom modules(自定義模塊)
playbook(yaml,jinjia2)(劇本)
connection plugin(鏈接插件,負責和被控制端通訊)
plugin(其餘插件:郵件發送、日誌)
3.安裝
ansible依賴於Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。
1.編譯安裝 解決依賴關係 # 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 2.rpm包安裝(配置epel yum源) #建議採用 # yum install ansible
3.ansible重要文件
配置文件:/etc/ansible/ansible.cfg 主機列表文件:/etc/ansible/hosts
4.root基於密鑰,免密登入
(1)yum -y install openssh-clients (2)ssh-keygen -t rsa (3)ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.193.129 具體解釋參見:http://nxyboy.blog.51cto.com/10511646/1944205
3、經常使用模塊與命令
1.命令格式:
ansible命令基礎: ansible <host-pattern> [-f forks] [-m module_name] [-a args] -f forks: 啓動的併發線程數 -m module_name: -a args: args: key=value -i 指定hosts文件,不使用默認
2.查看模塊幫助:
ansible-doc -l #列出ansible所支持的模塊 ansible-doc -s MODULE_NAME #查看指定模塊 ansible-doc -s yum
3.經常使用模塊module_name介紹
1.command 命令模塊,默認模塊,用於在遠程執行命令 -a 'COMMAND' #ansible node2 -m command -a "date" 2.user 管理用戶 -a 'name= state={present|absent} system= uid=' name=:指明用戶名 password=加密串 #ansible node2 -m user -a 'name=mysql uid=306 system=yes group=mysql' 3.group -a 'name= gid= state= system=' state:present,absent #ansible node2 -m group -a 'name=mysql gid=306 system=yes state=present ' 4.cron 週期性任務計劃模塊 -a 'name= minute= hour= day= month= weekday= job= user= state=' #ansible node2 -m cron -a 'minute="*/10" job="/bin/echo hahaha" name="test" state="present" ' 5.copy(複製文件) -a 'dest= src= mode= owner= group= content=' src=:本地源文件路徑(能夠相對和絕對路徑) dest=:目標文件路徑(絕對路徑) content=: 直接生成文件內容,取代src(不能與src同時存在) force: 當設置爲yes時,若是目標主機存在該文件,但內容不一樣,會強制覆蓋。默認爲yes backup: 在覆蓋以前備份源文件,yes/no #ansible node2 -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640 ' #ansible node2 -m copy -a 'content="Hello\n hello\n " dest=/tmp/hello.ansible ' 6.file(設置文件屬性) -a 'path= mode= owner= group= state={directory|link|present|absent} src=' path=:指定文件路徑,可使用name或dest來替換 src=:被連接的源文件路徑,只應用於 state=link 的狀況 建立文件的連接: src=:指定源文件 path=:指定連接文件 state=:後面接文件的各類狀態,如directory, link, hard, file及absent(刪除) directory: 若是目錄不存在,則建立目錄 file: 即便文件不存在,也不會被建立 absent: 刪除目錄、文件或連接文件 touch: 若是文件不存在,則會建立一個新文件,若是存在,則更新其時間戳 link: 建立軟連接 hard:硬連接 #ansible node2 -m file -a 'owner=mysql group=mysql mode=644 path="/tmp/fstab.ansible"' #ansible node2 -m file -a ' path="/tmp/fstab.link" src="/tmp/fstab.ansible" state=link ' 7.ping 測試遠程主機可否能鏈接,沒有參數 #ansible node2 -m ping 8.yum(安裝或卸載程序包) -a 'name= state={present|latest|absent}' name=指明要安裝的軟件包,能夠帶上版本號 #ansible node2 -m yum -a 'name=zsh state=present' 9.service(指定程序運行狀態) -a 'name= state={started|stopped|restarted} enabled=' enabled=:是否開機自啓,取值爲true或false state=如今狀態 #ansible node2 -m service -a 'enable=true name=httpd state=started ' 10.shell (管道,變量 複雜命令) -a 'COMMAND' #ansible node2 -m shell -a 'echo 123456 | passwd --stdin user1 ' 11.script(本地腳本,複製到遠程主機上並運行) -a '/path/to/script' #ansible node2 -m script -a '/tmp/test.sh' 12.setup(收集遠程主機的facts) ansible-doc -s setup #ansible node2 -m setup playbook運行時,會自動調用setup模塊收集遠程主機的相關信息(稱爲facts,如操做系統版本、ip地址、cpu數量等),這些信息保存於變量中,可在playbook中引用。 咱們也可直接使用ansible命令直接獲取這些變量信息: ansible all -m setup [-a 'filter=ansible_eth[0-2]'] filter:過濾器,表示只返回與指定shell風格通配符匹配的變量信息 ansible all -m setup --tree /tmp/facts --tree:表示將收集的facs以樹狀的結構輸入到指定文件中 [root@node1 ~]# ansible node2 -m setup -a 'filter=ansible_fqdn' 192.168.193.129 | SUCCESS => { "ansible_facts": { "ansible_fqdn": "node2" }, "changed": false } 13.template template是使用了Jinjia2格式做爲文件模版,進行文檔內變量的替換的模塊。它的每次使用都會被ansible標記爲」changed」狀態。 舉個例子: vim /root/httpd.conf ... ServerName {{ ansible_fqdn }} #ansible node2 -m template -a 'src=/root/httpd.conf desc=/etc/httpd/conf/httpd.conf 當/root/httpd.conf文件被複制到第一個主機時,ServerName的值被替換成第一個主機的ansible_fqdn的值node2,而被複制到第二個主機時,ServerName的值會被替換成node3 14.synchronize 該模塊會調用rsync命令,用於將ansible機器的指定目錄推送到客戶機器 的指定目錄下 #ansible node2 -m synchronize -a 'src=/usr/local/src/ dest=/usr/local/src/ delete=yes compress=yes' 15.get_url 經常使用模塊,能夠實如今遠程主機上下載url到本地 #ansible node2 -m get_url -a 'url=http://xxx.com dest=/tmp' 更多模塊,參考http://www.361way.com/ansible-modules/4415.html