nhenbei 发表于 2015-9-16 11:36:51

puppet使用rsync模块同步目录和文件

puppet使用rsync模块同步目录和文件 2013-09-23 14:28:57

  分类: LINUX
  


环境说明:
OS :    CentOS5.4                        i686
puppet版本:                               2.7.14
puppetmaster.manzuoinfo.com            192.168.0.12
puppet1.manzuoinfo.com               192.168.0.64
rsync server                           192.168.0.12

同步需求简介:
需要把 rsync server 192.168.0.12 上的 /tmp/default 和/tmp/test 目录 分别同步到 puppet1.manzuinfo.com 192.168.0.12 上的 /tmp/test1 下和/tmp/test。


  点击(此处)折叠或打开


[*]# cd /tmp/
[*]# ls
[*]default test
[*]# cd test
[*]/tmp/test
[*]# ls -l
[*]total 4
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 10.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 1.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 2.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 3.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 4.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 5.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 6.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 7.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 8.txt
[*]-rw-r--r-- 1 root root 0 Sep 22 17:32 9.txt
[*]-rw-r--r-- 1 root root 17 Sep 22 17:32 test.txt
[*]
[*]
[*]# pwd
[*]/tmp/default
[*]# ls
[*]de.txt

一、下载安装rsync 模块
puppet 的rsync 模块在GitHub位置 https://github.com/onyxpoint/pupmod-rsync ,大家可以上去查看。


  点击(此处)折叠或打开


[*]# cd /etc/puppet/modules/
[*]
[*]# git clone https://github.com/onyxpoint/pupmod-concat && mv pupmod-concat concat
[*]# git clone https://github.com/onyxpoint/pupmod-rsync && mv pupmod-rsync rsync

说明:我这里是使用git,如果机器没有安装,可以使用yum -y install git 来安装,如不想安装git可以下载zip压缩包.解压到相应目录.
注意:在server, clent 端都下载安装concat 和rsync 模块。
二、服务端配置文件

1). 新建node.pp


  点击(此处)折叠或打开


[*]# pwd
[*]/etc/puppet/manifests
[*]
[*]# cat node.pp
[*]node 'puppetmaster.manzuoinfo.com' {
[*]include 'rsync::server'
[*]rsync::server::global { 'global':
[*]address => '192.168.0.12'
[*]}
[*]
[*]
[*]rsync::server::section { 'default':
[*]comment => 'The default file path',
[*]path => '/tmp/default',
[*]hosts_allow => '192.168.0.64'
[*]}
[*]
[*]
[*]rsync::server::section { 'test':
[*]# auth_users => 'testuser',
[*]   comment => 'Test comment',
[*]   path => '/tmp/test',
[*]   hosts_allow => '192.168.0.64',
[*]   outgoing_chmod => 'o-w'
[*]}
[*]}
[*]
[*]
[*]node 'puppet1.manzuoinfo.com' {
[*]include 'rsync'
[*]}

2). 新建modules.pp 载入rsync 模块


  点击(此处)折叠或打开


[*]# pwd
[*]/etc/puppet/manifests
[*]
[*]# cat modules.pp
[*]import "rsync"

3). 把 node.pp modules.pp 包进site.pp


  点击(此处)折叠或打开


[*]# cat /etc/puppet/manifests/site.pp
[*]import 'node.pp'
[*]import 'modules.pp'

4). 测试配置文件


  点击(此处)折叠或打开


[*]# puppet agent --server=puppetmaster.manzuoinfo.com --test -v
[*]info: Caching catalog for puppetmaster.manzuoinfo.com
[*]info: /Stage/Rsync/Tidy: File does not exist
[*]info: Applying configuration version '1379830750'
[*]notice: /Stage/Rsync/File/ensure: created
[*]notice: /Stage//Node/Rsync::Server::Section/Concat_fragment/content: content changed '' to '
[*]comment = The default file path
[*]path = /home/sky
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]'
[*]notice: /Stage//Node/Rsync::Server::Global/Concat_fragment/content: content changed '' to 'pid file = /var/run/rsyncd.pid
[*]syslog facility = daemon
[*]port = 873
[*]address = 192.168.0.12
[*]'
[*]notice: /Stage//Node/Rsync::Server::Section/Concat_fragment/content: content changed '' to '
[*]comment = Test comment
[*]path = /home/skywu
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]'
[*]notice: /Stage/Rsync::Server/Concat_build/target: global*.section used for ordering
[*]notice: /Stage/Rsync::Server/File/mode: mode changed '0644' to '0400'
[*]notice: /Stage/Rsync::Server/File/content: audit change: newly-recorded value {md5}2148062cf8d2f7220279fd0ca07b9329
[*]info: /Stage/Rsync::Server/File: Scheduling refresh of Service
[*]notice: /Stage/Rsync::Server/Service/ensure: ensure changed 'stopped' to 'running'
[*]err: /Stage/Rsync::Server/Service: Failed to call refresh: Could not stop Service: Execution of '/bin/kill `cat \`grep "pid file" /etc/rsyncd.conf | cut -f4 -d' '\``' returned 1: at /etc/puppet/modules/rsync/manifests/server.pp:56
[*]info: Creating state file /var/lib/puppet/state/state.yaml
[*]notice: Finished catalog run in 2.70 seconds
[*]#
[*]
[*]
[*]
[*]
注意:err: 这里出现了一个错误,请根据自己的情况来修改停止rsync,例如:
    stop => "ps -ef | grep sync |awk '{print $2}'|xargs kill -9",
5). 在server 端生成rsync配置


  点击(此处)折叠或打开


[*]# puppetd --test --server puppetmaster.manzuoinfo.com
[*]info: Caching catalog for puppetmaster.manzuoinfo.com
[*]notice: /Stage/Rsync/Tidy: Tidying File
[*]info: /File: Duplicate generated resource; skipping
[*]info: Applying configuration version '1379837152'
[*]notice: /Stage//Node/Rsync::Server::Section/Concat_fragment/content: content changed '
[*]comment = The default file path
[*]path = /home/sky
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]' to '
[*]comment = The default file path
[*]path = /tmp/default
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]'
[*]notice: /Stage//Node/Rsync::Server::Section/Concat_fragment/content: content changed '
[*]comment = Test comment
[*]path = /home/skywu
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]' to '
[*]comment = Test comment
[*]path = /tmp/test
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]'
[*]notice: /Stage/Rsync::Server/Concat_build/target: global*.section used for ordering
[*]notice: /Stage/Rsync::Server/File/mode: mode changed '0644' to '0400'
[*]notice: /Stage/Rsync::Server/File/content: audit change: previously recorded value {md5}2148062cf8d2f7220279fd0ca07b9329 has been changed to {md5}8063eb4c3129b055fb0106eb2cfd7912
[*]info: /Stage/Rsync::Server/File: Scheduling refresh of Service
[*]info: /Stage/Rsync::Server/File: Scheduling refresh of Service
[*]notice: /Stage/Rsync::Server/Service/ensure: ensure changed 'stopped' to 'running'
[*]notice: /Stage/Rsync::Server/Service: Triggered 'refresh' from 2 events
[*]notice: Finished catalog run in 3.66 seconds
注意:/etc/rsyncd.conf 是生成的,而不是手动创建的。
内容如下:


  点击(此处)折叠或打开


[*]# cat /etc/rsyncd.conf
[*]pid file = /var/run/rsyncd.pid
[*]syslog facility = daemon
[*]port = 873
[*]address = 192.168.0.12
[*]
[*]comment = The default file path
[*]path = /tmp/default
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]
[*]comment = Test comment
[*]path = /tmp/test
[*]use chroot = false
[*]max connections = 0
[*]max verbosity = 1
[*]lock file = /var/run/rsyncd.lock
[*]read only = true
[*]write only = false
[*]list = false
[*]uid = root
[*]gid = root
[*]outgoing chmod = o-w
[*]ignore nonreadable = true
[*]transfer logging = true
[*]log format = "%o %h [%a] %m (%u) %f %l"
[*]dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war
[*]hosts allow = 192.168.0.64
[*]hosts deny = *
[*]#

6). 启动rsync 服务


  点击(此处)折叠或打开


[*]# /etc/init.d/xinetd restart
[*]Stopping xinetd: [ OK ]
[*]Starting xinetd: [ OK ]
[*]
[*]# ps -ef | grep rsync
[*]root 13227 1 0 16:16 ? 00:00:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
[*]root 13266 3142 0 16:19 pts/0 00:00:00 grep rsync

7). 客户端需要执行rsync类中,我们编辑puppetmaster上的代码文件,添加default 和test。


  点击(此处)折叠或打开


[*]# vim /etc/puppet/modules/rsync/manifests/init.pp
[*]class rsync {
[*]package { "rsync": ensure => "latest" }
[*]
[*]# This define provides a useful abstraction for common rsync client side
[*]# activities.
[*]exec { "rsync_stub":
[*]    command => "/bin/true",
[*]    refreshonly => true
[*]}
[*]
[*]
[*]file { '/etc/rsync':
[*]    ensure => 'directory',
[*]    owner => 'root',
[*]    group => 'root',
[*]    mode => '750'
[*]}
[*]
[*]
[*]tidy { '/etc/rsync':
[*]    size => "0b",
[*]    recurse => 'true',
[*]    rmdirs => 'true'
[*]}
[*]
[*]
[*]rsync { 'default':
[*]    source => 'default',
[*]    target => '/tmp/test1',
[*]    server => '192.168.0.12'
[*]}
[*]
[*]
[*]rsync { 'test':
[*]    source => 'test',
[*]    target => '/tmp/test',
[*]    server => '192.168.0.12'
[*]}
[*]}

三、puppet1 客户端测试


  点击(此处)折叠或打开


[*]# puppetd --test --server puppetmaster.manzuoinfo.com
[*]info: Caching catalog for puppet1.manzuoinfo.com
[*]notice: /Stage/Rsync/Tidy: Tidying File
[*]info: /File: Duplicate generated resource; skipping
[*]info: Applying configuration version '1379841152'
[*]notice: /Stage/Rsync/Rsync/do: executed successfully
[*]notice: Finished catalog run in 0.75 seconds
[*]
[*]
[*]或者用命令:
[*]# puppet agent --test --server puppetmaster.manzuoinfo.com



  点击(此处)折叠或打开


[*]# pwd
[*]/tmp/test1
[*]# ls
[*]de.txt
[*]# pwd
[*]/tmp/test
[*]# ls -l
[*]total 4
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 10.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 1.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 2.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 3.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 4.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 5.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 6.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 7.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 8.txt
[*]-rw-r--r-- 1 root root 0 Sep 23 11:42 9.txt
[*]-rw-r--r-- 1 root root 17 Sep 23 11:42 test.txt

在客户端查看/tmp/test 和 /tmp/test1 目录及文件已经同步过来了。
页: [1]
查看完整版本: puppet使用rsync模块同步目录和文件