内容简介:1.搭建Puppet Master(1)规划三台服务器主机名
Puppet工作原理
让管理员只集中于要管理的目标,而忽视实现的细节。puppet既可以在单机上使用,也可以以C/S结构使用。在大规模使用puppet的情况下,通常使用C/S结构,在这种结构中puppet客户端只运行puppetclient,Puppet服务端只运行puppetmaster。具体的工作流程如图所示:
环境
使用四台服务器模拟搭建puppet环境,拓扑图如下所示:
环境表
实验步骤
1.搭建Puppet Master
(1)规划三台服务器主机名
[root@localhost ~]# vim /etc/hostname master.test.cn [root@localhost ~]# vim /etc/hosts 192.168.126.138 master.test.cn 192.168.126.148 client01.test.cn 192.168.126.158 client02.test.cn
(2)服务器时间同步
由于puppet需要使用SSL证书,依赖时间同步,所以需要搭建NTP服务器
1)搭建NTP Server
[root@localhost ~]# yum install ntp -y [root@localhost ~]# vim /etc/ntp.conf 添加以下两行: server 127.127.1.0 #指定本地作为时间源服务器 fudge 127.127.1.0 stratum 8
其作用是当 /etc/ntp.conf 中定义的server都不可用时,将使用local时间作为NTP服务提供给NTP客户端。
2)启动ntp服务并设置开机自启动
[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# systemctl disable firewalld.service [root@localhost ~]# setenforce 0 [root@localhost ~]# systemctl start ntpd.service [root@localhost ~]# systemctl enable ntpd.service [root@localhost ~]# ntpstat #同步 synchronised to NTP server (193.228.143.13) at stratum 3 time correct to within 517 ms polling server every 64 s
3)puppetmaster作为NTP客户端的配置
[root@master ~]# yum install ntpdate -y [root@master ~]# ntpdate 192.168.126.159 6 Aug 09:45:03 ntpdate[3488]: adjust time server 192.168.126.159 offset -0.072288 sec #调整时间服务器192.168.126.159偏移-0.072288秒
4)配置YUM源
[root@master ~]# yum install epel-release -y [root@master ~]# yum install puppet-server -y #安装puppet服务端
5)启动puppet主程序
[root@master ~]# systemctl stop firewalld.service [root@master ~]# systemctl disable firewalld.service [root@master ~]# setenforce 0 [root@master ~]# systemctl start puppetmaster.service [root@master ~]# systemctl enable puppetmaster.service
2.搭建puppetclient(两台客户端配置一样)
1)通过域名ping通puppetmaster
[root@client01 ~]# ping master.test.cn PING master.test.cn (192.168.126.138) 56(84) bytes of data. 64 bytes from master.test.cn (192.168.126.138): icmp_seq=1 ttl=64 time=1.06 ms 64 bytes from master.test.cn (192.168.126.138): icmp_seq=2 ttl=64 time=3.27 ms 64 bytes from master.test.cn (192.168.126.138): icmp_seq=3 ttl=64 time=0.382 ms 64 bytes from master.test.cn (192.168.126.138): icmp_seq=4 ttl=64 time=0.660 ms
2)服务器时间同步
[root@client01 ~]# yum install ntpdate -y [root@client01 ~]# vim /etc/ntp.conf server 127.127.1.0 #指定本地作为时间源服务器 fudge 127.127.1.0 stratum 8 [root@client01 ~]# ntpdate 192.168.126.159 6 Aug 10:01:12 ntpdate[3303]: adjust time server 192.168.126.159 offset -0.012348 sec
3)配置YUM源
[root@client01 ~]# yum install epel-release -y [root@client01 ~]# yum install puppet -y #安装puppet客户端
4)修改puppet的配置文件/etc/puppet/puppet.conf
[root@client01 ~]# vim /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet
# Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl
server = master.test.cn #添加puppet master的地址
5)分别在puppetclient01和puppetclient01上进行注册
[root@client01 ~]# puppet agent --server=master.test.cn --no-daemonize --verbose Info: Creating a new SSL key for client01.test.cn Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for client01.test.cn Info: Certificate Request fingerprint (SHA256): C1:1F:11:32:53:96:AA:91:16:9F:CE:F2:AD:D2:3F:56:C7:9B:D9:87:5C:F8:2D:30:7D:FE:49:66:46:2A:D9:FC Info: Caching certificate for ca
6)查看申请注册的客户端
[root@master ~]# puppet cert --list "client01.test.cn" (SHA256) C1:1F:11:32:53:96:AA:91:16:9F:CE:F2:AD:D2:3F:56:C7:9B:D9:87:5C:F8:2D:30:7D:FE:49:66:46:2A:D9:FC "client02.test.cn" (SHA256) 7C:C9:22:59:B2:1E:2B:F5:12:30:4D:88:D9:B1:AF:60:FE:02:65:7A:A2:3F:E3:B5:CB:1D:2F:9F:B5:4B:FD:6D
7)对未注册的客户端进行注册
[root@master ~]# puppet cert sign --all Notice: Signed certificate request for client01.test.cn Notice: Removing file Puppet::SSL::CertificateRequest client01.test.cn at '/var/lib/puppet/ssl/ca/requests/client01.test.cn.pem' Notice: Signed certificate request for client02.test.cn Notice: Removing file Puppet::SSL::CertificateRequest client02.test.cn at '/var/lib/puppet/ssl/ca/requests/client02.test.cn.pem'
8)查看已经注册的客户端
[root@master ~]# ll /var/lib/puppet/ssl/ca/signed/ 总用量 12 -rw-r--r--. 1 puppet puppet 1952 8月 6 21:22 client01.test.cn.pem -rw-r--r--. 1 puppet puppet 1952 8月 6 21:22 client02.test.cn.pem -rw-r--r--. 1 puppet puppet 2021 8月 6 21:06 master.test.cn.pem
此时客户端已经完成证书的请求与签名。
配置实例
- 这里为了保护 Linux 的ssh端口,修改客户端client1的sshd端口,将端口22修改为9922,并实 现重启工作。
- 首先创建ssh模块,ssh模块下面有三个文件:manifests,templates和files。
- 在manifests里面包含一个init.pp文件,这是该模块的初始入口文件,导入模块时,会从init.pp开始执行。可以把所有的代码都写到init.pp里面,也可以分成多个pp文件,init再去包含其他文件。定义class类名的时候必须是ssh,这样才能实现调用。
- file目录是该模块的文件发布目录,Puppet提供一个文件分发机制,类似于rsync的模块。
- templates目录包含erb模型文件,这个和file资源的template属性相关,不过很少用。具体配置如下:
1)创建必要的目录:
[root@master ~]# cd /etc/puppet/
[root@master puppet]# mkdir -p modules/ssh/{manifests,templates,files}
[root@master puppet]# mkdir manifests/nodes
[root@master puppet]# mkdir modules/ssh/files/ssh
[root@master puppet]# chown -R puppet modules/ #修改权限
2)查看/etc/puppet/modules/ssh目录下的结构
[root@master puppet]# ll modules/ssh/ 总用量 0 drwxr-xr-x. 3 puppet root 17 8月 6 21:32 files drwxr-xr-x. 2 puppet root 6 8月 6 21:31 manifests drwxr-xr-x. 2 puppet root 6 8月 6 21:31 templates
3)创建模块配置文件install.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/install.pp
输入以下信息(首先确定客户端已安装ssh服务):
class ssh::install{
package{"openssh":
ensure=>present,
}
}
4)创建模块配置文件config.pp
[root@master puppet]# 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"], #调用install.pp确认ssh已经安装
notify=>Class["ssh::service"], #如果config.pp发生变化,通知service.pp
}
}
5)创建模块配置文件service.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service{
service { "sshd":
ensure=>running, #确认ssh运行
hasstatus=>true, #puppet该服务支持status命令,类似于service sshd status
hasrestart=>true, #puppet该服务支持restart,类似于service sshd restart
enable=>true, #服务器是否开机启动
require=>Class["ssh::config"] #确认config.pp调用
}
}
6)创建模块主配置文件init.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh {
include ssh::install,ssh::config,ssh::service #将配置文件加载到ssh类中去
}
7)此时/etc/puppet/modeles/ssh/mainfests目录下有四个文件
[root@master puppet]# ll /etc/puppet/modules/ssh/manifests/ 总用量 16 -rw-r--r--. 1 root root 248 8月 6 21:40 config.pp -rw-r--r--. 1 root root 60 8月 6 21:46 init.pp -rw-r--r--. 1 root root 64 8月 6 21:38 install.pp -rw-r--r--. 1 root root 165 8月 6 21:42 service.pp
8)建立服务端ssh统一维护文件
由于服务端和客户端的sshs_config文件默认一样,此时将服务端的/etc/ssh/sshd_config复制到模块默认路径中去。
[root@master puppet]# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/ [root@master puppet]# chown -R puppet /etc/puppet/modules/ssh/files/ssh/ #修改权限
9)创建测试节点配置文件,并将ssh加载进去。
[root@master puppet]# vim /etc/puppet/manifests/nodes/ssh.pp
node 'client01.test.cn'{
include ssh
}
node 'client02.test.cn'{
include ssh
}
10)将测试节点载入puppet,即修改site.pp。
[root@master puppet]# vim /etc/puppet/manifests/site.pp import "nodes/ssh.pp"
11)修改服务器维护的sshd_config配置文件
[root@master puppet]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config Port 22 #修改为9922
12)重启puppet服务
[root@master puppet]# systemctl restart puppetmaster.service
2.客户端主动拉取
一般在小规模自动化集群中,如代码上线需要重启服务时,为了防止出现网站暂时性无法访问的问题,每台客户端运行一次puppet agent -t命令,选择模式根据客户端集群规模的大小。根据经验,一般puppet服务器到各客户端会建立ssh信任,然后自定义 shell 脚本,ssh批量让客户端执行puppet同步命令。
1)Client01端:
[root@client01 ~]# puppet agent -t .....//省略 Notice: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]/content: --- /etc/ssh/sshd_config 2017-08-07 10:28:25.000000000 +0800 +++ /tmp/puppet-file20180806-5162-jc80yr 2018-08-06 22:25:58.726506429 +0800 @@ -14,7 +14,7 @@ # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # -#Port 22 +Port 9922 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: .....//省略 Client02端: ....//省略 Notice: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]/content: --- /etc/ssh/sshd_config 2017-08-07 10:28:25.000000000 +0800 +++ /tmp/puppet-file20180806-4667-149tj11 2018-08-06 22:27:39.362282788 +0800 @@ -14,7 +14,7 @@ # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # -#Port 22 +Port 9922 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: ......//省略
2)此时命令在客户端执行成功,验证如下:
[root@client01 ~]# cat /etc/ssh/sshd_config | grep Port Port 9922 #GatewayPorts no
3)查看服务器ssh服务是否重启,端口是否生效。
[root@client01 ~]# netstat -tunlp | grep ssh tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN 5428/sshd tcp6 0 0 :::9922 :::* LISTEN 5428/sshd
3.服务器推送同步
1)当大规模部署时,采用服务器推送模式。
client: [root@client02 ~]# vim /etc/puppet/puppet.conf 最后一行添加 listen = true #使puppet监听8139端口
2)验证配置文件auth.conf定义了一些验证信息及访问权限
[root@client02 ~]# vim /etc/puppet/auth.conf 最后一行添加 allow * #允许任何服务端推送
3)启动puppet客户端
[root@client02 ~]# systemctl start puppetagent.service [root@client02 ~]# cat /etc/ssh/sshd_config #查看 ......//省略 Port 9922 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: ......//省略
4)开始往客户端推送
Master: [root@master puppet]# puppet kick client02.test.cn Triggering client02.test.cn Getting status status is success client02.test.cn finished with exit code 0 Finished
5)校验结果如下
[root@master puppet]# cat /etc/ssh/sshd_config | grep Port #Port 22 #GatewayPorts no
6)查看服务器ssh服务是否重启,端口是否生效。
[root@client02 ~]# netstat -tunlp | grep ssh tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN 4908/sshd tcp6 0 0 :::9922 :::* LISTEN 4908/sshd
实验成功,仅供参考。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning Apache Struts
Arnold Doray / Apress / 2006-02-20 / USD 44.99
Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!