标签:时间同步 最新 test port inf 同步 语言 系统服务 模型
自动化运维之puppetpuppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.
具体的工作流程:
Puppet工作中以下两点值得注意:
本实验使用四台服务器模拟搭建puppet环境,具体拓扑图如下:
各服务器IP分布如下表
主机 | IP地址 |
---|---|
puppetmaster | 192.168.58.146 |
puppetclient1 | 192.168.58.148 |
puppetclient2 | 192.168.58.149 |
ntp server | 192.168.58.147 |
[root@master ~]# cat /etc/hostname #修改主机名
master.test.cn
[root@master ~]# cat /etc/hosts #将三台服务器主机名和IP地址写到/etc/hosts文件中去
192.168.58.146 master.test.cn
192.168.58.148 client1.test.cn
192.168.58.149 client2.test.cn
[root@master ~]# ping client1.test.cn
PING client1.test.cn (192.168.58.148) 56(84) bytes of data.
64 bytes from client1.test.cn (192.168.58.148): icmp_seq=1 ttl=64 time=0.846 ms
64 bytes from client1.test.cn (192.168.58.148): icmp_seq=2 ttl=64 time=0.477 ms
64 bytes from client1.test.cn (192.168.58.148): icmp_seq=3 ttl=64 time=0.438 ms
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
[root@promote ~]# yum install ntp -y
[root@promote ~]# systemctl start ntpd
[root@promote ~]# systemctl enable ntpd
[root@promote ~]# systemctl stop firewalld
[root@promote ~]# setenforce 0
[root@promote ~]# ntpstat
synchronised to NTP server (85.199.214.100) at stratum 2
time correct to within 191 ms
polling server every 64 s
[root@master ~]# yum install ntpdate -y
#安装NTP客户端
[root@master ~]# ntpdate 192.168.58.147
5 Aug 16:54:55 ntpdate[2361]: adjust time server 192.168.58.147 offset -0.022671 sec
#与NTP服务器进行时间同步
[root@master ~]# yum install epel-release -y
#安装epel第三方源
[root@master ~]# yum install puppet-server -y
#安装Puooet服务端
[root@master ~]# systemctl start puppetmaster.service
#启动puppetmaster服务
两台puppetclient服务器配置类似,只有主机名注意区分
[root@client1 ~]# cat /etc/hostname
client1.test.cn
[root@client1 ~]# cat /etc/hosts
192.168.58.146 master.test.cn
192.168.58.148 client1.test.cn
192.168.58.149 client2.test.cn
[root@client1 ~]# ping master.test.cn
PING master.test.cn (192.168.58.146) 56(84) bytes of data.
64 bytes from master.test.cn (192.168.58.146): icmp_seq=1 ttl=64 time=0.665 ms
64 bytes from master.test.cn (192.168.58.146): icmp_seq=2 ttl=64 time=0.504 ms
^C64 bytes from master.test.cn (192.168.58.146): icmp_seq=3 ttl=64 time=0.163 ms
#可以通过域名ping通pupetmaster服务器
[root@client1 ~]# yum install ntpdate -y
[root@client1 ~]# ntpdate 192.168.58.147
5 Aug 17:00:29 ntpdate[2249]: adjust time server 192.168.58.147 offset -0.052137 sec
#和NTP服务器进行同步
[root@client1 ~]# yum install epel-release -y
#安装epel第三方源
[root@client1 ~]# yum install puppet -y
#安装puppet客户端
[root@client1 ~]# vim /etc/puppet/puppet.conf
申请和注册
分别在client1和client2上进行注册。
[root@client1 ~]# puppet agent --server=master.test.cn --no-daemonize --verbose
#这个就是注册命令,执行完后会有下面的提示
Info: Creating a new SSL key for client1.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 client1.test.cn
Info: Certificate Request fingerprint (SHA256): 92:9E:71:34:3C:A8:90:5B:68:77:44:5A:3A:15:26:C9:29:86:F9:60:D2:2D:61:D4:1A:79:C2:2F:C9:CF:C5:01
Info: Caching certificate for ca
#等待一会儿后,可以自己Ctrl+C结束,然后到server中查看申请信息。
我们到master服务器中查看申请信息
[root@master ~]# puppet cert --list
"client1.test.cn" (SHA256) 92:9E:71:34:3C:A8:90:5B:68:77:44:5A:3A:15:26:C9:29:86:F9:60:D2:2D:61:D4:1A:79:C2:2F:C9:CF:C5:01
"client2.test.cn" (SHA256) 9D:7E:22:85:1D:79:08:31:00:BE:2F:35:C2:F2:71:B9:DC:22:0D:24:8C:58:8E:7D:DA:79:9A:94:D5:C6:22:9A
#可以看到两台客户端提出了注册申请
对未注册的客户端注册
[root@master ~]# puppet cert sign --all
Notice: Signed certificate request for client1.test.cn
Notice: Removing file Puppet::SSL::CertificateRequest client1.test.cn at ‘/var/lib/puppet/ssl/ca/requests/client1.test.cn.pem‘
Notice: Signed certificate request for client2.test.cn
Notice: Removing file Puppet::SSL::CertificateRequest client2.test.cn at ‘/var/lib/puppet/ssl/ca/requests/client2.test.cn.pem‘
#可以看到已经通过了申请
可以通过目录去查看已经注册的客户端
[root@master puppet]# cd /var/lib/puppet/ssl/ca/signed/
[root@master signed]# ls
client1.test.cn.pem client2.test.cn.pem master.test.cn.pem
#可以看到已经完成了证书的请求和签名
这里为了保护Linux的ssh端口,修改客户端client1的sshd端口,将端口22修改为9922,并实现重启工作。
[root@master signed]# 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/ #修改属主
此时/etc/puppet/modules/ssh目录下的结构如下:
[root@master puppet]# ll modules/ssh/
总用量 0
drwxr-xr-x. 3 puppet root 17 8月 5 17:25 files
drwxr-xr-x. 2 puppet root 6 8月 5 17:25 manifests
drwxr-xr-x. 2 puppet root 6 8月 5 17:25 templates
创建模块配置文件install.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/install.pp
class ssh::install{
package{"openssh":
ensure=>present,
}
}
~
创建模块配置文件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
}
}
~
创建模块配置文件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调用
}
}
创建模块主配置文件init.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh {
include ssh::install,ssh::config,ssh::service
#将配置文件加载到ssh类中去
}
~
现在/etc/puppet/modeles/ssh/mainfests目录下有四个文件:
[root@master puppet]# ll /etc/puppet/modules/ssh/manifests/
总用量 16
-rw-r--r--. 1 root root 337 8月 5 17:34 config.pp
-rw-r--r--. 1 root root 67 8月 5 17:43 init.pp
-rw-r--r--. 1 root root 72 8月 5 17:28 install.pp
-rw-r--r--. 1 root root 203 8月 5 17:40 service.pp
建立服务端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/
#修改文件夹属主
创建测试节点配置文件,并将ssh加载进去。
[root@master puppet]# vim /etc/puppet/manifests/nodes/ssh.pp
node ‘client1.test.cn‘{
include ssh
}
~
将测试节点载入puppet,即修改site.pp
[root@master puppet]# vim /etc/puppet/manifests/site.pp
import "nodes/ssh.pp"
~
修改服务器维护的sshd_config配置文件
[root@master puppet]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 9922 #修改为9922
重启puppet
[root@master puppet]# systemctl restart puppetmaster.service
客户端主动拉取,
[root@client1 ~]# puppet agent -t
...省略
Info: Applying configuration version ‘1533463512‘
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-file20180805-3493-173oey2 2018-08-05 18:05:13.550668088 +0800
@@ -14,7 +14,7 @@
#
-#Port 22
+Port 9922
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...省略
此时在client端已经执行成功,现在就去客户端验证一下:
[root@client1 ~]# netstat -ntap | grep 9922
tcp 0 0 0.0.0.0:9922 0.0.0.0: LISTEN 3695/sshd
tcp6 0 0 :::9922 ::: LISTEN 3695/sshd
标签:时间同步 最新 test port inf 同步 语言 系统服务 模型
原文地址:http://blog.51cto.com/10693404/2155072