设为首页 收藏本站
查看: 170|回复: 0

[经验分享] rsync数据同步工具指南

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-2 08:37:50 | 显示全部楼层 |阅读模式
                      
一、     rsync简介
remote synchronize,rsync是一款开源的、快速的、多功能的、可实现全量或增量的本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平。官方网站:http://www.samba.org/ftp/rsync/rsync.html
一个rsync相当于scp,cp,rm,而且还优于他们每一个命令
二、     特性
  支持拷贝特殊文件如链接文件,设备等。
  可以有排除指定文件或目录同步的功能,相当于打包命令tar 的排除功能。
  可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变
  可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高,tar -N。
  可以使用rcp,rsh,ssh 等方式来配合传输文件(Rsync 本身不对数据加密)
  可以通过socket(进程方式)传输文件和数据(服务器和客户端)
  支持匿名或认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份及镜像
三、     rsync工作场景说明
  NFS文件的一主一备环境,有些项目和网站限定了不能做NFS的DRBD双机方案,所以可以考虑用rsync作一个冗余NFS机器出来(--delete参数使用时应该谨慎)
  rsync+inotify实时同步系统,有些网站由于网络环境的制约,比如机器是随着网站规模的不断扩大才逐渐增多的进入IDC托管机房的,机器比较分散,而暂时又不能停掉业务整合服务器之前,这之前的方案可以考虑采用rsync+inotify或sersync
  线上的SVN与线上机器的代码之前的同步,像我们的SVN服务器的代码量还是比较大的,而且代码更新比较频繁,所以我们只会能过rsync结合自己开发的程序同步少量稳定的代码到线上
四、     rsync工作方式
1.  Local(此时类似于cp、mv命令的功能)。
rsync [OPTION...] SRC... [DEST]
rsync -avz /etc/hosts /tmp          =====cp
rsync -avz --delete /data/ /tmp/    =====mv
2.  remote shell(此时类似于scp命令的功能)。
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
rsync -avzP -e "ssh -p 22" /tmp/ root@192.168.80.100:/tmp
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
rsync -avzP -e "ssh -p 22" root@192.168.80.100:/tmp/ /tmp
3.  rsync daemon:以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能)。
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
      rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
      rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
n  rsync常用参数说明
  -v, --verbose 详细模式输出
  -z, --compress 对备份的文件在传输时进行压缩处理
  -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
-r, --recursive 对子目录以递归模式处理
-t, --times 保持文件时间信息
-o, --owner 保持文件属主信息
-p, --perms 保持文件权限
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-l, --links 保留软链结
  -e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
  --exclude=PATTERN 指定排除不需要传输的文件模式
  --exclude-from=FILE 排除FILE中指定模式的文件
  --bwlimit=RATE   指定传输速率
  --delete   无差异同步(谨慎使用,尽量不用)
推:本地有,远端有;本地没有,删除远端独有(需要备份远端数据)
拉:远端有,本地有;远端没有,删除本地独有(需要备份本地数据)
五、     快速部署代码
cat >/etc/rsyncd.conf<<EOF
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
#port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.80.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = backup server by oldboy
path = /backup
#exclude = test/test.php
EOF
rsync --daemon
netstat -lntup|grep rsync
useradd rsync -s /sbin/nologin -M
mkdir /backup
chown -R rsync /backup
echo "rsync_backup:oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
echo "rsync --daemon" >>/etc/rc.local
tail -1 /etc/rc.local
客户端操作
echo "oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
cat /etc/rsync.password
ls -ld /etc/rsync.password
推:rsync -avz /tmp/ rsync_backup@192.168.80.100::backup --password-file=/etc/rsync.password
拉:rsync -avz rsync_backup@192.168.80.100::backup /tmp/ --password-file=/etc/rsync.password
六、     详细说明:rsync的安装与配置(即工作方式3:rsync daemon)
1.  服务端操作
n  安装rsync(默认已安装,在备份服务器上操作)
[iyunv@liwenbin ~]# rpm -aq rsync
rsync-3.0.6-12.el6.x86_64
n  rsync配置文件
rsync服务器主要有三个配置文件:rsyncd.conf,rsyncd.secrets和rsyncd.motd,而rsync安装后并没有自动创建相关配置文件,因此我们还需手动创建
cat /etc/rsyncd.conf
uid = rsync # 备份以什么身份进行,用户ID  
gid = rsync # 备份以什么身份进行,组ID
#注意这个用户ID和组ID,如果要方便的话,可以设置成root,这样rsync几乎就可以读取任何文件和目录了,但是也带来安全隐患。建议设置成只能读取你要备份的目录和文件即可。
use chroot = no
max connections = 2000                    #最大连接数,0代表没有限制
#port = 873                               #默认端口873
pid file = /var/run/rsyncd.pid           #运行进程的ID写到哪里
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log           #日志记录文件
ignore errors                             # 忽略一些无关的IO错误
read only = false                         # 设置为非只读,即可以传至服务器的相应目录。
list = false                              # 不允许列文件
hosts allow = 192.168.80.0/24       #允许连接服务器的主机IP地址,如果多个ip则用空格隔开
hosts deny = 0.0.0.0/32             #禁止连接服务器的主机IP地址,也可为*,表示所有。
auth users = rsync_backup           # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/rsync.password      # 认证文件名,用来存放密码
[backup]
comment = backup server by oldboy
path = /backup                            # 需要备份的目录
#exclude = test/ test.php      #设置不同步的目录或文件用空格隔开
n  启动rsync进程
[iyunv@liwenbin ~]# rsync --daemon
[iyunv@liwenbin ~]# ps -ef|grep rsync|egrep -v grep
root       1956      1  0 19:21 ?        00:00:00 rsync –daemon
[iyunv@liwenbin ~]# netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:873        0.0.0.0:*          LISTEN      1956/rsync         
tcp        0      0 :::873             :::*               LISTEN      1956/rsync
[iyunv@liwenbin ~]# ss -lntup|grep rsync
tcp    LISTEN     0      5         :::873            :::*      users:(("rsync",1956,5))
tcp    LISTEN     0      5         *:873              *:*      users:(("rsync",1956,3))
[iyunv@liwenbin ~]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   1956 root    3u  IPv4  12983      0t0  TCP *:rsync (LISTEN)
rsync   1956 root    5u  IPv6  12984      0t0  TCP *:rsync (LISTEN)
n  杀进程
pkill rsync
killall rsync                #需要连续杀
kill `cat /var/run/rsyncd.pid `     #杀进程号
n  仅允许通过某个IP地址访问
rsync --daemon --address=192.168.80.100
n  创建用户
[iyunv@liwenbin ~]# useradd rsync -s /sbin/nologin –M
n  创建备份目录并授权
[iyunv@liwenbin ~]# mkdir /backup
[iyunv@liwenbin ~]# chown -R rsync /backup
n  创建、编辑并授权密码文件
[iyunv@liwenbin ~]#echo "rsync_backup:oldboy" >/etc/rsync.password
[iyunv@liwenbin ~]# chmod 600 /etc/rsync.password
n  加入开机自启动
[iyunv@liwenbin ~]# echo "rsync --daemon" >>/etc/rc.local
[iyunv@liwenbin ~]# tail -1 /etc/rc.local
2.  客户端操作
n  创建、编辑并授权密码文件
echo "oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
cat /etc/rsync.password
ls -ld /etc/rsync.password
n  数据备份
推:rsync -avz /tmp/ rsync_backup@192.168.80.100::backup --password-file=/etc/rsync.password
拉:rsync -avz rsync_backup@192.168.80.100::backup /tmp/ --password-file=/etc/rsync.password
注意:推拉都是客户端操作
3.  进程管理
n  杀进程
pkill rsync
killall rsync                #需要连续杀
kill -HUP `cat /var/run/rsyncd.pid `   #平滑杀死
kill -USR2 `cat /var/run/rsyncd.pid    #平滑杀死
kill `cat /var/run/rsyncd.pid `     #杀进程号
kill -9 rsync               #强制杀死(建议禁止使用)
n  安全优化选项
rsync --daemon --address=192.168.80.100     #仅允许通过服务端某个IP地址同步
七、   rsync排错思路
1.  rsync服务端排错思路
1)   查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf
2)   查看配置文件里host allow,host deny,允许的ip网段是否是允许客户端访问的ip网段
3)   查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属和组)
4)   查看rsync服务是否启动,查看命令为:ps -ef|grep rsync。端口是否存在netstat -lnt|grep 873
5)   查看iptables防火墙和selinux是否开启允许rsync服务通过,也可考虑交闭
6)   查看服务端rsync配置的密码文件是否为600权限,密码文件格式是否正确
7)   如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下目录有可读写的权限
2.  Rsync客户端排错思路
8)   查看客户端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,注意:仅需要有密码,并且和服务端的密码一致。
9)   用telnet连接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻档)。telnet 192.168.1.111 873
10)  客户端执行命令是rsync –avzrtopgP  rsync_backup@192.168.1.111::dingjian/test/  /test/ --password-file=/etc/rsync.password
注:若地址中使用两个分号“::”,将直接使用rsyncd的用户认证方式;
    若地址中使用一个“:”号,将启用ssh模式进行用户验证,需要服务端开启sshd服务;
七、     rsync优缺点
1.  rsync优点
增量备份同步,支持socket(daemon),集中备份
2.  rsync缺点
1)   大量小文件同步的时候,比对时间较长,有的时候,rsync进程停止
解决:a.打包成一个文件同步;
b.drbd(文件系统同步,复制block)
2)   同步大文件,10G这样的大文件有时也会出问题,中断。未完成同步前,是隐藏文件,同步完成后改为正常文件
八、     部署rsync脚本
#!/bin/sh
#time:2015-12-4
#auther:liwenibn
#function:quick install rsync
#qq:1935845114
################################
#define
CHECK=` rpm -aq rsync | wc -l `
HOSTIP="192.168.80.0/24"
PASSWORD="123456"
USER="rsync_user"
SYS_USER="rsync"
PWD_FILE=/etc/rsync.password
DATADIR=/data/www

#examine
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
if [ "$CHECK" -eq 1 ]
        then
                action "rsync is installed" /bin/true && exit 1
        else
                action "rsync is not installed"
                echo "Yum install rsync..."
                yum install rsync -y
                [ $? -eq 0 ] && action "rsync is installed" /bin/true
fi
rm -f /etc/rsyncd.conf && cat >>/etc/rsyncd.conf<<EOF
uid = $SYS_USER
gid = $SYS_USER
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[www]
path = $DATADIR
ignore errors
read only = true
list = false
hosts allow = $HOSTIP
hosts deny = 0.0.0.0/32
auth users = backup
secrets file = $PWD_FILE
EOF
if [ ! -d $DATADIR ]
        then
                mkdir -p $DATADIR
fi
action "$datadir exist" /bin/true
if [ ! -f $PWD_FILE ]
        then
                echo "$USER:$PASSWORD" > $PWD_FILE && chmod 600 $PWD_FILE
fi
action "$PWD_FILE exist" /bin/true
rsync --daemon
[ $? -eq 0 ] && action "rsync configure successful" /bin/true
exit
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-185131-1-1.html 上篇帖子: Access rights for libraries on linux 下篇帖子: linux 启动 oracle (很简单)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表