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