ntp服务的重要性本文不再赘述,有兴趣的可以百度或者鸟哥的书翻一下。这里跟大家分享一下如何配置ntp服务器  
原理:让一部主要的Primary Server校对时间---->开放网络服务让Clients主机来连接 ----->Clients自己调整时间。    
有关ntp服务的配置参数    
ntp服务进程监听在UDP的123端口。    
/usr/share/zoneinfo里面存放着世界各个地区的时间区域数据(timezone data),不要企图用文本编辑器直接打开!    
/etc/sysconfig/clock  Linux开机后会自动读取该文件中的数据来设定系统时间,如在中国,通常该项为    
                                    ZONE="Asia/Shanghai"    
/usr/sbin/ntpd   服务端启动ntp的服务名称    
/usr/sbin/ntpdate  客户端启动校对时间的命令,注意这里的路径/usr/sbin,通常ntpdate命令是需要写入crontab列表中,千万别写错路径,曾经有血淋淋的教训。

ntp服务器端主配置文件 /etc/ntp.conf  (注意配置ntp服务器端的前提是你需要有一个上游时间服务器真正运行,这里笔者用的是阿里的时间服务器=110.75.186.249,IP地址: 110.75.186.249浙

江省杭州市 阿里巴巴)

/etc/ntp.conf配置文件主要定义了三段  
1、server 定义了你上一层ntp服务器的地址    
格式: server [IP OR HOSTNAME] [prefer]    
2、restrict  管理和控制该ip地址的权限    
格式: restrict [IP] mask [netmask_IP掩码][parameter]    
参数:说常用的    
nomodify:允许客户端同步服务器端的时间,不允许客户端修改服务器端时间。    
3、driftfile  用来记录与server中的上一层服务器的差异时间    
格式:driftfile /PATH/TO/FILE  (使用绝对路径) 
FILE档案记录的数值单位为百万分之一秒 ppm

这是我的ntp服务器的主配置文件参数

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not  
# permit the source to query or modify the service on this system.    
restrict default kod nomodify notrap nopeer noquery    
restrict -6 default kod nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could  
# be tightened as well, but to do so would effect some of    
# the administrative functions.    
restrict 127.0.0.1    
restrict -6 ::1

# Hosts on local network are less restricted.  
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap    
restrict 192.168.1.0 mask 255.255.255.0 nomodify     # 我允许192.168.1.0网段内的客户端主机从我这里同步时间    
# Use public servers from the pool.ntp.org project.    
# Please consider joining the pool (http://www.pool.ntp.org/join.html).    
#server 0.centos.pool.ntp.org iburst    
#server 1.centos.pool.ntp.org iburst    
#server 2.centos.pool.ntp.org iburst    
#server 3.centos.pool.ntp.org iburst 
server 110.75.186.249 prefer    #上层服务器我用的是110.75.186.249    
实验环境,一台CentOS6.5操作系统的主机当做ntp服务器提供服务,另外找两台主机当做客户端同步时间。    
主ntp服务器 192.168.1.141    
当前时间 Sat Dec 20 23:34:34 CST 2014    
1、ntp服务器yum install ntp即可    
2、修改配置文件定义了如上的参数    
3、service ntpd start    &&   chkconfig ntpd on   最好加入开机启动项中    
4、netstat -tunlp | grep  123 是否有ntpd服务进程启动

客户端ntp服务器1 192.168.1.111  
当前时间  Sat Dec 20 22:27:22 CST 2014  肯定与主服务器不同步    
客户端ntp服务器2 192.168.1.115    
当前时间  Sat Dec 20 22:34:32 CST 2014 肯定也与主服务器不同步

两个客户端使用ntpdate 命令同步主服务器看看是否有效果  
第1台返回结果:20 Dec 23:38:58 ntpdate[2269]: step time server 192.168.1.141 offset 4102.953608 sec    
第2台返回结果:20 Dec 23:39:00 ntpdate[2149]: step time server 192.168.1.141 offset 3798.445042 sec    
经试验,两台时间均与服务器保持一致。至此ntp服务器建立完成!    
P.S还可以在两台客户端节点上使用crontab命令来实施日常同步时间    
*/3 * * * * /usr/sbin/ntpdate 192.168.1.141 &> /dev/null  定义每3分钟同步一次时间

 

这第一大步算是迈出去了,剩下还有一大步就是如何使用ansible工具管理呢?

简介ansible:基于python语言开发出来的agentless(无agent节点)命令发布、管理工具,它具有幂等性而且基于模块进行工作。

好,开始在控制节点上部署ansible,环境是CentOS6.5(这里注意下,需要你配置好epel源,这里笔者提供一个http://mirrors.aliyun.com/epel/6Server/x86_64/)

1、yum install ansible
(由于ansible依赖python开发的,因此yum安装ansible时候同时也会安装python的几个框架,分别有
1、python-jinja2 专门来使用文本写playbook,2、python-paramiko 基于ssh连接agentless的客户端。)
2、默认安装ansible,主配置文件是/etc/ansible/ansible.cfg
         Host inventory文件是/etc/ansible/hosts
         主程序/usr/bin/ansible
         /usr/bin/ansible-playbook运行playbook的ansible程序
         /usr/bin/ansible-vault 加密存放ansible的playbook文件
ansible <主机模式>  [-m MODULE] -a 'MODULE_ARGS'
3、vim /etc/ansible/hosts文件,可以将文件清空,定义属于自己的配置文件。如:
[hbhosts]
192.168.1.111
192.168.1.115
(这里,如果你控制主机上没有安装sshpass,当你使用ansible命令时,会提醒你先安装sshpass yum install sshpass即可)
4、在使用ansible控制之前,默认它需要你把控制主机生成的ssh-keygen复制到各被控制主机上的,不然就要加-k 选项
如:
[root@localhost ~]# ansible hbhosts -m command -a 'date' -k
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (i.e. yum update gmp).

SSH password:
192.168.1.111 | FAILED => Authentication failure.  (这里报错的原因是我这台主机密码并不是输入的哪一个)
192.168.1.115 | success | rc=0 >>
Sun Dec 21 15:26:58 CST 2014
如何解决这个问题呢?
可以这样设置,还是编辑主配置文件
192.168.1.111  ansible_ssh_pass=h2026825
192.168.1.115  ansible_ssh_pass=mageedu  #甚至还可以以其他用户来连接ansible_ssh_user=用户名的方法
这里就报出了结果
192.168.1.115 | success | rc=0 >>
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  434M   19G   3% /
tmpfs                 116M     0  116M   0% /dev/shm
/dev/sda1             194M   30M  155M  16% /boot
/dev/mapper/vg0-usr   9.9G  2.4G  7.0G  26% /usr
/dev/mapper/vg0-var    20G  373M   19G   2% /var

192.168.1.111 | success | rc=0 >>
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  1.2G   18G   7% /
tmpfs                 116M     0  116M   0% /dev/shm
/dev/sda1             194M   30M  155M  16% /boot
/dev/mapper/vg0-usr   9.9G  2.4G  7.0G  26% /usr
/dev/mapper/vg0-var    20G  412M   19G   3% /var
执行成功

5、如果想查看ansible支持的模块, ansibledoc -l 列出所有支持的模块 ,想查看单一模块支持的具体选项
ansibledoc [模块名称]即可
如何利用ansible添加用户叫centos并设定密码:
第一步:生成一个密码串
# openssl passwd -1 -salt `openssl rand -hex 4`
Password:
$1$6b0ba54d$Ia6IPhDOPsr6sR9dqTptr1
第二步:创建centos用户
[root@localhost ~]# ansible hbhosts -m user -a 'name=centos password=$1$6b0ba54d$Ia6IPhDOPsr6sR9dqTptr1'
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (i.e. yum update gmp).

192.168.1.115 | success >> {
    "changed": true,
    "comment": "",
    "createhome": true,
    "group": 502,
    "home": "/home/centos",
    "name": "centos",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 502
}


192.168.1.111 | success >> {
    "changed": true,
    "comment": "",
    "createhome": true,
    "group": 502,
    "home": "/home/centos",
    "name": "centos",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 502
}
分别创建成功
案例1、
修改ansible使用其他用户
编辑主配置文件
192.168.1.115  ansible_ssh_pass=mageedu ansible_ssh_user=centos
再次执行命令查看
[root@localhost ~]# ansible hbhosts -m command  -a 'whoami'
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (i.e. yum update gmp).

192.168.1.115 | success | rc=0 >>
centos     #已经变成了centos

192.168.1.111 | success | rc=0 >>
root

案例2、利用ansible复制功能实现被控主机都有对应文件,比如把python的tar包复制到多节点的tmp目录下
[root@localhost ~]# ansible hbhosts -m copy -a 'src=/root/Python-2.7.6.tar.xz dest=/tmp/'
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (i.e. yum update gmp).

192.168.1.115 | success >> {
    "changed": true,
    "checksum": "8321636af2acbeaa68fc635d7dda7369ed446a80",
    "dest": "/tmp/Python-2.7.6.tar.xz",
    "gid": 502,
    "group": "centos",
    "md5sum": "bcf93efa8eaf383c98ed3ce40b763497",
    "mode": "0664",
    "owner": "centos",
    "size": 10431288,
    "src": "/home/centos/.ansible/tmp/ansible-tmp-1419151990.97-242090512088858/source",
    "state": "file",
    "uid": 502
}

192.168.1.111 | success >> {
    "changed": true,
    "checksum": "8321636af2acbeaa68fc635d7dda7369ed446a80",
    "dest": "/tmp/Python-2.7.6.tar.xz",
    "gid": 0,
    "group": "root",
    "md5sum": "bcf93efa8eaf383c98ed3ce40b763497",
    "mode": "0644",
    "owner": "root",
    "size": 10431288,
    "src": "/root/.ansible/tmp/ansible-tmp-1419151990.97-280490291820146/source",
    "state": "file",
    "uid": 0
}

案例三、利用ansible给各多节点部署crontab,让多节点被控制主机每隔三分钟同步一次时间服务器(注意在部署crontab之前需要将在crontabst ~]# ansible hbhosts -m cron -a 'name="sync time" minute="*/3" job="/usr/sbin/ntpdate 192.168.1.141"'
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (i.e. yum update gmp).

192.168.1.115 | success >> {
    "changed": true,
    "jobs": [
        "sync time"
    ]
}

192.168.1.111 | success >> {
    "changed": true,
    "jobs": [
        "sync time"
    ]
}

再看各节点的信息

wKioL1SWsALSS69vAABb7pT2YbA884.jpg

wKioL1SWsDWjpkLxAABsKgQA5n0081.jpg

执行成功