多台linux服务器的集中统一批量布署管理, 用什么工具最好呢? 由Linux系统中文网(Linux521.com)编辑收集整理,除Linux521注明原创文章外,其版权归原作者所有。如果您在学习中遇到问题欢迎在下面的评论中留言,我们会尽全力解答您的问题。
cfengine、 puppet、 func哪种会好些呢?
我看下网上介绍的这些资料吧
这些之后一一贴上相关的资料
cfengine 基本配置 文字太多跳转下面的页面查看 http://holy2010.blog.51cto.com/1086044/418063
配置管理工具Puppet简介、安装 (转)
本文转自:
前言:
系统管理员经常陷入一系列的重复任务中:如升级软件包、管理配置文件、系统服务、cron任务以及添加新的配置、修复错误等.这些任务通常是重复低 效的,解决这类任务的第一反应是让他们自动化,于是出现了定制脚本.
环境复杂,定制脚本和应用程序一再被重复开发,并且很难适合多种平台,灵活性和功 能也很难保证,于是像Puppet这样的自动化配置管理工具便出现了.
在开源世界里,有很多配置工具可供选择,这个领域一些关键的产品有:
Puppet():
- Ruby写成的配置管理工具,使用C/S架构,使用declarative language配置客户端.
Cfengine():
- 最先发布的开源配置工具之一,1993年发布,同样是C/S架构,通常应用于教育机构.
LCFG():
Bcfg2
- Python编写的C/S架构的配置管理工具,使用规格书和客户机响应配置目标主机.
SmartFrog(http://):
func()
本文档致力于描述使用Puppet管理你的主机、应用程序、后台程序和各种服务.
Puppet简介:
1. Puppet的用途
Puppet是开源的基于Ruby的系统配置管理工具,依赖于C/S的部署架构.主要开发者是Luke Kanies,遵循GPLv2版权协议.从1997年开始Kanies参与UNIX的系统管理工作,Puppet的开发源于这些经验.
对已有的配置工 具不甚满意,从2001年到2005年间,Kanies开始在Reductive实验室从事工具的开发.很快,Reductive实验室发布了他们的旗舰 产品——Puppet.
2. Pupput的特性
许多系统配置管理工具工作的方式非常类似,如cfengine.是什么让Puppet与众不同?
Puppet的语法允许你创建一个单独脚本,用来在你所有的目标主机上建立一个用户.所有的目标主机会依次使用适用于本地系统的语法解释和执行这个 模块.举例:如果这个配置是在Red Hat服务器上执行,建立用户使用useradd命令;如果这个配置是在FreeBSD主机上执行,使用的是adduser命令.
Puppet另一个卓越的地方是它的灵活性.源于开源软件的天性,你可以自由的获得Puppet的源码,如果你遇到问题并且有能力的话,你可以修改 或者加强Puppet的代码去适用于你的环境.另外,社区开发者和捐献者还在不断增强Puppet的功能.一个大的开发者和用户社区也致力于提供 Puppet的文档和技术支持.
Puppet也是易于扩展的.定制软件包的支持功能和特殊的系统环境配置能够快速简单的添加进Puppet的安装程序中.
3. Puppet的工作模式
Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作Puppet master).在需要管理的目标主机上安装puppet客户端软件(被称作Puppet Client).当客户端连接上Puppet master后,定义在Puppet master上的配置文件会被编译,然后在客户端上运行.每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况.如果有新的配置信息或 者配置信息已经改变,配置将会被重新编译并发布到各客户端执行.也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置.如果客户端的配置信 息被改变了,它可以从服务器获得原始配置进行校正.
4. Puppet的未来
,Puppet是一个年轻的工具,仍然处于开发和发展中.Puppet社区快速壮大,并且许多新的想法不断融入,促使开发、更新和模块每天都在 呈现.
安装配置:
1. Puppet在RedHat/CentOS系 统上安装
Puppet是基于Ruby写成的,安装前要准备好Ruby环境.在中心的Server上安装puppet-server包,并运行 puppetmasterd进程;在被管理机上安装puppet包,并运行puppetd进程.另外,在每台主机上配置好自己的hostname,之后每 台机器要以hostname区分.
1). 安装ruby环境:
yum install ruby ruby-rdoc
2). 安装puppet
Server端安装:
wget
rpm -Uvh epel-release-5-4.noarch.rpm
yum install puppet-server
chkconfig --level 2345 puppetmaster on
修改hosts,添加下面行:
Vi /etc/hosts
172.16.228.30 puppet.sina.com.cn puppet
172.16.228.29 web1.sina.com.cn web1
客户端安装:
wget
rpm -Uvh epel-release-5-4.noarch.rpm
yum install puppet
chkconfig --level 2345 puppet on
修改hosts,添加下面行:
Vi /etc/hosts
172.16.228.30 puppet.sina.com.cn puppet
172.16.228.29 web1.sina.com.cn web1
3). 启动puppet
Server端首次运行前,编辑/etc/puppet/manifests/site.pp文件,内容可以用最基本的:
# Create “/tmp/testfile” if it doesn’t exist.
class test_class {
file { “/tmp/testfile”:
ensure => present,
mode => 644,
owner => root,
group => root
}
}
# tell puppet on which client to run the class
node web1.sina.com.cn {
include test_class
}
启动Server端:
service puppetmaster start
启动客户端:
/etc/init.d/puppet once -v
这时客户机会去连server,但是连接是在ssl上的,而Server还没有sign过客户端的cert,客户机被断开.
到Server端执行:puppetca --list,会显示等待签名的客户端的主机名,执行:puppetca -sign <客户端主机名> 即可为其签名.
在Server端为web1.sian.com.cn授权:
puppetca --list
web1.sian.com.cn
puppetca --sign web1.sian.com.cn
这时再到客户机上启动puppetd,即可看到客户在正常地连接server,并且应用Server上为客户端定制的配置策略.
启动客户端:
/etc/init.d/puppet once -v
4). 测试:
也可以将日志直接打印到终端上进行测试:
Server端:puppetmasterd -d --no-daemonize -v --trace
客户端:puppetd --test --trace --debug
2. puppet配置文件
主配置文件(puppet.conf):
1). 配置文件命名空间:
main 通用配置选项
puppetd 客户端配置选项
puppetmasterd 服务端配置选项
2). main命名空间选项:
confdir 配置文件目录,默认在/etc/puppet
vardir 动态数据目录,默认在/var/lib/puppet
logdir 日志目录,默认在/var/log/log
rundir puppet PID目录,默认在/var/run/puppet
statedir state目录,默认在$vardir/state
statefile state文件,默认在$statedir/state.yaml
ssldir SSL证书目录,默认在$vardir/ssl
trace 发生错误时显示跟踪信息,默认false
filetimeout 检测配置文件状态改变的时间周期,单位秒,默认15秒
syslogfacility 指定syslog功能为user级,默认为daemon级
3). puppetmasterd命名空间选项:
user 后台进程执行的用户
group 后台进程执行的组
mainfestdir mainfests文件存储目录,默认为$confdir/mainfests
mainfest mainfest站点文件的名字,默认为site.pp
bindaddress 后台进程绑定的网卡地址接口
masterport 后台进程执行的端口,默认为8140
4). puppet命名空间选项:
server puppet puppet服务器名,默认为puppet
runinterval seconds puppet应用配置的时间间隔,默认1800秒(0.5小时)
puppetdlockfie file puppet lock文件位置,默认$statedir/puppetdlock
puppetport port 后台进程执行的端口,默认8139
文件服务配置文件(fileserver.conf):
[files]
path /var/lib/puppet/files
allow 121.14.1.*
allow 60.28.228.0/24
allow *.house.sina.com.cn
deny *.sina.com.cn
path定义文件存放路径,通过allow/deny来控制访问权限.
3. puppet命令集
1). puppet 用于执行用户所写独立的mainfests文件
# puppet -l /tmp/manifest.log manifest.pp
2). puppetd 运行在被管理主机上的客户端程序
# puppetd –server puppet.leju.com
3). puppetmasterd 运行在管理机上的服务器程序
# puppetmasterd
4). puppetca puppet认证程序
# puppetca -l
pclient.leju.com
# puppetca -s pclient.leju.com
5). puppetrun 用于连接客户端,强制运行本地配置文件
# puppetrun -p 10 –host host1 –host host2 -t remotefile -t webserver
6). filebucket 客户端用于发送文件到puppet file bucket的工具
# filebucket -b /tmp/filebucket /my/file
7). ralsh 转换配置信息到puppet配置代码
# ralsh user luke
user { ‘luke’:
home => ‘/home/luke’,
uid => ‘100′,
ensure => ‘present’,
comment => ‘Luke Kanies,,,’,
gid => ‘1000′,
shell => ‘/bin/bash’,
groups => ['sysadmin','audio','video','puppet']
}
8). puppetdoc 打印puppet参考文档
# puppetdoc -r type > /tmp/type_reference.rst
# puppetdoc –outputdir /tmp/rdoc –mode rdoc /path/to/manifests
# puppetdoc /etc/puppet/manifests/site.pp
官网 问题解答
例子
1、同步目录:
file {"/qeedoodb/setup/package":
source =>"puppet://$puppetserver/package",
recurse =>"true", #递归检索文件,同步目录时设为true
owner =>"root",
group =>"root",
mode =>"744",
purge =>"true", #保持和source完全一致.类似rsync的 --delete参数
}
2、同步文件:
file { "/qeedoodb/package/2.txt":
source => "puppet://$puppetserver/package/2.txt",
owner => "root",
group => "root",
mode => 0644,
}
需要配置/etc/puppet/fileserver.conf
[package]
path /etc/puppet/client_conf/package 存放同步文件的路径
allow * #指所有的IP都可访问
[code]
path /etc/puppet/client_conf/code
allow *
部署Func/Certmaster平台
转自刘天斯
http://blog.liuts.com/post/186/引用地址:
注意: 该地址仅在今日23:59:59之前有效 Func简介
Func是由红帽子公司以Fedora平台统一网络控制器 Func(Fedora Unified Network Controller),目的是为了解决这一系列统一管理监控问题而设计开发的系统管理基础框架. 它是一个能有效的简化我们多服务器系统管理工作的工具,它很容易学习、很容易使用、也很容易被扩展,它功能强大而我们只需要非常非常少的配置和维
Func分为master及slave两部分,master为主控端,slave为被控端.以下为两部分的安装配置说明
FUNC模块学习笔记
========================Func 2.5版本安装文档[Master]=========================
环境要求
Linux2.6内核
python2.5或以上(建议源码安装,系统自带的python2.3、2.4对func支持不好)
下载软件包
wget
wget
wget
安装
tar -zxvf pyOpenSSL-0.9.tar.gz
cd pyOpenSSL-0.9
/usr/local/bin/python setup.py install
tar -zxvf certmaster-0.25.tar.gz
cd certmaster-0.25
/usr/local/bin/python setup.py install
tar -zxvf func-0.25.tar.gz
cd func-0.25
/usr/local/bin/python setup.py install安装
ln -s /usr/local/bin/certmaster /usr/bin/certmaster
ln -s /usr/local/bin/certmaster-request /usr/bin/certmaster-request
ln -s /usr/local/bin/certmaster-ca /usr/bin/certmaster-ca
ln -s /usr/local/bin/certmaster-sync /usr/bin/certmaster-sync
ln -s /usr/local/bin/funcd /usr/bin/funcd
ln -s /usr/local/bin/func /usr/bin/func
ln -s /usr/local/bin/func-create-module /usr/bin/func-create-module
ln -s /usr/local/bin/func-inventory /usr/bin/func-inventory
ln -s /usr/local/bin/func-transmit /usr/bin/func-transmit
ln -s /usr/local/bin/func-build-map /usr/bin/func-build-map
配置
vi /etc/certmaster/certmaster.conf
[main]
autosign = no
listen_addr =
#证书交换通讯端口
listen_port = 1998
cadir = /etc/pki/certmaster/ca
cert_dir = /etc/pki/certmaster
certroot = /var/lib/certmaster/certmaster/certs
csrroot = /var/lib/certmaster/certmaster/csrs
cert_extension = cert
sync_certs = False
vi /etc/func/minion.conf
[main]
log_level = DEBUG
acl_dir = /etc/func/minion-acl.d
listen_addr =
#(Func通讯端口
listen_port = 1999
minion_name =
启动服务
service certmaster start
=============================2.5版本安装文档[slave]=========================
下载软件包
wget
wget
wget
安装
tar -zxvf pyOpenSSL-0.9.tar.gz
cd pyOpenSSL-0.9
/usr/local/bin/python setup.py install
tar -zxvf certmaster-0.25.tar.gz
cd certmaster-0.25
/usr/local/bin/python setup.py install
tar -zxvf func-0.25.tar.gz
cd func-0.25
/usr/local/bin/python setup.py install
ln -s /usr/local/bin/certmaster /usr/bin/certmaster
ln -s /usr/local/bin/funcd /usr/bin/funcd
配置
vi /etc/certmaster/certmaster.conf
[main]
autosign = no
listen_addr =
#与master端口保持一致
listen_port = 1998
cadir = /etc/pki/certmaster/ca
cert_dir = /etc/pki/certmaster
certroot = /var/lib/certmaster/certmaster/certs
csrroot = /var/lib/certmaster/certmaster/csrs
cert_extension = cert
sync_certs = False
vi /etc/certmaster/minion.conf
[main]
certmaster = func.master.server.com
#与master端口保持一致
certmaster_port = 1998
log_level = DEBUG
cert_dir = /etc/pki/certmaster
vi /etc/func/minion.conf
[main]
log_level = DEBUG
acl_dir = /etc/func/minion-acl.d
listen_addr =
#与master端口保持一致
listen_port = 1999
#slave主机名
minion_name =NN2007-08-048
启动服务
/sbin/chkconfig --level 345 certmaster on
/sbin/service certmaster start
/sbin/chkconfig --level 345 funcd on
/sbin/service funcd start
*安装完毕后一定要重启服务器操作系统,不然服务器端有时看不到该主机的证书请求.
=============================Master端常用操作==============================
func "*" call --forks="5" command run "date" 启用5个进程来执行date命令.
certmaster-ca --list 可以查看未签名的计算机名.
certmaster-ca --sign NN2004-02-008 对slave服务器进行签名(证书交换).
certmaster-ca --sign `certmaster-ca --list ` 如证书请求的服务器比较多,可以这样一下子搞定.
certmaster-ca -c NN2004-02-008 删除该主机证书
=============================防火墙配置==============================
Slave主机需对master开放1998(certmaster)、1999(func)端口
master需对所有Slave主机开放1998(certmaster)端口
在运维自动化管理框架方面一直在尝试,后来听说这方面已很早就已经有人在摸索了其中最早的就是cfengine,大概1993年就出现了,时至今日在实际运维中应用也非常广泛。相见恨晚啊,赶紧拿来测试下,通过近期的实践,发现它正是我一直以来想要的东西呵呵。同时还测试了puppet稍后放出测试笔记。
"cfengine是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。它的目标是使系统从任何状态收敛到一种理想状态。--摘自cfengine官网。
1 安装步骤
1.1 安装berkeley
wget
tar xzvf db-5.0.21.tar.gz
cd db-5.0.21
cd build_unix/
../dist/configure --prefix=/opt/Berkeley
sudo make && sudo make install
1.2 安装cfengine
cd ~
wget
tar xzvf cfengine-2.2.10.tar.gz
cd cfengine-2.2.10
sudo ./configure --prefix=/usr/local/cfengine --with-berkeleydb=/opt/Berkeley/
sudo make
sudo make install
sudo mkdir /var/cfengine
sudo mkdir /var/cfengine/bin
sudo mkdir /var/cfengine/inputs
sudo cp /usr/local/cfengine/sbin/cfagent /var/cfengine/bin
sudo cp /usr/local/cfengine/sbin/cfexecd /var/cfengine/bin
sudo cp /usr/local/cfengine/sbin/cfservd /var/cfengine/bin
sudo chown -R root:0 /var/cfengine
sudo chmod -R 755 /var/cfengine
可能需要
echo "/opt/Berkeley/lib/">~/Berkeley.conf
sudo cp ~/Berkeley.conf /etc/ld.so.conf.d/
sudo /sbin/ldconfig
1.3 测试
编辑文件
/var/cfengine/inputs/cfagent.conf
=================================
Control:
actionsequence = ( shellcommands )
shellcommands:
"/bin/echo Hello World!"
=================================
>Sudo /usr/local/cfengine/sbin/cfkey #生成密钥
>sudo /var/cfengine/bin/cfagent -f /var/cfengine/inputs/cfagent_doc.conf
cfengine:gateway:/bin/echo Hello: Hello World!
2 程序结构及工作原理简介:
2.1 安装目录:/usr/local/cfengine/
2.2 程序执行目录/var/cfengine
|-- bin #cfengine可执行文件放置的位置
|-- inputs #用于放置相应的配置文件
|-- modules #自定义模块的存储目录
|-- ppkeys #交换密钥的存储目录
|-- outputs #程序执行后的输出,通常里面没内容
2.3 程序文件
Cfagent: 解释策略的承诺并且以收敛的方式执行它们。代理可使用由统计监测引
擎(自动配置代理,配置文件为update.conf(拖拽)和 cfagent.conf主配置文件)
Cfenvd产生的数据,并且它能从运行于本地或远程主机上的Cfenvd中获取数据。
Cfexecd: 执行Cfagent,并且记录它的输出(可选择通过电子邮件寄出摘要)。
可以在一个后台程序(standalone)的模式下运行,或者可以通过cron 在一个类似
于Unix 的系统上运行。
Cfservd: 监控Cfengine 的端口:提供文件数据,并在接收一个来自cfrun 的连
的基础上启动Cfagent。请注意,没有数据可以通过这个后台程序。(文件服务和远
程激活服务,配置文件为cfservd.conf)
Cfrun: 联接远程主机,并要求他们运行cfagent。(配置文件为cfrun.hosts)
Cfenvd: 收集在每台主机上使用资源的统计数据,用于异常状况的检测。信息以
cfengine 类的形式被代理获得,因此代理可以及时地对异常的动态状况进行检查并
作出反应。
Cfkey: 在主机生成“公有-私有”密钥对。一般作为Cfengine 软件安装过程中的
一个步骤,你只需运行一次该程序。
Cfshow: 一旦你对它的内部存储感兴趣,cfshow 便将cfagent 的数据库内容以
ASCII的格式导入。
Cfenvgraph: 将Cfenvd 的数据库内容导入为一种可用于图标格式显示一台主机
在其环境中的一般行为。
2.4.1 服务器激活方式:集中控制的方式,上图详细给出了整个流程.
2.4.1.1 服务器上运行cfrun,cfrun会根据cfrun.hosts中的主机列表来连接到某个客户机的cfservd程序
2.4.1.2 客户机上cfservd调用本机的cfagent程序
2.4.1.3 客户机上cfagent程序执行update.conf,连接到中央机的cfservd复制下载策略文件cafagent.conf
2.4.1.4 客户机下载成功后执行最新版本的策略文件,不成功就执行旧版本的.
注:update.conf的内容一般为一些非常简单的固定操作:下载策略文件,清理日志,重启服务,基本上这个文件创建好了之后就不会更改了.在下载策略文件的时候如果下载成功,会将原策略文件改名,加上.cfsaved后缀
2.4.2 客户端自主激活方式:
客户机独立执行cfagent (可以是定期执行,例如加入cron中)。整个流程简化为图中的第3,4步。
3 基本配置
3.1 控制服务器
3.1.1 自定义的目录
/var/cfengine/masterfile #管理目录存储 公共配置文件和模块等
| |-- inputs #存储用于分发的配置文件
| | |-- cfagent.conf
| |-- modules存储用于分发的模块文件
| | |-- module:mymodpy
| | `-- module:mymodsh
3.1.2 配置文件/var/cfengine/inputs/cfservd.conf
=================================================================
control: 控制段
domain = ( soufun.test.com ) #设置管理域的根
any:: #分类
#any::所有
#192_168_7_55::仅192.168.7.55。这里我们用any::做默认的全局配置
IfElapsed = (1) #一个anti-spamming参数,防止client端频繁的请求解析input的文件
AllowConnectionsFrom = ( 192.168.7.0/24 ) #设置允许访问的IP段
TrustKeysFrom = ( 192.168.7.0/24 ) #设置信任的域,和域中的服务器自动交换密钥
AllowUsers = ( root )
MaxConnections = ( 150 )
MultipleConnections = ( true ) #允许多个client端连接
#AllowMultipleConnectionsFrom = ( 192.168.7)
LogAllConnections = ( true )# 记录日志
admit: # or grant: 授权
# 哪些机器在什么条件下可以访问什么目录及文件
/var/cfengine/masterfile/inputs 192.168.7
/var/cfengine/masterfile/modules 192.168.7
/var/cfengine 192.168.7
/home/mayanjie 192.167.7
3.1.3 配置文件/var/cfengine/masterfile/inputs/cfagent.conf
======================================================================
control:#控制段
moduledirectory = ( /var/cfengine/modules ) #自定义模块目录位置
192_168_7_25:: #IP为192.168.7.25的服务器策略
actionsequence = ( copy shellcommands "module:mymodpy canshu1"
"module:mymodsh canshu1" )
#定义要执行的动作,此处是执行copy shellcommands 和2个自定义模块.注意是按顺序执行
#"module:mymodpy canshu1" 模块名 参数……
192_168_7_55:: #IP为192.168.7.55的服务器策略
actionsequence = ( copy )
192_168_7_139:: #IP为192.168.7.139的服务器策略
actionsequence = ( copy )
any:: #默认策略 定义一些变量
policyhost = ( 192.168.7.55 ) #管理服务器地址或域名
master_cfinput = ( /var/cfengine/masterfile/inputs ) #管理服务器上共享策略文件的目录
master_file = ( /var/cfengine/inputs ) #本地策略文件存储路径
workdir = ( /var/cfengine ) #程序工作目录
shellcommands: #需要执行的shell命令
"/usr/bin/python /var/cfengine/sh/1.py"
copy: #复制动作
192_168_7_25::# 192.168.7.25执行的复制操作
$(master_cfinput)/1.py dest=$(workdir)/sh/1.py
mode=755 #复制后的权限
type=checksum #对文件进行对比
backup=false #是否备份
#purge=true #是否与源完全同步,会删除多余的文件和目录
#exclude=*.lst #排除
server=$(policyhost) #管理服务器地址
trustkey=true #自动交换密钥
any::
$(master_file)/1.py dest=$(workdir)/sh/2.py
mode=755
type=checksum
backup=false
#purge=true
#server=$(policyhost)
#trustkey=true
3.1.4 启动服务
/var/cfengine/bin/cfservd –v
netstat -an|grep 5308查看端口是否开启
3.1.5 CfRun配置
/var/cfengine/inputs/cfrun.hosts
#
# This is the host list for cfrun
#
# Only these hosts will be contacted by remote connection
#
domain=soufun.test.com #管理域的根
#access=toreo,mark,haugerud,sigmunds
sl1 #服务器名
192.168.7.139 #或服务器IP
===========================================================
#注所有被控机名称sl1.soufun.test.com都需要在/etc/hosts解析
/var/cfengine/bin/cfrun –v 执行
3.2 被控服务器
/var/cfengine/inputs/update.conf
================================================================
control:
actionsequence = ( copy processes tidy )
domain = ( soufun.test.com ) #设置管理域的根
policyhost = ( 192.168.7.55 )
master_cfinput = ( /var/cfengine/masterfile/inputs )#设置主配置文件目录
master_modules = ( /var/cfengine/masterfile/modules )#设置主模块文件目录
#定义主文件放置位置,也就是cfagent.conf等需要传到client端的配置文件及自定义文件放置的位置
AddInstallable = ( new_cfenvd new_cfservd )
workdir = ( /var/cfengine ) #工作目录
# solaris::
# cf_install_dir = ( /usr/local/cfengine/sbin )
linux:: #linux系统的安装目录
cf_install_dir = ( /usr/local/cfengine/sbin )
!AllBinaryServers::
SplayTime = ( 1 ) 时间散列
copy:
$(master_cfinput) dest=$(workdir)/inputs
r=inf
mode=700
type=binary
#exclude=*.lst
#exclude=*~
#exclude=#*
server=$(policyhost)
trustkey=true
$(master_modules) dest=$(workdir)/modules
r=inf
mode=700
type=binary
#exclude=*.lst
#exclude=*~
#exclude=#*
server=$(policyhost)
trustkey=true
!quetzalcoatal::
$(cf_install_dir)/cfagent dest=$(workdir)/bin/cfagent
mode=755
backup=false
type=checksum
$(cf_install_dir)/cfservd dest=$(workdir)/bin/cfservd
mode=755
backup=false
type=checksum
define=new_cfservd
$(cf_install_dir)/cfexecd dest=$(workdir)/bin/cfexecd
mode=755
backup=false
type=checksum
$(cf_install_dir)/cfenvd dest=$(workdir)/bin/cfenvd
mode=755
backup=false
type=checksum
define=new_cfenvd
tidy:
$(workdir)/outputs pattern=* age=7
#此命令删除outputs/目录中在最后7天尚未访问的所有文件
processes: #进程操作
new_cfservd::
"cfservd" signal=term restart /var/cfengine/bin/cfservd # kill cfservd 并重启服务
new_cfenvd::
"cfenvd" signal=kill restart "/var/cfengine/bin/cfenvd -H" # kill -9 cfenvd 并重启服务
=================================================================
4 配置范例说明
4.1 控制类
4.1.1 什么是类(classes)
一个类是将一个或多个主机的复杂环境裁剪和限制在一个区域之内的一种方式,并可以通过一个标志或名字而被访问。类对范围有如下描述:一些事情被限制于其中的地方。
4.1.2 可用的类包括
操作系统:linux_i686_2_6_18_8_el5xen
体系结构:linux_i686_2_6_18_8_el5xen__1_SMP
主机名:hostname
IP地址:192_168_7 192_168_7_25 ipv4_192 ipv4_192_168 ipv4_192_68_7 ipv4_192_168_7_25
日期/时间:May Min15_20 Min19 Q2 Tuesday Yr2010
例子1:
192_168_7_25:: #IP为192.168.7.25的服务器策略
actionsequence = ( copy shellcommands "module:mymodpy canshu1" "module:mymodsh canshu1" )
192_168_7_25::类是一个只包含 IP=192.168.7.25这台服务器的类
如果服务器IP=192.168.7.25则会执行actionsequence中定义的操作。
例子2:
Yr2010::时间域在 2010年的全部服务器
4.2 所有的操作均由配置段构成
4.2.1 control,
控制
#设定一些系统变量
actionsequence = ( files copy tidy )
#声明一切变量和自定义类(groups段中声明的)
addclasses = ( myclass )
4.2.2 copy,
复制
copy:
(master_cfinput) dest=$(workdir)/inputs
r=inf
mode=700
type=binary
#exclude=*.lst
#exclude=*~
#exclude=#*
server=$(policyhost)
trustkey=true
4.2.3 tidy
清理删除临时文件等
tidy:
$(workdir)/outputs pattern=* age=7
4.2.4 shellcommands
执行命令
shellcommands:
"/bin/echo Hello World!"
分类执行的
shellcommands:
all::
"/usr/bin/rdate -s ntp1" timeout=30
redhat.Hr02_Q1::
"/usr/local/sbin/log_packages" background=true
4.2.5 files
文件操作,检查权限 所有者等。
files:
/etc/passwd mode=644 owner=root group=root action=fixall checksum=md5
/etc/shadow mode=600 owner=root group=root action=fixall
/etc/group mode=644 owner=root group=root action=fixall
4.2.6 processes
进程操作重起服务,监控进程等
processes:
"cfexecd" restart "/var/cfengine/bin/cfexecd"
4.2.7 disable,
禁用操作禁用某些命令 或文件等
disable:
/root/.rhosts
/etc/hosts.equiv
#其实是重命名为.cfdisabled,权限改为0600。比如:
disable:
solaris::
/usr/bin/eject inform=true syslog=true
甚至可以用于轮转日志:
disable:
/var/log/httpd/access_log size=>5mbytes rotate=4
4.2.8 editfiles
编辑文件
editfiles:
/etc/crontab
AppendIfNoSuchLine "0 * * * * root /var/cfengine/bin/cfexecd -F"
}
4.2.9 admit
授权
admit:
/usr/local/var/cfengine/inputs *.mydomain.com
/var/cfagent/bin/cfagent *.mydomain.com
4.2.10 links
links:
/usr/tmp -> ../var/tmp
/usr/local/bin +> /usr/local/lib/perl/bin
4.2.11 Groups
自定义类
groups:
web_app1 = ( IPRange(172.16.2.1-250) IPRange(172.16.3.1-250) IPRange(172.16.4.1-250) )
web_app1 = ( IPRange(172.16.6.1-250) IPRange(172.16.7.1-250) IPRange(172.16.14.1-250) )
ntp_server= ( nagios1 nagios2 nagios3 monitor_xy7 monitor_xy8 monitor_xy9 )
# 通过配置文件 判断是否属于某一类型的主机
dns = ( '/usr/bin/test -f /etc/named.conf' )
web_normal = ( '/usr/bin/test -f /etc/httpd/conf/httpd.conf' )
# 通过cfengine内部命令来判断
first_ten_server = ( RegCmp("webserver[0-9]i","${host}") )
# all server
all_server= ( dns web_app1 )
4.2.12 其他
mailserver, groups, homeservers, binservers, mountables,import, broadcast, resolve, defaultroute, directories, miscmounts,ignore, required,strategies
4.2.13 actionsequence
actionsequence = ( files copy tidy ) 指定执行动作(按顺序的)必须的,如果只是编辑了配置段但没有加入到actionsequence则不会被执行。
4.3 定义变量
policyhost = ( 192.168.7.55 )
调用
server=$(policyhost)
4.4 自定义模块
待续
问题
问题1、
../dist/configure --prefix=/opt/Berkeley
报错checking Berkeley DB Version... configure: error: This release of cfengine requires BerkeleyDB 3.2 or later
解决方法:export LD_LIBRARY_PATH="/opt/Berkeley/lib"
问题2、
make:报错
make[2]: Entering directory `/root/cfengine-2.2.10/src'
/bin/sh ../ylwrap cfparse.y y.tab.c cfparse.c y.tab.h cfparse.h y.output cfparse.output -- yacc -d
got /root/cfengine-2\.2\.10/src/
../ylwrap: line 82: yacc: command not found
解决 安装byacc-1.9-28.i386.rpm
yum install byacc*
/root/cfengine-2.2.10/missing: line 46: flex: command not found
解决 安装flex-2.5.4a-33.i386.rpm
yum install flex*
继续make
报错
make[1]: Entering directory `/usr/cfengine-2.2.8/src'
/bin/bash ../ylwrap cflex.l .c cflex.c -- /bin/bash /usr/cfengine-2.2.8/missing --run flex
got /usr/cfengine-2\.2\.8/src/
make[1]: *** [cflex.c] Error 1
make[1]: Leaving directory `/usr/cfengine-2.2.8/src'
make: *** [install-recursive] Error 1
执行make clean
重新执行 configure
在执行 make
通过
执行 make install
安装完成
通过RPM包安装的cfengine
使用cfengine来实现服务器的自动化配置