最近我准备迁移VPS上的网站,研究了一下基于rsync的同步程序lsyncd, 以方便快速的迁移文件.
1. lsyncd介绍
lsyncd是基于rsync的实时文件同步程序
具体介绍看lsyncd官方网站: http://axkibe.github.io/lsyncd/
2. lsyncd安装依赖程序
lsyncd依赖rsync和SSH,需要同时在服务端和客户端安装
2.1 为目标服务器设置SSH秘钥登录
在源服务器设置SSH公私密钥对,然后上传到目标服务器,可以让我们无密码登录远程服务器
ssh-keygen -b 4096 -t rsa #创建公私密钥对 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] #上传公钥到目标服务器,请自行修改为远程服务器IP grep RSAAuthentication /etc/ssh/sshd_config #目标服务器查看RSAAuthentication配置 grep PubkeyAuthentication /etc/ssh/sshd_config #目标服务器查看PubkeyAuthentication配置 sed -i "s@#RSAAuthentication yes@RSAAuthentication yes@g" /etc/ssh/sshd_config sed -i "s@#PubkeyAuthentication yes@PubkeyAuthentication yes@g" /etc/ssh/sshd_config systemctl restart sshd #目标服务器重启sshd
根据秘钥生成公钥(备用)
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
2.2 安装lsyncd rsync
yum install -y epel-release # 安装epel源 yum install -y lsyncd rsync --enablerepo=epel # 安装lsyncd rsync,同步依赖rsync3.1,客户端必须安装rsync(yum -y install rsync)
3.修改lsyncd 配置文件
这里仅记录基于rsyncssh的远程同步,其他配置请参考官方网站的代码自行修改.
vim /etc/lsyncd.conf # 配置文件设置
settings {
logfile = "/var/log/lsyncd.log", --日志路径
statusFile = "/var/log/lsyncd.status", --状态文件
pidfile = "/var/run/lsyncd.pid", --pid文件路径
statusInterval = 1, --状态文件写入最短时间
nodaemon = false, --daemon运行(守护进程)
maxProcesses = 1, --最大进程(多线程可能出现奇怪问题)
maxDelays = 1, --最大延迟(根据需要修改,建议15秒)
insist = 1, --强制运行(出错不停止,不断尝试同步到远程目标)
}
sync {
default.rsyncssh, --默认rsync+ssh,rsync版本需要升级3以上版本
source = "/data/your/files", --源目录(结尾不要带斜杠/)
delete = true, --保持完全同步
host = "[email protected]", --目标主机 (自行修改为你的目标服务器IP)
targetdir = "/data/mydata", --目标目录(同步前需要创建好目录,不然会出错)
exclude={
"default/**","*.temp", "*.tmp" --需排除的文件和目录
},
rsync = {
binary = "/usr/bin/rsync", --需先安装好rsync
archive = true, --归档
compress = false, --压缩 (图片文件多,不开压缩;html文件多,开启压缩)
owner = true, --属主
perms = true, --权限
whole_file = false,
_extra = {"-P", "--bwlimit=12800"}, --限制带宽(限制100兆带宽,默认单位KB/s)
},
ssh = {
port = 22 --默认SSH端口,可修改
}
}
--可以设置多个snyc进行同步
sync {
default.rsyncssh, --默认rsync+ssh,rsync版本需要升级3以上版本
source = "/data/other/files", --源目录(结尾不要带斜杠/)
delete = true, --保持完全同步
host = "[email protected]", --目标主机 (自行修改为你的目标服务器IP)
targetdir = "/data/new/backup", --目标目录(同步前目录需要创建好,不然会出错)
exclude={
"default/**", "*.temp", "*.tmp" --需排除的文件和目录
},
rsync = {
binary = "/usr/bin/rsync", --需先安装好rsync
archive = true, --归档
compress = false, --压缩
owner = true, --属主
perms = true, --权限
whole_file = false,
_extra = {"-P", "--bwlimit=50000"}, -- 使用-P参数,断点续传
},
ssh = {
port = 22
}
}
4. 启动lsyncd, 开始同步文件
systemctl status lsyncd systemctl enable lsyncd systemctl start lsyncd #systemctl restart lsyncd
lsyncd错误排除
请参考日志文件,逐一排除
cat /var/log/lsyncd.log

此处评论已关闭