相關(guān)資訊
- 出于自身考慮Android 3.0暫停開(kāi)源
- WP7增長(zhǎng)速度超iOS和Android 應(yīng)用一
- Andriod入門(mén)教程1 實(shí)現(xiàn)手機(jī)雙網(wǎng)切
- VB中的Unicode和Ansi格式
- 用Visual Basic為軟件增加注冊(cè)功能
- Visual Basic中輕松打造絢麗按鈕
- 用Visual Basic實(shí)現(xiàn)undo功能
- Visual Basic中調(diào)用MSN API函數(shù)
- 基于Delphi的屏幕抓圖技術(shù)的實(shí)現(xiàn)
- WCF學(xué)習(xí):Instance context model(
本類(lèi)常用軟件
-
福建農(nóng)村信用社手機(jī)銀行客戶端下載下載量:584212
-
Windows優(yōu)化大師下載量:419776
-
90美女秀(視頻聊天軟件)下載量:366966
-
廣西農(nóng)村信用社手機(jī)銀行客戶端下載下載量:365708
-
快播手機(jī)版下載量:325899
基于Ansible實(shí)現(xiàn)批量管理
Ansible提供一種最簡(jiǎn)單的方式用于發(fā)布、管理和編排計(jì)算機(jī)系統(tǒng)的工具,可在數(shù)分鐘內(nèi)搞定,Ansible本身是一種python程序,只需要配置一個(gè)節(jié)點(diǎn),只要ssh連接ok 被控制節(jié)點(diǎn)不需要安裝任何工具,就可以實(shí)現(xiàn)遠(yuǎn)程連接執(zhí)行任何操作支持多節(jié)點(diǎn)發(fā)布、遠(yuǎn)程任務(wù)執(zhí)行。
如果想熟練使用Ansible 還需了解Ansible的模塊機(jī)制,下面我們來(lái)介紹ansible的日常使用,從而達(dá)到我們批量管理的目的
安裝ansible
只需要將管理節(jié)點(diǎn)安裝ansible ,被管理節(jié)點(diǎn)不需要安裝
但如果使用yum安裝的話,必須配置epel源
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -import/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
安裝依賴關(guān)系包
yum installpython-dev python-yamlpython-paramiko python-jinja2 git
確保無(wú)誤,使用yum安裝absible
yum install ansible
ansbible配置文件
安裝后的配置文件位于/etc/ansible
[root@node1ansible]# pwd
/etc/ansible
[root@node1ansible]# ll
total 20
-rw-r--r--. 1 root root 5507 May 1 17:53 ansible.cfg #主配置文件
-rw-r--r--. 1 root root 965 Mar 15 13:07 hosts #目標(biāo)主機(jī)
目標(biāo)被管理主機(jī)要定義在host中,否則只能一個(gè)一個(gè)去手寫(xiě)了
查看配置文件ansible.cfg常用參數(shù):
hostfile = /etc/ansible/hosts #默認(rèn)目標(biāo)主機(jī)文件
library = /usr/share/ansible #庫(kù)文件,裝載模塊時(shí)候其模塊裝載的路徑,因?yàn)閍nsible是模塊化的工具
module_name =command #模塊的名稱,意思是沒(méi)有使用指定模塊的時(shí)候其默認(rèn)使用的模塊,默認(rèn)是命令,意為只執(zhí)行命令
forks = 5 #啟動(dòng)的子進(jìn)程
remote_port = 22 #被管理主機(jī)的端口,默認(rèn)為22,如果ssh端口有變動(dòng)則需要修改此參數(shù)
sudo_user = root #如果以普通用戶登錄進(jìn)行sudo那么sudo的默認(rèn)賬戶是root
host配置文件
一般按照安全性要求,應(yīng)該禁止 root 登錄,禁用密碼登錄,一律使用證書(shū)登錄。 ansible 支持通過(guò) sudo 來(lái)執(zhí)行
所有管理主機(jī),每個(gè)被管理主機(jī)都可以使用主機(jī)名或者ip地址都可以
使用中括號(hào)可以組,緊跟著中括號(hào)下面的都是同一組內(nèi)被管理的主機(jī)
[root@node1ansible]# grep -v "^#" hosts | grep -v "^$"
green.example.com
blue.example.com
192.168.100.1
192.168.100.10
[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
www[001:006].example.com #定義組的時(shí)候還可以使用通配符
[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57
db-[99:101]-node.example.com
使用absible批量管理節(jié)點(diǎn)
假如這個(gè)配置文件不符合我們的意向,可以cp一份作為參考模板,方便以后借鑒
[root@node1ansible]# cp hosts hosts.bak
這里我們定義2臺(tái)被管理節(jié)點(diǎn)
#使用[]指定分組
[root@node1ansible]# grep -v '#' hosts
[hac]
10.0.10.62
10.0.10.61
10.0.10.60
要基于ssh工作,所以本地要生成一對(duì)ssh秘鑰,然后讓其基于秘鑰認(rèn)證方式來(lái)管理節(jié)點(diǎn)
創(chuàng)建秘鑰
[root@node1ansible]# ssh-keygen -t rsa -P ''
傳送至被管理控節(jié)點(diǎn)上去
ssh-copy-id-i .ssh/id_rsa.pub root@10.0.10.60
ssh-copy-id -i .ssh/id_rsa.pub root@10.0.10.62
ssh-copy-id -i .ssh/id_rsa.pub root@10.0.10.61 #因?yàn)楸镜匾彩潜槐O(jiān)控節(jié)點(diǎn)之一
嘗試ansible是否可用
先來(lái)man一下幫助手冊(cè)
ANSIBLE(1) System administration commands ANSIBLE(1)
NAME
ansible - run acommand somewhere else
SYNOPSIS #使用格式
ansible <host-pattern> [-f forks] [-mmodule_name] [-a args]
主機(jī)模式,可以使用通配
-f forks 表示我們可以明確指明啟動(dòng)多少個(gè)子進(jìn)程去連接這些主機(jī)默認(rèn)不定義為5個(gè)forks,如果節(jié)點(diǎn)比較多,可以將forks參數(shù)調(diào)大
-m 指定使用的模塊,每個(gè)模塊都需要接受特定參數(shù)
-a 來(lái)指定使用參數(shù)
比如我們想讓所有主機(jī)顯示當(dāng)前系統(tǒng)時(shí)間
[root@node1 ~]#ansible all -m command -a 'date'
10.0.10.61 | success | rc=0 >>
Thu May 1 18:49:18 CST 2014
10.0.10.60 | success | rc=0 >>
Mon Apr 28 22:17:58 CST 2014
10.0.10.62 | success | rc=0 >>
Thu May 1 02:49:58 CST 2014
-m command 為指定模塊,默認(rèn)為command,如果默認(rèn)執(zhí)行命令的話,可以不加這個(gè)模塊,如下所示
[root@node1 ~]#ansible all -a 'date'
10.0.10.60 | success | rc=0 >>
Mon Apr 28 22:18:06 CST 2014
10.0.10.62 | success | rc=0 >>
Thu May 1 02:50:05 CST 2014
10.0.10.61 | success | rc=0 >>
Thu May 1 18:49:27 CST 2014
可以看到,時(shí)間不同步,但是命令是同時(shí)進(jìn)行的,因?yàn)闀?huì)發(fā)起N個(gè)子進(jìn)程分別與每個(gè)被監(jiān)控節(jié)點(diǎn)進(jìn)行交互的
如果節(jié)點(diǎn)比較多,可以將forks參數(shù)調(diào)大
現(xiàn)在期望多個(gè)節(jié)點(diǎn)自動(dòng)的去ntp服務(wù)器同步時(shí)間
[root@node1 ~]#ansible all -a 'crontab -l'
10.0.10.60 | FAILED | rc=1 >>
no crontab for root
10.0.10.62 | success | rc=0 >>
00 * * * * ntpdate time.windows.com
10.0.10.61 | FAILED | rc=1 >>
no crontab for root
可以看到只有一個(gè)節(jié)點(diǎn)存在,那么我們只要同步其余兩臺(tái)機(jī)器即可
定義單獨(dú)組
[root@node1ansible]# cat hosts
[hac]
10.0.10.62
10.0.10.61
10.0.10.60
[crontab]
10.0.10.61
10.0.10.60
首先先來(lái)手動(dòng)同步
[root@node1ansible]# ansible crontab -a 'ntpdate time.windows.com'
10.0.10.60 | success | rc=0 >>
30 Apr 18:57:02 ntpdate[2079]: step time server 65.55.56.206 offset160320.206233 sec
10.0.10.61 | success | rc=0 >>
30 Apr 18:57:02 ntpdate[3619]: step time server 65.55.56.206 offset-86361.207014 sec
將時(shí)間同步加入計(jì)劃任務(wù),我們可以使用命令追加的方式來(lái)寫(xiě)入計(jì)劃任務(wù)
[root@node1ansible]# ansible crontab -a 'echo '00 * * * * * ' >>/var/spool/cron/root'
這樣一來(lái)可以實(shí)現(xiàn),但是實(shí)在是太麻煩了,為此,ansible有專門(mén)計(jì)劃任務(wù)管理的模塊,可以使用內(nèi)置模塊來(lái)實(shí)現(xiàn)以最簡(jiǎn)單的命令方式來(lái)輕松批量管理
定義crontab的參數(shù)有很多,可以在官方去查找?guī)椭臋n,這里不再一一介紹
明確指定crontab組,-m指定cron模塊 -a指定參數(shù)
[root@node1 ansible]# ansible crontab -m cron-a 'name="sync time from time.windows.com" minute='*/3'job="/usr/sbin/ntpdate time.windows.com" '
10.0.10.60 | success >> {
"changed": true,
"jobs": [
"sync time fromtime.windows.com"
]
}
10.0.10.61 | success >> {
"changed": true,
"jobs": [
"sync time fromtime.windows.com"
]
}
[root@node1 ansible]# ansible all -a 'crontab -l'
10.0.10.60 | success | rc=0 >>
#Ansible: sync time from time.windows.com
*/3 * * * * /usr/sbin/ntpdate time.windows.com
10.0.10.62 | success | rc=0 >>
00 * * * * ntpdate time.windows.com
10.0.10.61 | success | rc=0 >>
#Ansible: sync time from time.windows.com
*/3 * * * * /usr/sbin/ntpdate time.windows.com
參數(shù)說(shuō)明:
name=sync time from time.windows" 這是任務(wù)的名稱注釋會(huì)寫(xiě)到crontab里面去,也可以不指定,效果如下所示
[root@node1ansible]# crontab -l
#Ansible:sync time from time.windows.com #因此上面多了一個(gè)注釋信息
*/3 * * * */usr/sbin/ntpdate time.windows.com
minute='*/3 我們這里只需要關(guān)注分鐘,只需要提供分鐘的定義,省去的統(tǒng)統(tǒng)默認(rèn)為*
job="/usr/sbin/ntpdate time.windows.com" 此為我們定義的計(jì)劃任務(wù)執(zhí)行的命令
使用ansible批量安裝程序
我們工作場(chǎng)景中,如果想安裝程序的話,只要我們的yum源無(wú)問(wèn)題,那么則可以完全使用yum來(lái)安裝
那我們來(lái)man一下其模塊
man的使用方法比較獨(dú)特如果想man查看ansible模塊的話必須加符號(hào).
[root@node1ansible]# man ansible.yum
安裝vsftpd服務(wù)
[root@node1ansible]# ansible crontab -m yum -a'name=vsftpd state=present'
state=present 狀態(tài)判斷其是安裝還是卸載的,這里也可以使用install
[root@node1ansible]# ansible crontab -m yum -a'name=vsftpd state=present'
10.0.10.61 | success >> {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror,refresh-packagekit, security\nLoading mirror speeds from cached hostfile\n *base: mirror.neu.edu.cn\n * epel: ftp6.sjtu.edu.cn\n * extras: mirror.neu.edu.cn\n* updates: mirror.neu.edu.cn\nSetting up Install Process\nResolvingDependencies\n--> Running transaction check\n---> Package vsftpd.x86_640:2.2.2-11.el6_4.1 will be installed\n--> Finished DependencyResolution\n\nDependencies Resolved\n\n================================================================================\nPackage Arch Version Repository Size\n================================================================================\nInstalling:\nvsftpd x86_64 2.2.2-11.el6_4.1 base 151 k\n\nTransactionSummary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 151 k\nInstalled size: 331 k\nDownloadingPackages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction TestSucceeded\nRunning Transaction\n\r Installing :vsftpd-2.2.2-11.el6_4.1.x86_64 1/1 \n\r Verifying : vsftpd-2.2.2-11.el6_4.1.x86_64 1/1 \n\nInstalled:\n vsftpd.x86_64 0:2.2.2-11.el6_4.1 \n\nComplete!\n"
]
}
10.0.10.60 | success >> {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror,security\nLoading mirror speeds from cached hostfile\n * base:mirrors.btte.net\n * extras: mirrors.btte.net\n * updates:mirrors.btte.net\nSetting up Install Process\nResolving Dependencies\n-->Running transaction check\n---> Package vsftpd.x86_64 0:2.2.2-11.el6_4.1will be installed\n--> Finished Dependency Resolution\n\nDependenciesResolved\n\n================================================================================\nPackage Arch Version Repository Size\n================================================================================\nInstalling:\nvsftpd x86_64 2.2.2-11.el6_4.1 base 151 k\n\nTransactionSummary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 151 k\nInstalled size: 331 k\nDownloadingPackages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction TestSucceeded\nRunning Transaction\n\r Installing :vsftpd-2.2.2-11.el6_4.1.x86_64 1/1 \n\r Verifying :vsftpd-2.2.2-11.el6_4.1.x86_64 1/1 \n\nInstalled:\n vsftpd.x86_640:2.2.2-11.el6_4.1 \n\nComplete!\n"
]
}
對(duì)于ansible來(lái)講的話,很難生成yum配置文件,但可以使用wget將其批量下載
#可以看到只有定義個(gè)沒(méi)用裝,因?yàn)楸緛?lái)就沒(méi)有安裝。。
[root@node1ansible]# ansible all -a 'rpm -q vsftpd'
10.0.10.62 | FAILED | rc=1 >>
package vsftpd is not installed
10.0.10.60 | success | rc=0 >>
vsftpd-2.2.2-11.el6_4.1.x86_64
10.0.10.61 | success | rc=0 >>
vsftpd-2.2.2-11.el6_4.1.x86_64
使其服務(wù)批量啟動(dòng)
[root@node1ansible]# ansible crontab -a '/etc/init.d/vsftpd start'
10.0.10.60 | success | rc=0 >>
Starting vsftpd for vsftpd: [ OK ]
10.0.10.61 | success | rc=0 >>
Starting vsftpd for vsftpd: [ OK ]
再查看端口是否被監(jiān)聽(tīng)
[root@node1ansible]# ansible crontab -a 'netstat -lnt ' | grep 21
tcp 0 00.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 00.0.0.0:21 0.0.0.0:* LISTEN
以上,為absible的簡(jiǎn)單配置與使用,謝謝大家。