一、搭建一套自动以运维工具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