服务器同步rsync
rsync是同步命令,可以同步本地文件就行备份,也可以通过SSH访问来进行远程同步,可以把源位置的文件复制到目标文件夹内,与CP,SCP命令相似,但它会自动判断文件是否更新,只复制更新的文件,也可以通过参数删除多余多文件,能够以最小的资源传输来现实两个文件夹内的文件相同。
基于本地rsync同步
rsync -av /boot/ /todir/ --delete 这是一条基本的周步语句,把boot目录里的文件同步到todir目录下 # rsync -a /boot /todir/ // 在boot后加/表示同步的是文件夹内的文件,不加/指的是文件夹 --delete //删除同步多余的文件 |
一般情况下rsync是基于SSH服务的
[root@localhost ~]# rsync -az root@192.168.194.252:/boot/ /fromssh/ 这是一包远程同步的语句,把远程机192.168.194.252上的boot文件夹的内容同步以(root身份)到本地的fromssh目录下 root@192.168.194.252's password: 输入root密码 |
我们也可以使用rsync自已的远程协议,来远程同步文件,这样就需要我们rsync软件包,并设置要同步的目录,像共享一样,与SAMBA相似,因为他们都是同一个公司开发的产品。
root@localhost ~]# rpm -q rsync //查看是否安装rsync,本机已安装了 rsync-3.0.6-4.el5_7.1 //没有则需要自己安装。系统光盘中有安装包 [root@localhost ~]# cat /etc/rsyncd_users.db ruser:pwd@123 //建立一个用户文件,来存放我们访问的用户名和密码在里面以“用户名:密码“的方式写入 [root@localhost ~]# chmod 600 /etc/rsyncd_users.db //这个文件是不加密的,可以修改一下权限来禁止别的用户来查看本密码文件的内容 |
下面的是rsync的主配置文件,需要我们自己写入,注意路径和文件名一定要标准如下,里面的内容写如下内容,根据需要可做适当的更改。
[root@localhost ~]# cat /etc/rsyncd.conf uid = nobody //用户ID,指以此用户来访问 gid = nobody //组ID use chroot = yes //禁锢用户只能在共享的目录中 log file = /var/log/rsyncd.log //日志文件的存放位置 pid file = /var/run/rsyncd.pid[tools] //进程文件的存放位置 path = /usr/src //共享目录 read only = yes //只读权限 dont compress =*.gz *.bz2 *.tgz *.zip //这些文件不再进行压缩 auth users = ruser, name //允许访问的用户可用“,”来分开写多个 secrets file = /etc/rsyncd_users.db //指定用户文件,之前我们建好的
|
配置完成后我们就可以启动服务了,记得要加入开机自启,重启后才能正常使用。
[root@localhost ~]# chkconfig rsync on //开机自启 [root@localhost ~]# service xinetd restart //重启服务 [root@localhost ~]# netstat -ln | grep :873 //查看端口 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN |
服务配置好后我们就可以去客户端进行测试了,保证两台机器能PING通的,并关闭防火墙和SELINUX安全,防止它们阻止访问连接。
[root@test1 ~]# rsync ruser@192.168.194.253::tools [root@test1 ~]# mkdir -p /data/fromrsync [root@test1 ~]# rsync -avz --delete ruser@192.168.194.253::tools /data/fromrsync/ |
如果出错的话可以检查下面的这些问题。
# iptables -L //关闭防火墙 # getenforce //查看SELINUX壮态 # chmod 600 /etc/rsyncd_users.db //用户文件的权限 # service xinetd restart //重启服务 # netstat -ln | grep :873 //查看端口壮态 # /etc/xinetd.d/rsync //查看rsync是否开启 disable = yes
|
例:有两台WEB服务器IP分别是
A:202.97.9.9
B:202.22.8.8
需要两台WEB服务器的网站目录(/var/www/html)实时同步。A为主,B为辅
配置的B主机,安装NFS共享服务,把需要同步的文件共享
[root@node2 ~]# cat /etc/exports /var/www/html *(rw,no_root_squash) [root@node2 ~]# service portmap restart [root@node2 ~]# service nfs restart [root@node2 ~]# chkconfig portmap on [root@node2 ~]# chkconfig nfs on |
在A主机中安装inotify-tools来监控同步文件夹,如发现改动立既触发同步,
[root@node1 ~]# yum -y install gcc* httpd [root@node1 ~]# tar -zxvf inotify-tools-3.14.tar.gz -C /usr/src/ [root@node1 ~]# cd /usr/src/inotify-tools-3.14/ [root@node1 inotify-tools-3.14]# ./configure //配置 [root@node1 inotify-tools-3.14]# make //编译 [root@node1 inotify-tools-3.14]# make install //安装 [root@node1 inotify-tools-3.14]# service portmap restart [root@node1 inotify-tools-3.14]# chkconfig portmap on |
把B主机共享的同步文件夹挂载到A主机中,并添加开机自动挂载。
[root@node1 inotify-tools-3.14]# mkdir -p /data/nfsdir [root@node1 inotify-tools-3.14]# grep nfs /etc/fstab //写入开机挂载 192.168.100.20:/webbak/www1 /data/nfsdir nfs defaults 0 0 [root@node1 inotify-tools-3.14]# mount -a [root@node1 inotify-tools-3.14]# df -hT | grep nfs nfs 7.6G 1.1G 6.1G 16% /data/nfsdir //查看挂载 |
编辑一个脚本,如发现A主机目标文件发生变动,立即去同步B主机的文件,并写入起动文件,
[root@node1 ~]# cat /usr/bin/in_rsync.sh #!/bin/bash /usr/local/bin/inotifywait -mrq -e modify,create,move,delete /var/www/html | while read DIR EVENT FILE do /usr/bin/rsync -aHvz --delete /var/www/html/ /data/nfsdir done 上面是脚本的内容,就是通过inotifywait来监控/var/www/html文件夹,如果变动执行rsync同步
|
[root@node1 ~]# chmod 700 /usr/bin/in_rsync.sh 修改权限 [root@node1 ~]# echo "/usr/bin/in_rsync.sh">>/etc/rc.local 写入开机启动文件 |