开发杂记
Centos/ubuntu服务器部署lsyncd+rsync来实现多台服务器之间的文件的实时同步和备份
栏目
开发杂记
时间
2024-07-17
投稿
Admin
一:多台服务器之间的文件同步难题
rsync是一个远程数据同步工具 它通过比较两边文件是否相同来进行同步更新,但是缺点也很明显 它只有执行同步命令的时候才会进行同步操作,为了达到两台或多台服务器之间的文件同步、备份只能通过定时任务来触发rsync。那么有没有实时监控文件变化来达到实时同步的方法呢?有的,这就是lsyncd+rsync方案:lsyncd 用来实时监听文件变化,去触发rsync进行同步操作。
二:演示环境
一台备份服务器:服务器A IP:192.168.0.11 (接收端,安装rsync 以daemon模式启动)
一台运行web和数据库的服务器:服务器B IP:192.168.0.12 (发送端,安装lsyncd+rsync)
三:服务器A (接收端) 安装配置rsync
安装rsync
yum install -y rsync #ubuntu sudo apt-get install rsync
配置rsync
vim /etc/rsyncd.conf #ubuntu 手动创建这个文件
修改配置文件:这里使用了两个模块 可以根据你的需求进行模块增减 模块节点名不要重复
#最好把所有#注释全部去掉不然有些系统经常出现莫名其妙验证失败 uid = nobody gid = nobody use chroot = yes max connections = 20 strict mode=yes pid file = /var/run/rsyncd.pid lock file=/var/run/rsync.lock log file=/var/log/rsyncd.log [db_back] #模块名称 有多个复制多个模块即可 注意模块名不要重复 path = /home/backup/mysql/ comment = backup mydql ignore errrors read only = no write only = no hosts allow = * hosts deny = * list = false uid = root gid = root auth users = rsync_user #这里是同步用户名 下面介绍怎么创建 secrets file = /etc/rsyncd.pwd #这里是密码文件 下面介绍怎么创建 [web_back] path = /home/backup/web/ comment = backup web ignore errrors read only = no write only = no hosts allow = * hosts deny = * list = false uid = root gid = root auth users = rsync_user secrets file = /etc/rsyncd.pwd
创建同步用的用户和组
groupadd rsync #创建一个rsync用户组 useradd -s /sbin/nologin -M -g rsync rsync_user #创建一个不需要登陆的rsync组内用户rsync_user 组名在前,用户名在后
创建密码文件
echo "rsync_user:123456" >/etc/rsyncd.pwd #录入用户名和密码创建密码文件 chmod 600 /etc/rsyncd.pwd #修改密码文件的权限不然后期报错无法认证
创建接收文件的目录并授予用户权限
mkdir -p /home/backup/mysql/ mkdir -p /home/backup/web/ chown -R rsync_user:rsync /home/backup/mysql/ #用户名在前,组名在后 chown -R rsync_user:rsync /home/backup/web/ #用户名在前,组名在后
开放防火墙873端口
firewall-cmd --add-port=873/tcp --permanent --zone=public firewall-cmd --reload #ubuntu 用命令行工具ufw sudo ufw allow 873/tcp sudo ufw disable sudo ufw enable
启动rsync
systemctl start rsyncd systemctl enable rsyncd #设置开机启动 systemctl restart rsyncd #重启 systemctl stop rsyncd #停止 #ubuntu 启动rsync systemctl start rsync systemctl enable rsync #设置开机启动 systemctl restart rsync #重启 systemctl stop rsync #停止 ############################### ps -ef |grep rsync #查看是否已daemon模式成功启动
至此服务器A 接收端 已配置完成
四:服务器B 发送端 安装lsyncd+rsync 并配置
安装 rsync
发送端也需要安装 rsync 不需要启动rsync,安装配置好即可,lsyncd需要用到rsync命令去同步文件
yum install -y rsync #ubuntu安装看上面 groupadd rsync #创建一个rsync用户组 useradd -s /sbin/nologin -M -g rsync rsync_user #创建一个不需要登陆的rsync组内用户rsync_user 组名在前,用户名在后 echo "123456" >/root/rsyncd.pwd #录入密码创建密码文件 由于发送文件时已带有用户名,所以此处只录入密码即可 chmod 600 /root/rsyncd.pwd #修改密码文件的权限不然后期报错无法认证
创建同步目录(这个目录的文件有增删改操作即同步到服务器A)
mkdir /home/web/mysite mkdir /home/web/mydbkack
同步测试
rsync -avz /home/web/mysite/ rsync_user@192.168.0.11::web_back --password-file=/root/rsyncd.pwd #/home/web/mysite/是服务器B需要同步到服务器A的目录 #rsync_user@192.168.0.11::web_back 认证用户名@服务器A对的IP::服务器A的rsync配置模块 #--password-file=/root/rsyncd.pwd 用来认证的密码文件 免交互 如果提示文件夹权限问题,应该是防火墙问题,记得开放873端口。认证问题仔细查看用户名和密码文件位置或者是否输错
安装 lsyncd
yum -y install lsyncd #如果提示无法安装,可以通过安装EPEL存储库的方式再用yum安装lsyncd yum install -y epel-release #ubuntu安装 sudo apt-get install lsyncd
配置 lsyncd
vim /etc/lsyncd.conf #ubuntu lsyncd的配置文件是/etc/lsyncd/lsyncd.conf.lua #ubuntu 如果切换lsyncd配置文件 记得修改一下/etc/init.d文件夹的lsyncd启动配置 # 然后使用命令systemctl daemon-reload 重新加载一下
配置如下 --注释部分也最好去掉
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 20, maxDelays = 1, nodaemon = false, } sync { default.rsync, source = "/home/web/mysite/", --监控目录 target = "rsync_user@192.168.0.11::web_back", --rsync的认证用户名、IP、模块 excludeFrom = "/home/file_exclude.lst", --排除列表文件 比如一些临时文件或者日志文件不进行同步 支持规则写法 delete = false, --删除时是否也要触发备份事件 delay = 15, init = false, rsync = { binary = "/usr/bin/rsync", --rsync可执行文件路径,必须为绝对路径 password_file = "/root/rsyncd.pwd", --密码认证文件 archive = true, compress = false, verbose = false, _extra = {"--bwlimit=1000", "--omit-link-times"} --bwlimit传输速率 } } sync { default.rsync, source = "/home/web/mydbkack/", --监控目录 target = "rsync_user@192.168.0.11::db_back", --rsync的认证用户名、IP、模块 excludeFrom = "/home/file_exclude.lst", --排除列表文件 delete = false, --删除时是否也要触发备份事件 delay = 15, init = false, rsync = { binary = "/usr/bin/rsync", --rsync可执行文件路径,必须为绝对路径 password_file = "/root/rsyncd.pwd", --密码认证文件 archive = true, compress = false, verbose = false, _extra = {"--bwlimit=1000", "--omit-link-times"} --bwlimit传输速率 } }
排除同步的文件列表 基础写法
#如所有包含runtime和logs的目录 **/runtime/** **/logs/** ##规则如下: 如果规则以斜线/开头,则从头开始要匹配全部 如果规则以/结尾,则要匹配监控路径的末尾 ?匹配任何字符,但不包括/ *匹配0或多个字符,但不包括/ **匹配0或多个字符,可以是/
创建 lsyncd 的日志文件
mkdir -p /var/log/lsyncd/ touch /var/log/lsyncd/lsyncd.log touch /var/log/lsyncd/lsyncd.status chmod 600 /var/log/lsyncd/lsyncd.log chmod 600 /var/log/lsyncd/lsyncd.status
启动并设置开机启动
systemctl start lsyncd systemctl enable lsyncd #开机启动 systemctl restart lsyncd #重启 systemctl stop lsyncd #停止 #启动成功日志文件会打印 Mon Jul 19 16:11:58 2024 Normal: --- Startup --- ................... ........ #若启动失败 手动启动下看报错 进行排查 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
至此 全部完成,你可以试着在服务器B进行文件增删改的操作,在服务器A看同步情况。
如果有多个服务器B(发送端)一样可以按照 步骤四 操作。同样服务器A有多个的情况也一样