1 快速开始
上 http://www.cfengine.org/pages/source_code 去抓个最新的源码,
wget http://www.cfengine.org/tarballs/download.php?file=cfengine-3.1.4.tar.gz
解压安装
tar zxvf cfengine-3.1.4.tar.gz
cd cfengine-3.1.4
./configure --prefix=/usr/local/cfengine-3.1.4
make
sudo make install
准备运行目录
以root身份运行如下命令:
mkdir -p /var/cfengine/{bin,masterfiles,inputs,outputs}
cp /usr/local/cfengine-3.1.4/sbin/* /var/cfengine/bin
cp /usr/local/cfengine-3.1.4/share/doc/cfengine/inputs/* /var/cfengine/masterfiles
cp /var/cfengine/masterfiles/* /var/cfengine/inputs
/var/cfengine/bin/cf-key
/var/cfengine/bin/cf-agent
现在cfengine已能正常工作,其工作目录为 /var/cfengine。
2 相关概念
cfengine主要的可执行程序有:
cf-agent 执行策略定义文件,产生预期的配置结果
cf-execd 包装程序,配置到crontab里定时执行cf-agent
cf-key 证书生成文件
cf-promises 测试策略定义文件
cf-runagent 远程触发cf-agent的执行
cf-serverd 配置文件分发服务和接收远程执行cf-agent的请求
典型的IDC配置管理如下分布:
一个策略定义点(CVS或者SVN配置仓库)
多个策略分发点,从策略定义点获取策略定义文件
多个策略实施点,从策略分发点获取策略定义文件,并本地执行实施
策略分发点的策略定义文件通常存在 /var/cfengine/masterfiles 目录,
策略实施点的策略定义文件存在 /var/cfengine/inputs 目录,
/var/cfengine/outputs保存策略实施的结果。
系统自带的策略定义文件:
cfengine_stdlib.cf cfengine标准库
failsafe.cf 当出现错误时执行的动作(一般是更新本地的策略定义文件)
promises.cf 这是cf-agent执行时的起点文件
site.cf 机器特定的一些配置
update.cf 更新本地的策略定义文件
cfengine里的每一个配置策略称为一项承诺(promise),即配置要达到的目标。承诺可包含若干个执行体(body),即为达到配置目的要执行的动作。若干个承诺组在一起形成配置束(bundle),它是承诺的容器,类似于子函数的概念。哪些机器适用于哪些承诺,这是由类(class)决定的,如果不指定承诺适用的类,则对任何机器都适用。
cfengine内定了一些承诺(promise),执行过程是无法更改的,但可以更改这些promise的执行体(body)达到定制目的,比如"control"这个执行体可定制大多数cfengine程序的行为。
不管是budnle还是body,它们的定义语法是类似的:
<它是什么> <它对谁起作用> <它的名字>
<它是什么> 这部分是cfengine的关键字,可选为 bundle 或 body
<它对谁起作用> 这部分是cfengine的关键字,可选为 agent, server, perms, signals等
<它的名字> 这是用户自定义的标记
3 建立分布式的配置管理系统
假设策略分发点的ip地址是 192.168.132.1,策略实施点的ip地址是 192.168.132.60。
策略分发点的配置
/var/cfengine/masterfiles/promises.cf:
...
body runagent control
{
...
trustkey => "true";
force_ipv4 => "true";
}
...
body server control
{
...
allowconnects => { "127.0.0.1" , "::1", "192\.168\.132\..*" };
allowallconnects => { "127.0.0.1" , "::1", "192\.168\.132\..*" };
trustkeysfrom => { "127.0.0.1" , "::1", "192\.168\.132\..*" };
skipverify => { "192\.168\.132\..*" };
}
...
/var/cfengine/masterfiles/site.cf:
...
bundle server access_rules()
{
access:
"/var/cfengine/masterfiles"
admit => { "192\.168\.132\..*" };
"/var/cfengine/bin/cf-agent"
admit => { "192\.168\.132\..*" };
...
}
...
/var/cfengine/masterfiles/update.cf:
...
bundle agent update
{
vars:
"master_location" string => "/var/cfengine/masterfiles";
files:
!192_168_132_1::
"/var/cfengine/inputs"
perms => u_p("600"),
# copy_from => mycopy("$(master_location)","localhost"),
copy_from => myrcopy("$(master_location)","192.168.132.1"),
depth_search => recurse("inf"),
action => uimmediate;
192_168_132_1::
"/var/cfengine/inputs"
perms => u_p("600"),
copy_from => mycopy("$(master_location)","localhost"),
depth_search => recurse("inf"),
action => uimmediate;
}
...
body copy_from myrcopy(from,server)
{
trustkey => "true";
source => "$(from)";
servers => { "$(server)" };
compare => "digest";
encrypt => "true";
verify => "true";
force_ipv4 => "true";
}
...
大部分定制的配置选项是关于远程连接授权的,细节可参考cfengine手册。
配置完成后,运行 /var/cfengine/bin/cf-agent 让配置在本地生效。
策略实施点的配置
把测试分发点的 /var/cfengine/masterfiles/update.cf 覆盖本地的 /var/cfengine/inputs/update.cf即可。运行 /var/cfengine/bin/cf-agent 同步其他配置文件并在本地执行实施。
4 排错
修改完配置后,建议在策略分发点以非root用户先执行,没错后再考虑拷贝到策略分发目录。
当以非root用户执行cf-agent或者cf-promises时,cfengine的工作目录为 $HOME/.cfengine。
如遇到问题可启动相关程序的详细输出选项和调试选项,比如 cf-serverd -d2 -v 。
5 参考资料
http://www.cfengine.org/pages/manual_guides
没有评论:
发表评论