最近我准备迁移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
此处评论已关闭