Func简介:

Func:全称Fedora Unified Network Controller:Fedora统一网络控制器,是为了解决统一管理监控问题而设计开发的系统管理基础框架,Func可以让你在主控机上一次管理任意多台服务器,或任意群组,可以直接发送远程命令或者从程获取数据。
部署func
系统:CentOS 5.8 x86_64 关闭selinux ,iptables
  1. master.laoguang.me  192.168.1.22 
  2. slave1.laogunag.me  192.168.1.23 
  3. slave2.laoguang.me  192.168.1.24 
一.安装前准备
1.1.把ip与hostname映射写入hosts
  1. echo " 
  2. 192.168.1.22 master.laoguang.me  master 
  3. 192.168.1.23 slave1.laogunag.me  slave1 
  4. 192.168.1.24 slave2.laoguang.me  slave2 " >> /etc/hosts 
  5.  
  6. scp /etc/hosts slave1:/etc/ 
  7. scp /etc/hosts slave2:/etc/ 
1.2.时间同步  ##我因未做同步卡在这里2个小时,报错是ssl v3什么alert
每个服务器
  1. yum -y install ntp 
  2. ntpdate ntp.api.bz 
二.在所有服务器上安装func
软件准备:
  1. Python-2.5.2.tgz            ##func就是Python写的 
  2. wget http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tgz 
  3. pyOpenSSL-0.9.tar.gz        ##加密模块 
  4. wget http://jaist.dl.sourceforge.net/project/pyopenssl/pyopenssl/0.9/pyOpenSSL-0.9.tar.gz 
  5. func-0.28.tar.gz            ##func 
  6. wget https://fedorahosted.org/releases/f/u/func/func-0.28.tar.gz 
  7. certmaster-0.28.tar.gz      ##它来发证加密通信 
  8. wget https://fedorahosted.org/releases/c/e/certmaster/certmaster-0.28.tar.gz 
2.1 安装python2.5 ,据说func与python2.4及以下的不兼容不好
安装python之前先安装gdbm-devel,否则启动func会报错
  1. yum -y install gdbm-devel 
  2. tar xvf Python-2.5.2.tgz 
  3. cd Python-2.5.2 
  4. ./configure 
  5. make && make install 
2.2 安装pyOpenSSL-0.9
  1. tar xvf pyOpenSSL-0.9.tar.gz 
  2. cd pyOpenSSL-0.9 
  3. python setup.py install 
2.3 安装certmaster-0.28
  1. tar xvf certmaster-0.28.tar.gz  
  2. cd certmaster-0.28 
  3. python setup.py install 
2.4 安装func-0.28
  1. tar xvf func-0.28.tar.gz 
  2. cd func-0.28 
  3. python setup.py install 
2.5 由于生成的二进制文件是在/usr/local/bin下,而certmaster,func的启动脚本中的命令在/usr/bin下,所以创建软链接
  1. ln -s /usr/local/bin/certmaster /usr/bin/certmaster 
  2. ln -s /usr/local/bin/certmaster-request /usr/bin/certmaster-request 
  3. ln -s /usr/local/bin/certmaster-ca /usr/bin/certmaster-ca 
  4. ln -s /usr/local/bin/certmaster-sync /usr/bin/certmaster-sync 
  5. ln -s /usr/local/bin/funcd /usr/bin/funcd 
  6. ln -s /usr/local/bin/func /usr/bin/func 
  7. ln -s /usr/local/bin/func-create-module /usr/bin/func-create-module 
  8. ln -s /usr/local/bin/func-inventory /usr/bin/func-inventory 
  9. ln -s /usr/local/bin/func-transmit /usr/bin/func-transmit 
  10. ln -s /usr/local/bin/func-build-map /usr/bin/func-build-map 
三.配置软件
3.1 master端也就是server端,不用修改配置文件
  1. cat /etc/certmaster/certmaster.conf  
  2. # configuration for certmasterd and certmaster-ca 
  3. [main] 
  4. autosign = no            ##这也可以修改为自动签名,我们先手动来签吧 
  5. listen_addr =  
  6. listen_port = 51235 
  7. cadir = /etc/pki/certmaster/ca 
  8. cert_dir = /etc/pki/certmaster 
  9. certroot = /var/lib/certmaster/certmaster/certs 
  10. csrroot = /var/lib/certmaster/certmaster/csrs 
  11. certcert_extension = cert 
  12. sync_certs = False 
  1. cat /etc/certmaster/minion.conf  
  2. # configuration for minions 
  3. [main] 
  4. certmastercertmaster = certmaster   
  5. certmaster_port = 51235 
  6. log_level = DEBUG 
  7. cert_dir = /etc/pki/certmaster 
  1. cat /etc/func/minion.conf  
  2. # configuration for minions 
  3. [main] 
  4. log_level = INFO 
  5. acl_dir = /etc/func/minion-acl.d 
  6. listen_addr = 
  7. listen_port = 51234 
  8. minion_name = 
  9. method_log_dir = /var/log/func/methods/ 
3.2 slave1,slave2端配置,也就是客户端配置
  1. vim /etc/certmaster/minion.conf  
  2. [main] 
  3. certmaster = master.laoguang.me   ##改为master的地址或域名 
  4. certmaster_port = 51235 
  5. log_level = DEBUG 
  6. cert_dir = /etc/pki/certmaster 
3.3 服务器端启用certmaster,客户端启动funcd
  1. master: service certmaster start 
  2. slave1,slave2: service funcd start 
  3.  
  4. netstat -tlnp | grep python     ##服务器端,51235是certmaster监听的 
  5. tcp        0      0 0.0.0.0:51235            0.0.0.0:*         LISTEN   43613/python   
  6. netstat -tlnp | grep python     ##客户端,python也就是func没有监听端口,等签证后就
四.测试与使用
4.1 服务器端查看有几个客户端申请签名,如果你配置文件是自动签名就不会看到它们了
  1. [root@master ~]# certmaster-ca --list 
  2. slave1.laogunag.me 
  3. slave2.laoguang.me 
4.2 为它们签名
  1. certmaster-ca --sign "slave1.laoguang.me" 
  2. certmaster-ca --sign "slave2.laoguang.me" 
4.3 查看已经签名的客户端
  1. [root@master ~]# certmaster-ca --list-signed 
  2. slave1.laoguang.me 
  3. slave2.laoguang.me 
4.3 删除为某服务器的签名
  1. certmaster-ca --clean "slave1.laoguang.me"     
  2. ##删除后再把它加进来哦,slave1删除/etc/pki/certmaster下的slave1开头的文件,重启funcd,服务器端会发现 

4.4 利用CommandModule模块 再客户机上运行命令
语法:func 'hostname' call command run 'command'
如:在slave1上运行ifconfig eth0
  1. func 'slave1.laoguang.me' call command run 'ifconfig eth0' 
4.5 利用ServiceModule模块启动关闭等服务
语法:func 'hostname' call service start/stop/restart 'servicename'
如:重启slave2上的sshd
  1. func 'slave2.laoguang.me' call service restart 'sshd' 
4.6 利用NetworkTest模块测试客户主机
语法:func 'hostname' ping 
如: 查看所有客户端状态
  1. func '*' ping  
4.7 利用ProcessModule模块测试
语法:func hostname call process command
如: 查看slave1的内存使用
  1. func slave1.laoguang.me call process mem 
4.8 利用SysctlModule调整内核参数
语法:func hostname call sysctl command
     func hostname call sysctl get <parameter>
     func hostname call sysctl set <parameter> <value>
如:查看slave2的内核参数
  1. func slave2.laoguang.me call sysctl list  
如: 查看slave1的ip_forward 值
  1. func slave1.laoguang.me call sysctl get net.ipv4.ip_forward 
其它模块请参考官网
 
5.0 定义组
可以把一些主机定义为组,批量管理
  1. vim /etc/func/groups 
  2. [slave] 
  3. host = slave1.laoguang.me,slave2.laoguang.me 
查看slave组中主机状态
  1. func '@slave' ping  
先写到这里了