客户端:192.168.0.22 ,192.168.0.20
服务端:192.168.0.21(源)用来同步其他服务器
我前面写过
http://chenhao6.blog.51cto.com/6228054/1298375inotify+rsync+mutt+msmtp 实现linux文件或者目录自动更新并且实现发邮件给管理员
但是有些功能不能实现,如果让你只更新格外的几台 不全部更新,你怎么办。
这里给出方案
首先192.168.0.22 客户端配置 脚本
1234567891011121314151617181920212223242526#!/bin/bash
yum -y
install
rsync
cat
>>
/etc/rsyncd
.conf << EOF
uid = root
gid = root
use chroot = no
max connections = 100
timeout = 600
pid
file
=
/var/run/rsyucd
.pid
lock
file
=
/var/run/rsyncd
.lock
log
file
=
/var/log/rsyncd
.log
[www]
path =
/home/www
ignore errors
read
only = no
list = no
hosts allow = 192.168.0.21
/255
.255.255.0
auth
users
= www1
secrets
file
=
/etc/www1
.
pwd
EOF
echo
"www1:123"
>>
/etc/www1
.
pwd
chmod
600
/etc/www1
.
pwd
echo
"Welcome to use the rsync services"
>>
/var/rsyncd
.motd
/usr/bin/rsync
--daemon
echo
"/usr/bin/rsync --daemon"
>>
/etc/rc
.
local
192.168.0.20 客户端配置 脚本
12345678910111213141516171819202122232425262728#!/bin/bash
yum -y
install
rsync
cat
>>
/etc/rsyncd
.conf << EOF
uid = root
gid = root
use chroot = no
max connections = 100
timeout = 600
pid
file
=
/var/run/rsyucd
.pid
lock
file
=
/var/run/rsyncd
.lock
log
file
=
/var/log/rsyncd
.log
[www]
path =
/home/www
ignore errors
read
only = no
list = no
hosts allow = 192.168.0.21
/255
.255.255.0
auth
users
= www1
secrets
file
=
/etc/www1
.
pwd
EOF
echo
"www1:123"
>>
/etc/www1
.
pwd
chmod
600
/etc/www1
.
pwd
echo
"Welcome to use the rsync services"
>>
/var/rsyncd
.motd
/usr/bin/rsync
--daemon
echo
"/usr/bin/rsync --daemon"
>>
/etc/rc
.
local
11
下面关键的时刻到了
1service iptables start
2台服务器都运行
12/usr/bin/rsync
--address=192.168.0.22 --port=998 --daemon 他自己的端口
/usr/bin/rsync
--address=192.168.0.21 --port=998 --daemon 更新源端口

这里就手动指定端口了
服务端192.168.0.21的配置
12345678910111213141516171819202122yum
install
-y
rsync
touch
/root/rsync
.sh
cat
>
/root/rsync
.sh<<EOF
#!/bin/bash
ip=$(
cat
/root/ip
.txt)
src=
/home/www/
date
=`
date
+%Y-%m-%d`
des1=www
user1=www1
for
host
in
$ip
do
rsync
-vzrtopg --delete --port=998 --progress ${src} ${user1}@${host}::${des1} --password-
file
=
/etc/www1
.
pwd
&&
if
[ $? -
eq
0 ]
then
echo
"${host} , $date 更新成功"
>>
/root/rsync
.log 2>&1
else
echo
"${host} , $date 更新失败"
>>
/root/rsync
.log 2>&1
fi
done
123echo
"123"
>>
/etc/www1
.
pwd
chmod
600
/etc/www1
.
pwd
chmod
+x
/root/rsync
.sh
home/www目录权限必须是root.root 才行
下面截图 因为是真实环境 目录屏蔽了

这里192.168.0.21 是root@ceshi 主机名字
root@localhost root@abc 分别为192.168.0.22,192.168.0.20主机名字
下面开始测试

2台主机那边都是空的
这里再说下ip.txt 里面有什么内容
123[root@ceshi data]
192.168.0.22
192.168.0.20

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748让我们运行脚本,见证奇迹
sh
/root/rsync
.sh
829 100% 809.57kB
/s
0:00:00 (xfer
wh
/cq
*
3877 100% 3.70MB
/s
0:00:00 (xfer
wh
/nohup
.out
1306196 100% 41.52MB
/s
0:00:00 (xfer
wh
/server
.ver
7287 100% 229.56kB
/s
0:00:00 (xfer
wh
/server
.ver.ver
37 100% 1.17kB
/s
0:00:00 (xfer
wh
/wh
*
13698828 100% 14.78MB
/s
0:00:00 (xfer
whserver
/wh
*
11259096 100% 6.72MB
/s
0:00:01 (xfer
wh
/wh
*
21539939 100% 10.81MB
/s
0:00:01 (xfer
wh
/11233/
wh
/abc/
wh
/core/
wh
/data/
wh
/data/conf_
*
1182 100% 1.28kB
/s
0:00:00 (xfer
wh
/data/server
.ver
7287 100% 7.91kB
/s
0:00:00 (xfer
wh
/data/server
.ver.ver
37 100% 0.04kB
/s
0:00:00 (xfer
wh
/data/server
.ver.zip
3063 100% 3.32kB
/s
0:00:00 (xfer
wh
/data/versions
.xml
564 100% 0.61kB
/s
0:00:00 (xfer
wh
/data/gameconfs/
wh
/data/gameconfs/
*
6939 100% 7.51kB
/s
0:00:00 (xfer
wh
/data/gameconfs/
*
84401 100% 91.07kB
/s
0:00:00 (xfer
wh
/data/gameconfs/
*
106431 100% 114.59kB
/s
0:00:00 (xfer
wh
/data/gameconfs/
*
251564 100% 269.08kB
/s
0:00:00 (xfer
wh
/data/gameconfs/
*
1538 100% 1.65kB
/s
0:00:00 (xfer
wh
/data/gameconfs/
* 30796 100% 32.90kB
/s
0:00:00 (xfer
sent 19301219 bytes received 2275 bytes 4289665.33 bytes
/sec
total size is 96052675 speedup is 4.98
sending incremental
file
list
sent 2501 bytes received 23 bytes 5048.00 bytes
/sec
total size is 96052675 speedup is 38055.73yinwe
这里的目录我都屏蔽了,公司隐秘但是技术可以分享
123[root@ceshi data]
192.168.0.22 , 2013-11-09 更新成功
192.168.0.20 , 2013-11-09 更新成功

这里大家有没有发现问题,防火墙开着的情况下为啥能访问,其实我添加端口进去了
12345678910111213141516*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-I INPUT -p tcp --dport 998 -j DROP
-I INPUT -s 192.168.0.21
/32
-p tcp --dport 998 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
只允许21能访问998端口
这里实现了一起同步,如果个别同步怎么做,其实很简单,脚本已经出来了,只要修改ip.txt就行了
这里我新建个文件夹

1234[root@ceshi whserver]
192.168.0.22
123456[root@ceshi whserver]
sending incremental
file
list
./
abc/
sent 2523 bytes received 30 bytes 5106.00 bytes
/sec
total size is 96052675 speedup is 37623.45

这样的效果也达到了,安全也达到了,但是如果中心就做热备份2需要2台机子,怎么办,我们只需要在
123vi
/etc/rsyncd
.conf
hosts allow = 192.168.0.21
/255
.255.255.255 192.168.0.22
/255
.255.255.255
防火墙也是一样的
123-I INPUT -p tcp --dport 998 -j DROP
-I INPUT -s 192.168.0.21
/32
-p tcp --dport 998 -j ACCEPT
-I INPUT -s 192.168.0.20
/32
-p tcp --dport 998 -j ACCEPT
这样既保证了安全也保证了另外的需求,也可以用监控实时监控只要移动修改删除增加,都会自动同步,但是不建议,如果你只需要更新几台服务器 就用我这种办法。实验已经完成,已经同步测试。需求达到,并且端口可以自定义
12/usr/bin/rsync
--address=192.168.0.22--port=998 --daemon 他自己的端口
/usr/bin/rsync
--address=192.168.0.21 --port=998 --daemon 更新源端口