52.puppet自动化运维工具
puppet自动化运维工具
Puppet是一款运维自动化工具,在一些大型的互联网企业,它可以针对多台服务器进行统一操作,如统一部署软件,进行统一上线维护等,意思就是说在一台linux服务器上所部署的操作,会通过puppet同步到其他linux服务器的一款强大工具。
Puppet使用的端口是8139
搭建puppetmaster:
v 规划服务器主机名
# vim /etc/sysconfig/network
修改内容:
NETWORKING=yes
HOSTNAME=master.test.cn
# vim /etc/hosts
添加解析记录:
1.1.1.128 master.test.cn
1.1.1.129 client.test.cn
# hostname master.test.cn
# bash
v 服务器时间同步
#vim /etc/ntp.com
添加两行:
server 127.127.1.0
fudge 127.127.1.0 stratum 8
# yum -y install ntpdate
#service ntpd restart
#chkconfig ntpd on
v 安装ruby
# yum -y install ruby
#ruby -v
v 安装puppet和facter
# useradd -s /sbin/nologin puppet
# tar xzvf facter-1.7.1.tar.gz
# cd facter-1.7.1
# ruby install.rb
# tar xzvf puppet-2.7.21.tar.gz
# cd puppet-2.7.21
# ruby install.rb
# cp conf/redhat/fileserver.conf /etc/puppet/
# cp conf/redhat/puppet.conf /etc/puppet/
# cp conf/redhat/server.init /etc/init.d/puppetmaster
# chmod +x /etc/init.d/puppetmaster
# mkdir /etc/puppet/manifests
# mkdir /etc/puppet/modules
v Puppet服务证书与签名
# iptables -F
# vim /etc/puppet/puppet.conf
在main行添加:
ssldir = $vardir/ssl
modulepath = /etc/puppet/modules:/usr/share/puppet/modules
# /etc/init.d/puppetmaster start
搭建client客户端:
v 规划服务器主机名
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=client.test.cn
# vim /etc/hosts
1.1.1.128 master.test.cn
1.1.1.129 client.test.cn
# hostname client.test.cn
# bash
v 同步服务时间
# ntpdate 1.1.1.128
v 安装ruby安装工具
# yum -y install ruby
# ruby -v
v 安装puppet和facter
#useradd -s /sbin/nologin puppet
# tar xzvf facter-1.7.1.tar.gz
# cd facter-1.7.1
# ruby install.rb
# tar xzvf puppet-2.7.2
# cd puppet-2.7.21
# ruby install.rb
# cp conf/redhat/puppet.conf /etc/puppet
# cp conf/redhat/client.init /etc/init.d/puppetclient
# chmod +x /etc/init.d/puppetclient
# iptables -F
# vim /etc/puppet/puppet.conf
在main项添加内容 :
ssldir = $vardir/ssl
server = master.test.cn
v 在client端申请与注册
# puppet agent --server=master.test.cn --no-daemonize --verbose
在master端提交注册信息
# puppet cert --list 查看申请列表
# puppet cert sign --all 提交注册信息,会在下面目录中创建证书
#ll /var/lib/puppet/ssl/ca/signed 查看client端的注册信息文件
案例需求:需要将ssh服务的端口统一更改为9922
节点入口存放目录:/etc/puppet/manifests/nodes
模块存放目录:/etc/puppet/modules
Puppet分发部署:
v 创建必要目录
#mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files}
#mkdir /etc/puppet/modules/ssh/files/ssh
#mkdir /etc/puppet/manifests/nodes
#chown -R puppet /etc/puppet/modules/
#ll /etc/puppet/modules/ssh
注:ssh/manifests目录是ssh模块配置文件目录,ssh/files是ssh模块的文件发布目录
v 创建模块配置文件
# vim /etc/puppet/modules/ssh/manifests/install.pp 确定客户端是否安装ssh服务
class ssh::install{
package{ "openssh":
ensure => present,
}
}
# vim /etc/puppet/modules/ssh/manifests/config.pp 配置需要同步的文件
class ssh::config{ 定义类
file { "/etc/ssh/sshd_config": 文件路径
ensure => present, 确定客户端此文件存在
owner =>"root", 文件所属用户
group =>"root", 文件所属组
mode =>"0600", 文件属性
source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",从服务器同步文件
require => Class["ssh::install"], 调用ssh::install类
notify => Class["ssh::service"], 如果config.pp发生变化通知service.pp
}
}
# vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service { 定义类
service {"sshd":
ensure=>running, 确定ssh在运行
hasstatus=>true, 查看ssh服务状态
hasrestart=>true, 重启ssh服务
enable=>ture, 服务器是否开机
require=>Class["ssh::config"] 调用ssh::config类
}
}
# vim /etc/puppet/modules/ssh/manifests/init.pp 模块主配置文件
class ssh{
include ssh::install,ssh::config,ssh::service 调用上面三个类
}
v 复制已修改好的ssh的配置文件到默认目录
# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
#chown puppet /etc/puppet/modules/ssh/files/ssh/sshd_config
v 创建节点配置文件
# vim /etc/puppet/manifests/nodes/ssh.pp
node 'client.test.cn' { 定义客户端入口
include ssh
}
# vim /etc/puppet/manifests/nodes/site.pp 配置节点位置
import "nodes/ssh.pp"
同步方法:
v 客户端主动拉取
#puppet agent -t
v 服务器推送同步
2 客户端
# echo "listen = true" >> /etc/puppet/puppet.conf
# echo "allow *" >> /etc/puppet/auth.conf
#/etc/init.d/puppetclient restart
#vim /etc/ssh/sshd_config
#netstat -lnupt |grep ssh
2 服务端
#puppet kick client.test.cn