一、搭建一套自動以運維工具Cobbler系統;php
1、PXE 簡述及介紹html
預啓動執行環境(Preboot eXecution Environment,PXE,也被稱爲預執行環境)是讓計算機經過網卡獨立地使用數據設備(如硬盤)或者安裝操做系統。PXE當初是做爲Intel的有線管理體系的一部分,Intel和 Systemsoft於1999年9月20日公佈其規格(版本2.1)。經過使用像網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協定(DHCP)、小型文件傳輸協議(TFTP)等幾種網絡協議和全局惟一標識符(GUID)、通用網絡驅動接口(UNDI)、通用惟一識別碼(UUID)的概念並經過對客戶機(經過PXE自檢的電腦)固件擴展預設的API來實現目的。PXE 客戶機(client)這個術語是指機器在PXE啓動過程當中的角色。一個PXE 客戶機(client)能夠是一臺服務器、桌面級電腦、筆記本電腦或者其餘裝有PXE啓動代碼的機器。前端
客戶機的固件爲接受到可用的PXE啓動服務器,要在網絡中嘗試找出PXE重定向服務(DHCP代理)。在分析返回的包後,固件會向合適的啓動服務器詢問網絡自檢程序(NBP)的路徑,而且經過TFTP協議下載到電腦的內存中,有可能會去校驗它,最後執行它。當只有所有的PXE 客戶機(client)只使用一個NBP時,所有的PXE 客戶機可能會被指定是用BOOTP協議,從而不須要DHCP代理,可是仍然須要TFTP啓動服務。python
PXE 協議大體上結合了DHCP和TFTP,雖然都有在二者上面有改進。DHCP用於查找合適的啓動服務器,TFTP用於下載初始引導程序和附加文件。爲了開始一個PXE自檢會話,PXE固件廣播一個帶有明確的PXE選項DHCPDISCOVER包(擴展DHCPDISCOVER)到67/UDP端口(DHCP服務器端口)。PXE選項是PXE固件有PXE能力的鑑定,可是會被通常的DHCP服務忽略。當固件受到從這樣的服務受到DHCPOFFER包時,它會經過要求其提供配置信息來自我配置。mysql
當 PXE 重定向服務 (DHCP代理) 收到一個 擴展DHCPDISCOVER 包時,它會經過發送一個帶有明確的PXE選項DHCPDISCOVER包到PXE客戶機的68/UDP端口 (DHCP 客戶機端口)來回答。 一個擴展DHCPDISCOVER包主要包含:linux
1)一個PXE發現控制領域,以決定是使用多播,廣播(網路)或單播來聯繫PXE啓動服務器。 ios
2)一個列出可用的PXE啓動服務器類型的地址表。 git
3)一個表明每一個一個PXE啓動服務器類型的條目單。 github
4)一個帶有帶有提示用戶按下哪個鍵來看到啓動菜單的PXE啓動菜單。 web
5)一個超過多長時間就啓動第一啓動菜單的超時數值。
一個DHCP代理服務可能在相同的主機上運行一個標準的DHCP服務器。儘管兩個服務不能夠共享67/UDP 端口,DHCP代理服務在4011/UDP 端口上運行,要求從客戶端來的DHCPDISCOVER 包變成DHCPREQUEST 包。標準DHCP服務在其發送的DHCPOFFER 包中加入特殊的PXE 選項組合,這樣PXE客戶端知道能夠在同一個主機的 4011/UDP 端口找到一個DHCP代理服務。
和一個正在啓動系統的啓動服務聯繫必須有一個IP地址(可能來自DHCP服務)。經過多播或單播一個帶有特殊的PXE選項的 DHCPREQUEST 包(擴展DHCPREQUEST包)到 4011/UDP端口,或者廣播(網路)這種包到 67/UDP端口。這種包包含有PXE啓動服務類型和PXE啓動層,一個守護進程容許運行多個啓動服務類型。 一個擴展 DHCPREQUEST包多是一個DHCPINFORM包。下面是PXE具體工做原理圖,
簡單總結一下:
PXE Client發送廣播包請求DHCP分配IP地址DHCP
Server回覆請求,給出IP地址以及Boot
Server的地址PXE下載引導文件執行引導程序
2、Kickstart 概述
Kickstart 組成
Kickstart 安裝選項,包含語言的選擇,防火牆,密碼,網絡,分區的設置等;
%Pre 部分,安裝前解析的腳本,一般用來生成特殊的ks配置,好比由一段程序決定磁盤分區等;
%Package 部分,安裝包的選擇,能夠是 @core 這樣的group的形式,也能夠是這樣 vim-* 包的形式;
%Post 部分,安裝後執行的腳本,一般用來作系統的初始化設置。好比啓動的服務,相關的設定等。
3、Cobbler 簡介
一、Cobbler 概述
Cobbler由python語言開發,是對PXE和Kickstart以及DHCP的封裝。融合不少特性,提供了CLI和Web的管理形式。更加方便的實行網絡安裝。同時,Cobbler也提供了API接口,使用其它語言也很容易作擴展。它不緊能夠安裝物理機,同時也支持kvm、xen虛擬化、Guest OS的安裝。更多的是它還能結合Puppet等集中化管理軟件,實現自動化的管理。
二、新舊對比
之前自動化安裝系統得先設置一個網絡環境,但是設置網絡環境涉及到許多步驟,才能爲開始安裝系統作好準備。你必須:
配置服務,好比 DHCP、TFTP、DNS、HTTP、FTP 和 NFS;
在 DHCP 和 TFTP 配置文件中填入各個客戶端機器的信息;
建立自動部署文件(好比 kickstart 和 autoinst);
將安裝媒介解壓縮到 HTTP/FTP/NFS 存儲庫中。
這個過程並不簡單,並且手動註冊每一個必須配置的客戶端機器可能很麻煩。對配置一臺機器的任何參數更改(好比要使用一個不一樣的操做系統),都須要對配置進行手動干預,並有可能對自動部署文件進行手動干預。當機器數量增長時,若是不高度重視文件組織的條理性,TFTP 目錄等元素就可能變得混亂。
Cobbler 經過爲機器配置的全部方面建立一箇中央管理點,從而解決了這些不足。Cobbler 可從新配置服務,建立存儲庫,解壓縮操做系統媒介,代理或集成一個配置管理系統,控制電源管理等。Cobbler 建立了一個抽象層,您可在其中運行 「add new repository」 或 「change client machine operating system」 等命令。Cobbler 負責處理全部事情:建立或更新配置文件,從新啓動服務,或者將媒介解壓到新建立的目錄中。它的目的是隱藏全部與系統相關的問題,以便您可專一於任務自己。
三、Cobbler 提供的功能
使用 Cobbler,您無需進行人工干預便可安裝機器。Cobbler 設置一個 PXE 引導環境(它還可以使用 yaboot 支持 PowerPC),並控制與安裝相關的全部方面,好比網絡引導服務(DHCP 和 TFTP)與存儲庫鏡像。當但願安裝一臺新機器時,Cobbler 能夠:
使用一個之前定義的模板來配置 DHCP 服務(若是啓用了管理 DHCP) 將一個存儲庫(yum 或 rsync)創建鏡像或解壓縮一個媒介,以註冊一個新操做系統 在 DHCP 配置文件中爲須要安裝的機器建立一個條目,並使用您指定的參數(IP 和 MAC 地址) 在 TFTFP 服務目錄下建立適當的 PXE 文件 從新啓動 DHCP 服務以反映更改 從新啓動機器以開始安裝(若是電源管理已啓用)
Cobbler 支持衆多的發行版:Red Hat、Fedora、CentOS、Debian、Ubuntu 和 SuSE。當添加一個操做系統(一般經過使用 ISO 文件)時,Cobbler 知道如何解壓縮合適的文件並調整網絡服務,以正確引導機器。
Cobbler 可以使用 kickstart 模板。基於 Red Hat 或 Fedora 的系統使用 kickstart 文件來自動化安裝流程。經過使用模板,您就會擁有基本的 kickstart 模板,而後定義如何針對一種配置文件或機器配置而替換其中的變量。例如,一個模板可能包含兩個變量 $domain和 $machine_name。在 Cobbler 配置中,一個配置文件指定 domain=mydomain.com,而且每臺使用該配置文件的機器在machine_name 變量中指定其名稱。該配置文件中的全部機器都使用相同的 kickstart 安裝且針對 domain=mydomain.com 進行配置,但每臺機器擁有其本身的機器名稱。您仍然可使用 kickstart 模板在不一樣的域中安裝其餘機器並使用不一樣的機器名稱。
爲了協助管理系統,Cobbler 可經過 fence scripts 鏈接到各類電源管理環境。Cobbler 支持 apc_snmp、bladecenter、bullpap、drac、ether_wake、ilo、integrity、ipmilan、ipmitool、lpar、rsa、virsh 和 wti。要從新安裝一臺機器,可運行 reboot system foo命令,並且 Cobbler 會使用必要的憑據和信息來爲您運行恰當的 fence scripts(好比機器插槽數)。
除了這些特性,還可以使用一個配置管理系統 (CMS)。您有兩種選擇:該工具內的一個內部系統,或者集成一個現有的外部 CMS,好比 Chef 或 Puppet。藉助內部系統,您能夠指定文件模板,這些模板會依據配置參數進行處理(與 kickstart 模板的處理方式同樣),而後複製到您指定的位置。若是必須自動將配置文件部署到特定機器,那麼此功能頗有用。
使用 koan 客戶端,Cobbler 可從客戶端配置虛擬機並從新安裝系統。
4、Cobbler 組成
Cobbler 的配置結構基於一組註冊的對象。每一個對象表示一個與另外一個實體相關聯的實體(該對象指向另外一個對象,或者另外一個對象指向該對象)。當一個對象指向另外一個對象時,它就繼承了被指向對象的數據,並可覆蓋或添加更多特定信息。如下對象類型的定義爲:
發行版:表示一個操做系統。它承載了內核和 initrd 的信息,以及內核參數等其餘數據。
配置文件:包含一個發行版、一個 kickstart 文件以及可能的存儲庫,還包含更多特定的內核參數等其餘數據。
系統:表示要配給的機器。它包含一個配置文件或一個鏡像,還包含 IP 和 MAC 地址、電源管理(地址、憑據、類型)以及更爲專業的數據等信息。
存儲庫:保存一個 yum 或 rsync 存儲庫的鏡像信息。
鏡像:可替換一個包含不屬於此類別的文件的發行版對象(例如,沒法分爲內核和 initrd 的對象)。
基於註冊的對象以及各個對象之間的關聯,Cobbler 知道如何更改文件系統以反映具體配置。由於系統配置的內部是抽象的,因此您能夠僅關注想要執行的操做。下面是Cobbler各對象之間的關係圖,
5、Cobbler 工做原理
下面咱們來簡單的說明一下,
Server端:
第一步,啓動Cobbler服務 第二步,進行Cobbler錯誤檢查,執行cobbler check命令 第三步,進行配置同步,執行cobbler sync命令 第四步,複製相關啓動文件文件到TFTP目錄中 第五步,啓動DHCP服務,提供地址分配 第六步,DHCP服務分配IP地址 第七步,TFTP傳輸啓動文件 第八步,Server端接收安裝信息 第九步,Server端發送ISO鏡像與Kickstart文件
Client端:
第一步,客戶端以PXE模式啓動 第二步,客戶端獲取IP地址 第三步,經過TFTP服務器獲取啓動文件 第四步,進入Cobbler安裝選擇界面 第五步,客戶端肯定加載信息 第六步,根據配置信息準備安裝系統 第七步,加載Kickstart文件 第八步,傳輸系統安裝的其它文件 第九步,進行安裝系統
6、搭建使用Cobbler
一、安裝cobbler
]# yum install dhcp tftp rsync xinetd httpd cobbler -y
啓動服務:
]# service cobblerd start
]# service httpd start
檢查配置執行:
]# cobbler check Traceback (most recent call last): File "/usr/bin/cobbler", line 36, in sys.exit(app.main()) File "/usr/lib/python2.6/site-packages/cobbler/cli.py", line 657, in main rc = cli.run(sys.argv) File "/usr/lib/python2.6/site-packages/cobbler/cli.py", line 270, in run self.token = self.remote.login("", self.shared_secret) File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in __call__ return self.__send(self.__name, args) File "/usr/lib64/python2.6/xmlrpclib.py", line 1489, in __request verbose=self.__verbose File "/usr/lib64/python2.6/xmlrpclib.py", line 1253, in request return self._parse_response(h.getfile(), sock) File "/usr/lib64/python2.6/xmlrpclib.py", line 1392, in _parse_response return u.close() File "/usr/lib64/python2.6/xmlrpclib.py", line 838, in close raise Fault(**self._stack[0]) xmlrpclib.Fault:
報錯解決方法:
~]# service cobblerd restart Stopping cobbler daemon: [肯定] Starting cobbler daemon: [肯定] [root@example ~]# cobbler get-loaders task started: 2017-09-17_220217_get_loaders task started (id=Download Bootloader Content, time=Sun Sep 17 22:02:17 2017) downloading http://cobbler.github.com/loaders/README to /var/lib/cobbler/loaders/README downloading http://cobbler.github.com/loaders/COPYING.elilo to /var/lib/cobbler/loaders/COPYING.elilo downloading http://cobbler.github.com/loaders/COPYING.yaboot to /var/lib/cobbler/loaders/COPYING.yaboot downloading http://cobbler.github.com/loaders/COPYING.syslinux to /var/lib/cobbler/loaders/COPYING.syslinux downloading http://cobbler.github.com/loaders/elilo-3.8-ia64.efi to /var/lib/cobbler/loaders/elilo-ia64.efi downloading http://cobbler.github.com/loaders/yaboot-1.3.17 to /var/lib/cobbler/loaders/yaboot downloading http://cobbler.github.com/loaders/pxelinux.0-3.86 to /var/lib/cobbler/loaders/pxelinux.0 downloading http://cobbler.github.com/loaders/menu.c32-3.86 to /var/lib/cobbler/loaders/menu.c32 downloading http://cobbler.github.com/loaders/grub-0.97-x86.efi to /var/lib/cobbler/loaders/grub-x86.efi downloading http://cobbler.github.com/loaders/grub-0.97-x86_64.efi to /var/lib/cobbler/loaders/grub-x86_64.efi *** TASK COMPLETE ***
在檢查配置:
]# cobbler check The following are potential configuration items that you may want to fix: 1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work. This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it. 2 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network. 3 : change 'disable' to 'no' in /etc/xinetd.d/tftp 4 : change 'disable' to 'no' in /etc/xinetd.d/rsync 5 : debmirror package is not installed, it will be required to manage debian deployments and repositories 6 : ksvalidator was not found, install pykickstart 7 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one 8 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them Restart cobblerd and then run 'cobbler sync' to apply changes.
上面這段信息大意就是:
編輯/etc/cobbler/settings文件,找到 server選項,修改成適當的ip地址,本實例配置ip爲:192.168.1.8 編輯/etc/cobbler/settings文件,找到 next_server選項,修改成適當的ip地址,本實例配置ip爲:192.168.1.8 編輯/etc/xinetd.d/tftp文件,將文件中的disable字段的配置由yes改成no 編輯/etc/xinetd.d/rsync文件,將文件中的disable字段的配置由yes改成no 提示說debmirror沒安裝。若是不是安裝 debian之類的系統,此提示能夠忽略。 ksvalidator沒有被發現,安裝pykickstart 修改cobbler用戶的默認密碼,可使用以下命令生成密碼,並使用生成後的密碼替換/etc/cobbler/settings中的密碼。 fencing tools未安裝。
操做以下:
[root@example ~]# vim /etc/cobbler/settings server: 192.168.1.8 next_server: 192.168.1.8 [root@example ~]# vim /etc/xinetd.d/tftp disable=no [root@example ~]# vim /etc/xinetd.d/rsync disable=no [root@example ~]# yum install -y pykickstart [root@proxy ~]# openssl passwd -1 -salt `openssl rand -hex 4`Password: $1$76f29b0d$R3nuR/TTUJexv9cWb.QsI1 [root@example ~]# vim /etc/cobbler/settings default_password_crypted: "$1$76f29b0d$R3nuR/TTUJexv9cWb.QsI1" [root@example ~]# yum install fence-agents -y
重啓服務並檢測:
[root@example ~]# /etc/init.d/cobblerd restart [root@example ~]# /etc/init.d/xinetd restart [root@example ~]# cobbler check The following are potential configuration items that you may want to fix: 1 : debmirror package is not installed, it will be required to manage debian deployments and repositories Restart cobblerd and then run 'cobbler sync' to apply changes. 二、添加distro(distribution): [root@example ~]# mount /dev/cdrom /mnt/ -r [root@example ~]# cobbler import --path=/mnt/ --name=CentOS-6.6 --arch=x86_64 task started: 2017-09-17_222129_import task started (id=Media import, time=Sun Sep 17 22:21:29 2017) Found a candidate signature: breed=redhat, version=rhel6 Found a matching signature: breed=redhat, version=rhel6 Adding distros from path /var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64: creating new distro: CentOS-6.6-X86_64-x86_64 trying symlink: /var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64 -> /var/www/cobbler/links/CentOS-6.6-X86_64-x86_64 creating new profile: CentOS-6.6-X86_64-x86_64 associating repos checking for rsync repo(s) checking for rhn repo(s) checking for yum repo(s) starting descent into /var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64 for CentOS-6.6-X86_64-x86_64 processing repo at : /var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64 need to process repo/comps: /var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64 looking for /var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64/repodata/*comps*.xml Keeping repodata as-is :/var/www/cobbler/ks_mirror/CentOS-6.6-X86_64-x86_64/repodata *** TASK COMPLETE ***
查看是否導入成功:
[root@example ~]# cobbler distro list CentOS-6.6-X86_64-x86_64
參數說明:
--name 爲安裝源定義一個名字
--arch 指定安裝源是32位仍是64位、ia64, 目前支持的選項有: x86│x86_64│ia64
注意: 這個安裝源的惟一標示 就是根據這兩個參數來定義 本例導入成功後,安裝源的惟一標示就是:centos6.3-x86_64 ,若是重複,系統會提示導入失敗。
三、配置dhcp服務
[root@example ~]# vim /etc/cobbler/settings manage_dhcp: 1 [root@example ~]# mv /etc/cobbler/dhcp.template{,.bak} [root@example ~]# vim /etc/cobbler/dhcp.template subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option domain-name-servers 192.168.1.1; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.1.30 192.168.1.100; default-lease-time 21600; max-lease-time 43200; next-server $next_server; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; if option pxe-system-type = 00:02 { filename "ia64/elilo.efi"; } else if option pxe-system-type = 00:06 { filename "grub/grub-x86.efi"; } else if option pxe-system-type = 00:07 { filename "grub/grub-x86_64.efi"; } else { filename "/pxelinux.0"; } } } [root@example ~]# /etc/init.d/xinetd restart
同步cobbler配置
[root@example ~]
# cobbler sync
task started: 2017-09-17_223050_sync
task started (
id
=Sync,
time
=Sun Sep 17 22:30:50 2017)
running pre-
sync
triggers
cleaning trees
removing:
/var/
www
/cobbler/p_w_picpaths/CentOS-6
.6-X86_64-x86_64
removing:
/var/lib/tftpboot/pxelinux
.cfg
/default
removing:
/var/lib/tftpboot/grub/p_w_picpaths
removing:
/var/lib/tftpboot/grub/efidefault
removing:
/var/lib/tftpboot/p_w_picpaths/CentOS-6
.6-X86_64-x86_64
removing:
/var/lib/tftpboot/s390x/profile_list
copying bootloaders
trying hardlink
/var/lib/cobbler/loaders/pxelinux
.0 ->
/var/lib/tftpboot/pxelinux
.0
trying hardlink
/var/lib/cobbler/loaders/menu
.c32 ->
/var/lib/tftpboot/menu
.c32
trying hardlink
/var/lib/cobbler/loaders/yaboot
->
/var/lib/tftpboot/yaboot
trying hardlink
/var/lib/cobbler/loaders/grub-x86
.efi ->
/var/lib/tftpboot/grub/grub-x86
.efi
trying hardlink
/var/lib/cobbler/loaders/grub-x86_64
.efi ->
/var/lib/tftpboot/grub/grub-x86_64
.efi
copying distros to tftpboot
copying files
for
distro: CentOS-6.6-X86_64-x86_64
trying hardlink
/var/
www
/cobbler/ks_mirror/CentOS-6
.6-X86_64-x86_64
/p_w_picpaths/pxeboot/vmlinuz
->
/var/lib/tftpboot/p_w_picpaths/CentOS-6
.6-X86_64-x86_64
/vmlinuz
trying hardlink
/var/
www
/cobbler/ks_mirror/CentOS-6
.6-X86_64-x86_64
/p_w_picpaths/pxeboot/initrd
.img
->
/var/lib/tftpboot/p_w_picpaths/CentOS-6
.6-X86_64-x86_64
/initrd
.img
copying p_w_picpaths
generating PXE configuration files
generating PXE menu structure
copying files
for
distro: CentOS-6.6-X86_64-x86_64
trying hardlink
/var/
www
/cobbler/ks_mirror/CentOS-6
.6-X86_64-x86_64
/p_w_picpaths/pxeboot/vmlinuz
->
/var/
www
/cobbler/p_w_picpaths/CentOS-6
.6-X86_64-x86_64
/vmlinuz
trying hardlink
/var/
www
/cobbler/ks_mirror/CentOS-6
.6-X86_64-x86_64
/p_w_picpaths/pxeboot/initrd
.img
->
/var/
www
/cobbler/p_w_picpaths/CentOS-6
.6-X86_64-x86_64
/initrd
.img
Writing template files
for
CentOS-6.6-X86_64-x86_64
rendering TFTPD files
generating
/etc/xinetd
.d
/tftp
processing boot_files
for
distro: CentOS-6.6-X86_64-x86_64
cleaning link caches
running post-
sync
triggers
running python triggers from
/var/lib/cobbler/triggers/sync/post/
*
running python trigger cobbler.modules.sync_post_restart_services
running shell triggers from
/var/lib/cobbler/triggers/sync/post/
*
running python triggers from
/var/lib/cobbler/triggers/change/
*
running python trigger cobbler.modules.scm_track
running shell triggers from
/var/lib/cobbler/triggers/change/
*
*** TASK COMPLETE ***
cobbler會自動進行初始化工做,移除已經存在的啓動項,而後根據模板拷貝loader文件。以後再生成pxe的配置文件,生成dhcp的配置文件,最後再重啓dhcp服務。 至此,就可使用虛擬機來測試cobbler安裝了。 OK開啓真機或者虛擬機來測試注意開啓網絡引導 網卡要開啓PXE引導程序 。
配置啓動dhcp服務:
[root@example ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option domain-name-servers 192.168.1.1; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.1.121 192.168.1.125; filename "/pxelinux.0"; default-lease-time 21600; max-lease-time 43200; next-server 192.168.1.8; } [root@example ~]# service dhcpd restart
四、測試使用Cobbler
將啓動項改成網卡啓動
啓動服務後出現此界面:
默認安裝後查看系統:
五、添加profile
[root@example ~]# cd /var/lib/cobbler/kickstarts/ [root@example kickstarts]# cp sample_end.ks CentOS-6.6-X86_64-basic [root@example kickstarts]# cobbler profile add --name=CentOS-6.4-x86_64-basic --distro=CentOS-6.6-X86_64-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-6.6-X86_64-basic [root@example kickstarts]# cobbler sync
查看是否生成:
[root@example ~]# cobbler profile list CentOS-6.4-x86_64-basic CentOS-6.6-X86_64-x86_64
7、Cobbler相關選項說明
一、Cobbler 經常使用命令詳解
cobbler check #檢查cobbler配置 cobbler sync #同步配置到dhcp/pxe和數據目錄 cobbler list #列出全部的cobbler元素 cobbler import #導入安裝的系統鏡像 cobbler report #列出各元素的詳細信息 cobbler distro #查看導入的發行版系統信息 cobbler profile #查看配置信息 cobbler system #查看添加的系統信息 cobbler reposync #同步yum倉庫到本地
二、導入鏡像文件
命令:cobbler import --path=鏡像路徑 -- name=安裝引導名 --arch=32位或64位
參數: path 是鏡像所掛載的目錄 name 是導入到cobbler裏面顯示的名字 arch 是32位系統仍是64位系統
三、導入kickstart文件
命令:cobbler profile add --name=list名 --distro=鏡像 --kickstart=路徑
參數: name是表示添加的ks 的名字,用cobbler report能夠看到這個名字 distro 是用哪一個鏡像,list的distros裏面選擇一個,須要版本相對應 kickstart 是具體的 ks 文件路徑
四、同步DHCP、HTTPD
命令:cobbler sync
注,每次修改完dhcp.template之類的配置文件須要執行一次使其生效。
五、查看Cobbler列表
命令:cobbler list
注,列出Cobbler全部的元素。
六、刪除相關列表
命令:cobbler distro/profile remove --name=要刪除的引導文件名
刪除指定 distro , 也就是鏡像
刪除指定的 profile 文件,也就是 ks
七、Cobbler安裝後目錄說明
cobbler配置文件目錄/etc/cobbler:
/etc/cobbler/settings cobbler主配置文件 /etc/cobbler/iso/ iso模板配置文件 /etc/cobbler/pxe pxe模板文件 /etc/cobbler/power 電源的配置文件 /etc/cobbler/users.conf Web 服務受權配置文件 /etc/cobbler/users.digest 用於web訪問的用戶名密碼配置文件 /etc/cobbler/dhcp.template DHCP服務的配置模板 /etc/cobbler/dnsmasq.template DNS服務的配置模板 /etc/cobbler/tftpd.template tftp服務的配置模板 /etc/cobbler/modules.conf Cobbler模塊配置文件
cobbler數據目錄/var/lib/cobbler:
/var/lib/cobbler/config/ 用於存放distros、systems、profiles等信息配置文件 /var/lib/cobbler/triggers 用於存放用戶定義的cobbler 命令 /var/lib/cobbler/kickstarts/ 默認存放kickstart文件 /var/lib/cobbler/loaders 存放的各類引導程序
鏡像數據目錄/var/www/cobbler:
/var/www/cobbler/ks_mirror/ 導入的發行版系統的全部數據 /var/www/cobbler/p_w_picpaths/ 導入發行版的Kernel和initrd鏡像用於遠程網絡啓動 /var/www/cobbler/repo_mirror/ yum倉庫存儲目錄
日誌目錄 /var/log/cobbler/:
/var/log/cobbler/install.log 客戶端的安裝系統日誌 /var/log/cobbler/cobbler.log cobbler日誌
二、自動化運維工具ansible的應用示例。
一、Ansible基礎安裝
(1)、python2.7安裝
https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
# tar xvzf Python-2.7.8.tgz
# cd Python-2.7.8
# ./configure --prefix=/usr/local
# make --jobs=`grep processor/proc/cpuinfo | wc -l`
# make install
## 將python頭文件拷貝到標準目錄,以免編譯ansible時,找不到所需的頭文件
# cd /usr/local/include/python2.7
# cp -a ./* /usr/local/include/
## 備份舊版本的python,並符號連接新版本的python
# cd /usr/bin
# mv python python2.6
# ln -s /usr/local/bin/python
## 修改yum腳本,使其指向舊版本的python,已避免其沒法運行
# vim /usr/bin/yum
#!/usr/bin/python --> #!/usr/bin/python2.6
(2)、setuptools模塊安裝
https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
# tar xvzf setuptools-7.0.tar.gz
# cd setuptools-7.0
# python setup.py install
(3)、pycrypto模塊安裝
https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
# tar xvzf pycrypto-2.6.1.tar.gz
# cd pycrypto-2.6.1
# python setup.py install
(4)、PyYAML模塊安裝
http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
# tar xvzf yaml-0.1.5.tar.gz
# cd yaml-0.1.5
# ./configure --prefix=/usr/local
# make --jobs=`grep processor/proc/cpuinfo | wc -l`
# make install
https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
# tar xvzf PyYAML-3.11.tar.gz
# cd PyYAML-3.11
# python setup.py install
(5)、Jinja2模塊安裝
https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
# tar xvzf MarkupSafe-0.9.3.tar.gz
# cd MarkupSafe-0.9.3
# python setup.py install
https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
# tar xvzf Jinja2-2.7.3.tar.gz
# cd Jinja2-2.7.3
# python setup.py install
(6)、paramiko模塊安裝
https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz
# tar xvzf ecdsa-0.11.tar.gz
# cd ecdsa-0.11
# python setup.py install
https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz
# tar xvzf paramiko-1.15.1.tar.gz
# cd paramiko-1.15.1
# python setup.py install
(7)、simplejson模塊安裝
https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz
# tar xvzf simplejson-3.6.5.tar.gz
# cd simplejson-3.6.5
# python setup.py install
(8)、ansible安裝
https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
# tar xvzf ansible-1.7.2.tar.gz
# cd ansible-1.7.2
# python setup.py install
二、Ansible配置
(1)、SSH免密鑰登陸設置
## 生成公鑰/私鑰
# ssh-keygen -t rsa -P ''
## 寫入信任文件(將/root/.ssh/id_rsa_storm1.pub分發到其餘服務器,並在全部服務器上執行以下指令):
# cat /root/.ssh/id_rsa_storm1.pub >> /root/.ssh/authorized_keys
# chmod 600 /root/.ssh/authorized_keys
(2)、ansible配置
# mkdir -p /etc/ansible
# vim /etc/ansible/ansible.cfg
remote_port = 36000
private_key_file = /root/.ssh/id_rsa_storm1
## 主機組定義
# vim /etc/ansible/hosts
[storm_cluster]
10.223.55.100
10.223.55.101
10.223.38.226
10.223.38.227
10.223.39.216
10.223.25.123
(3)、簡單測試
# ansible storm_cluster -m command -a 'uptime'
說明:第一次運行時,須要輸入一下「yes」【進行公鑰驗證】,後續無需再次輸入。
## 再次運行
# ansible storm_cluster -m command -a 'uptime'
三、經常使用模塊使用
(1)、setup
## 用來查看遠程主機的一些基本信息
# ansible storm_cluster -m setup
(2)、ping
## 用來測試遠程主機的運行狀態
# ansible storm_cluster -m ping
(3)、file
## 設置文件的屬性
相關選項以下:
force:須要在兩種狀況下強制建立軟連接,一種是源文件不存在,但以後會創建的狀況下;另外一種是目標軟連接已存在,須要先取消以前的軟鏈,而後建立新的軟鏈,有兩個選項:yes|no
group:定義文件/目錄的屬組
mode:定義文件/目錄的權限
owner:定義文件/目錄的屬主
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效
src:被連接的源文件路徑,只應用於state=link的狀況
dest:被連接到的路徑,只應用於state=link的狀況
state:
directory:若是目錄不存在,就建立目錄
file:即便文件不存在,也不會被建立
link:建立軟連接
hard:建立硬連接
touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間
absent:刪除目錄、文件或者取消連接文件
示例:
## 遠程文件符號連接建立
# ansible storm_cluster -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
## 遠程文件信息查看
# ansible storm_cluster -m command -a "ls –al /tmp/resolv.conf"
## 遠程文件符號連接刪除
# ansible storm_cluster -m file -a "path=/tmp/resolv.conf state=absent"
## 遠程文件信息查看
# ansible storm_cluster -m command -a "ls -al /tmp/resolv.conf"
(4)、copy
## 複製文件到遠程主機
相關選項以下:
backup:在覆蓋以前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no
content:用於替代「src」,能夠直接設定指定文件的值
dest:必選項。要將源文件複製到的遠程主機的絕對路徑,若是源文件是一個目錄,那麼該路徑也必須是個目錄
directory_mode:遞歸設定目錄的權限,默認爲系統默認權限
force:若是目標主機包含該文件,但內容不一樣,若是設置爲yes,則強制覆蓋,若是爲no,則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes
others:全部的file模塊裏的選項均可以在這裏使用
src:被複制到遠程主機的本地文件,能夠是絕對路徑,也能夠是相對路徑。若是路徑是一個目錄,它將遞歸複製。在這種狀況下,若是路徑使用「/」來結尾,則只複製目錄裏的內容,若是沒有使用「/」來結尾,則包含目錄在內的整個內容所有複製,相似於rsync。
示例:
## 將本地文件「/etc/ansible/ansible.cfg」複製到遠程服務器
# ansible storm_cluster -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
## 遠程文件信息查看
# ansible storm_cluster -m command -a "ls -al /tmp/ansible.cfg"
(5)、command
## 在遠程主機上執行命令
相關選項以下:
creates:一個文件名,當該文件存在,則該命令不執行
free_form:要執行的linux指令
chdir:在執行指令以前,先切換到該目錄
removes:一個文件名,當該文件不存在,則該選項不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑
示例:
# ansible storm_cluster -m command -a "uptime"
(6)、shell
## 切換到某個shell執行指定的指令,參數與command相同。
與command不一樣的是,此模塊能夠支持命令管道,同時還有另外一個模塊也具有此功能:raw
示例:
## 先在本地建立一個SHELL腳本
# vim /tmp/rocketzhang_test.sh
#!/bin/sh
date +%F_%H:%M:%S
#chmod +x /tmp/rocketzhang_test.sh
## 將建立的腳本文件分發到遠程
# ansible storm_cluster -m copy -a "src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"
## 遠程執行
# ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"
(7)、更多模塊
其餘經常使用模塊,好比:service、cron、yum、synchronize就不一一例舉,能夠結合自身的系統環境進行測試。
service:系統服務管理
cron:計劃任務管理
yum:yum軟件包安裝管理
synchronize:使用rsync同步文件
user:系統用戶管理
group:系統用戶組管理
更多模塊能夠參考:
#ansible-doc –l
http://docs.ansible.com/modules_by_category.html
http://www.ansible.cn/docs/
(國內的一個鏡像站點,避免被牆 )
(8)、一些概念補充
playbook的組成:playbook是由一個或多個「play」組成的列表,可讓它們聯同起來按事先編排的機制執行;所謂task無非是調用ansible的一個module,而在模塊參數中可使用變量;模塊執行是冪等的,這意味着屢次執行是安全的,由於其結果均一致;
執行模型:task list中的各任務按次序逐個在hosts中指定的全部主機上執行,即在全部主機上完成第一個任務後再開始第二個。在順序運行某playbook時,若是中途發生錯誤,全部已執行任務都將回滾,所以,在修改playbook後從新執行一次便可;
task組成:每一個task都應該有其name,用於playbook的執行結果輸出,建議其內容儘量清晰地描述任務執行步驟。若是未提供name,則action的結果將用於輸出;
notify指定handler的執行機制:「notify」這個action可用於在每一個play的最後被觸發,在notify中列出的操做稱爲handler,僅在全部的變化發生完成後一次性地執行指定操做。
三、概述監控工具zabbix的工做原理,並從零構建一套完整的監控體系,實現短信、郵件等方式報警。
1、什麼是zabbix及優缺點(對比cacti和nagios)
Zabbix能監視各類網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各類問題。是一個基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級的開源解決方案。
agent端:主機經過安裝agent方式採集數據。
server端:經過收集agent發送的數據,寫入數據庫(MySQL,ORACLE等),再經過php+apache在web前端展現.
zabbix = cacti + nagios
優勢:基於兩款工具優勢於一身並更強大,實現企業級分佈式監控。
缺點:2.2版本帶寬佔用大可是升級到2.4版本後更節省了帶寬資源,其它再無發現。
2、監控功能
主機的性能監控、網絡設備性能監控、數據庫性能監控、多種告警方式、詳細的報表圖表繪製
監控主機zabbix有專用的agent,能夠監控Linux,Windows,FreeBSD等 。
監控網絡設備zabbix經過SNMP,ssh(很少用)
可監控對象
設備:服務器,路由器,交換機
軟件:OS,網絡,應用程序
主機性能指標監控
故障監控: down機,服務不可用,主機不可達
2、工做原理
一個監控系統運行的大概的流程是這樣的:
zabbix agent須要安裝到被監控的主機上,它負責按期收集各項數據,併發送到zabbix server端,zabbix server將數據存儲到數據庫中,zabbix web根據數據在前端進行展示和繪圖。這裏agent收集數據分爲主動和被動兩種模式:
主動:agent請求server獲取主動的監控項列表,並主動將監控項內須要檢測的數據提交給server/proxy
被動:server向agent請求獲取監控項的數據,agent返回數據。
3、zabbix監控環境中基本概念
一、主機(host):要監控的網絡設備,可由IP或DNS名稱指定;
二、主機組(host group):主機的邏輯容器,能夠包含主機和模板,但同一個組織內的主機和模板不能互相連接;主機組一般在給用戶或用戶組指派監控權限時使用;
三、監控項(item):一個特定監控指標的相關的數據;這些數據來自於被監控對象;item是zabbix進行數據收集的核心,相對某個監控對象,每一個item都由"key"標識;
四、觸發器(trigger):一個表達式,用於評估某監控對象的特定item內接收到的數據是否在合理範圍內,也就是閾值;接收的數據量大於閾值時,觸發器狀態將從"OK"轉變爲"Problem",當數據再次恢復到合理範圍,又轉變爲"OK";
五、事件(event):觸發一個值得關注的事情,好比觸發器狀態轉變,新的agent或從新上線的agent的自動註冊等;
六、動做(action):指對於特定事件事先定義的處理方法,如發送通知,什麼時候執行操做;
七、報警升級(escalation):發送警報或者執行遠程命令的自定義方案,如每隔5分鐘發送一次警報,共發送5次等;
八、媒介(media):發送通知的手段或者通道,如Email、Jabber或者SMS等;
九、通知(notification):經過選定的媒介向用戶發送的有關某事件的信息;
十、遠程命令(remote command):預約義的命令,可在被監控主機處於某特定條件下時自動執行;
十一、模板(template):用於快速定義被監控主機的預設條目集合,一般包含了item、trigger、graph、screen、application以及low-level discovery rule;模板能夠直接連接至某個主機;
十二、應用(application):一組item的集合;
1三、web場景(web scennario):用於檢測web站點可用性的一個活多個HTTP請求;
1四、前端(frontend):Zabbix的web接口;
前提條件:
(1) zabbix服務器端已經成功安裝而且運行。
(2) zabbix客戶端已經成功創建而且運行。
1 下載而且安裝msmtp軟件
Wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download
tar jxvf msmtp-1.4.32.tar.bz2
cd msmtp-1.4.32
./configure--prefix=/usr/local/msmtp
Make
Make install
二、手動創建配置文件,輸入外部smtp地址
mkdir –p /usr/local/msmtp/etc
vi /usr/local/msmtp/etc/msmtprc
添加如下內容
account default
host smtp.sohu.com #你的發送郵件服務器
port 25
from zabbix2014@sohu.com #要從哪一個郵箱發出
auth login
tls off
user zabbix2014 #郵箱用戶名
password xxxxx-xxx #郵箱密碼,若是你以爲不安全能夠把文件改成600屬性
logfile /var/log/mmlog
保存退出。
三、簡單測試一下
/usr/local/msmtp/bin/msmtp zabbix2014@sohu.com
hello,test
ctrl d
cat /usr/local/msmtp/msmtp.log 看看有沒有成功。
而後再到sohu郵箱中,看看信收到沒有
報錯以下
[root@cache-2 msmtp-1.4.32]# /usr/local/msmtp/bin/msmtp zabbix2014@sohu.com
msmtp: authentication failed (method LOGIN)
msmtp: server message: 535 5.7.0 Invalid result
msmtp: could not send mail (account default from /usr/local/msmtp/etc/msmtprc)
Google以後,須要安裝 mutt組件
四、下面開始安裝 MUTT若是是CentOS的話直接用yum就行了
yum install mutt
安裝完成後要手動給他創建一個配置文件,
vim /etc/Muttrc
setsendmail="/usr/local/msmtp/bin/msmtp" #你的msmtp命令路徑
set use_from=yes
set realname="zabbix2014@sohu.com"
set editor="vim"
簡單的4行就能夠了
好了,讓咱們來測試一下吧!
測試一下:echo"test mail" | mutt -s "test" zabbix2014@sohu.com
OK,測試了下,能收到已經發送的email,以下所示:
echo"test mail 2014 content tom 2" | mutt -s "test 2014 title2" zabbix2014@sohu.com
五、 建立 zabbix用於發送郵件的腳本
腳本放在什麼位置隨便,可是要保證zabbix能夠找到!
1)vim/usr/bin/zabbix2014,並寫入以下內容:
#!/bin/bash
echo "$3" | mutt -s "$2"$1 # $3表示郵件內容、$2表示郵件標題、$1表示收件人
(2)chmod a+x /usr/bin/zabbix2014
六、 zabbix配置
(1)建立meida types
1.登陸到zabbix,進入「Administration" >> 」Media types",點擊右上角「Create Media Type"。 Description填"mediatype-zabbix2014"或其它名稱,Type選擇"Script",Script填」 zabbix2014」。
2.點擊save保存.
七、建立actions
1.登陸到zabbix,進入"Configation" >> "Actions",點擊右上角"Create Actions"。輸入Name 「action-zabbix2014」 ,其它都默認點擊右側「Action Operations"下的"New"按鈕,"Operation Type"選擇"Send message","Send Message to"選擇一個或多個要發送消息的用戶組,」Send only to"選擇咱們以前新增的mediatype-zabbix2014。
2.點擊save保存.
八、zabbix用戶配置
登陸到zabbix, 進入"Adimistration" >>"Users",在以前選定要發送消息的組裏的Members欄位裏選擇一個用戶,例如選擇AdminZabbix用戶。
在用戶信息修改界面最下方的」Media"處點擊"Add"按鈕。
Type選擇"mediatype- zabbix2014",Send to填入收件人地址,點擊Add添加。
點擊"Save"保存配置。
9 測試驗證郵件發送功能是否正常。
PS:這個驗證報警的實現,請參考 http://blog.csdn.net/mchdba/article/details/24540017 裏面有描述mysql.ping_test是如何創建並生效的。
9.1 去stop服務器上的mysql服務,一會就應該會報警
[root@db-m2-slave-1~]# service mysql stop
Shutting downMySQL... [肯定]
可是沒有收到email,因此咱們須要去看events,是否有提示爲何會發不出email來。進去目錄Monitoring—> Events?Group(選All)?Host(選要監控的數據庫主機)?Source(選Trigger)。
點開最左邊一列的鏈接 17 Sun 2017 22:00:06 ,
看到提示:
/usr/local/zabbix/scripts/zabbix2014: [2] Nosuch file or directory
記得是放在 /usr/bin/zabbix2014 ,因此將腳本放在提示所須要的目錄上面,直接mv一下便可:
mv/usr/bin/zabbix2014 /usr/local/zabbix/scripts/zabbix2014
以後會看到新的報警PROBLEM信息,email已經發送出去了.
9.2 改email地址,改爲139郵箱,而且附帶免費短信報警功能實現。
進入目錄,Administration?Users? Zabbix administrators? Users (1)? AdminZabbix(最左邊一列)?Media(選擇中間的那一個欄目)—> mediatype-zabbix2014(選擇用Trigger所用的mediatype)?Edit(點擊進去修改)?Send to(後面的輸入框裏面填寫上139的email,好比xxx@139.com)
9.3 切換139郵箱來驗證發送短信功能
註冊139郵箱,打開email,stop以及start數據庫上面的mysql進程服務,就會收到報警email以及短信通知,報警email以下:
記得開啓短信提示功能,短信免費。
9.4 如何讓zabbix繼續發送報警信息直到恢復正常爲止。
進入目錄,Configuration->Hosts->選中主機->Trigger->Name(好比進入check_mysql_status)->在Multiple PROBLEM events generation一欄打勾,而後點擊Save便可。
10 總結:
第一次zabbix的郵件報警試驗成功了,折騰了數日,也諮詢了不少朋友,在此感謝他們,下面還有許多zabbix的深刻的東西須要繼續學習繼續專研。
附上網友北京醬油帝的建議,如何驗證trigger報警成功:
要想驗證trigger的有效性很簡單:
第一,trigger在monitor的界面有個events選項看到沒有,那裏面是能夠點擊機器ip的,你看你定義的trigger有沒有發生。
第二, 第二,若是trigger發生了,是要看腳本也就是media調用有沒有成功,若是成功了,最好在腳本里面加上日誌。
參考文章:http://bbs.hx95.com/read-htm-tid-181423.html