lsync实时同步

4986 字
25 分钟
lsync实时同步

lsync实时同步#

[TOC]


NFS单点故障#

image-20260124151136708
image-20260124151136708

前面通过负载均衡访问我们的 web 服务器 ,最终访问到NFS服务器

  • NFS 服务它现在是 单点 ,如果NFS存储 ==挂了== 怎么办呢?

    用户上传的数据就都丢失了呀!

  • 我们还有一个 backup 备份服务器,把 NFS 服务器里面的内容推送至 backup 服务器

    利用 定时任务 ,定时进行推送 NFS服务器 挂了 ,我们在backup服务器里面搭建NFS存储 共享目录还是那个 /data (web客户端挂载nfs的目录,同样也是nfs推送backup的目录)

  • web客户端,先卸载 原来的nfs存储服务器,再挂载 新搭建的backup里面的nfs服务

  • 因为我们运用的是 定时任务 推送

    最快一分钟同步,容易丢数据 后面我们要实现 ==实时同步== ==秒级同步==

image-20260121143551862
image-20260121143551862

  1. 这里NFS服务器同样也是backup服务器的客户端,NFS服务器中的 /data 目录中的信息,需要实时同步到backup服务器中,从而防止单点故障

    🙉backup服务器实际上是三台服务器的备份(web01,web02,nfs)​

    /backup目录备份web01,web02

    /data目录备份nfs

  2. backup服务器中既要配置backup服务,也要配置nfs服务,便于秒级恢复nfs存储

    1. 两台web服务器意识到nfs服务挂了
    2. 先umount取消挂载
    3. 再启动backup中的nfs服务
    4. 最后挂载backup中的nfs

    从而实现秒级恢复nfs业务


如果没有统一用户!而且刚好 nfs

  • 我们来设想一下,我们backup服务的配置文件中,uid和gid均为 rsync

    则[data]模块中的备份目录 /data的属主属组必须也得为 rsync

    /data 用来备份nfs服务器

  • nfs 了,那么backup服务器需要充当nfs服务器,同时也是写入到 /data 目录

    nfs服务中默认的压缩用户为 nobody 所以 /data 目录下的属主属组必须改为 nobody

    那么这样的话, ==/data== 目录的 属主属组 不就冲突了吗!

backup+nfs#

Q&A#

Terminal window
1.backup的配置文件在哪里?
/etc/rsyncd.conf(守护进程模式)
2.rsync的服务名是自己吗?
systemctl restart rsyncd
# 应该是rsyncd
3.守护进程传输数据的时候::[data]?
不要中括号,用户名@IP::data
4.守护进程模式中,验证用户免密连接的选项
--password-file
'不是passwd,是password'
5.守护进程模式中,backup服务端中验证用户的密码文件格式
验证用户:密码
6.守护进程模式中,backup客户端中验证用户的密码文件格式
只有密码
7.密码文件的权限需要更改吗?
不管是服务端还是,客户端,必须保证密码文件外人不可见
'一般来说都是修改为600,不用修改密码文件的属主属组'
8.在备份nfs中的/data目录的时候,格式是怎样的?
rsync -avz /data ????
'/data同步的是一整个目录,而我们要同步目录下的文件,并非是整个目录'
rsync -avz /data/
'这个才是正确的'
9.nfs服务配置中,在哪里检查/etc/exports文件是否配置成功
/var/lib/nfs/etab

重新部署#

Terminal window
# 让我们接着前面的继续做
1.backup服务器
# 使用守护进程模式,再添加一个模块[data]
[root@backup ~]#cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errorsvi
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file =/var/log/rsyncd.log
############################
[backup]
comment = Welcome to oldboyedu backup!
path = /backup
[data]
path = /data
# 备注
'里面本来就有一个[backup]模块,用来存储web服务器中的一些重要资源'
'我们新添加的[data],用来存储nfs服务器中的一些静态资源'
'lsync用来把nfs服务器中的静态资源实时同步到backup中的[data]模块'
[root@backup ~]#id rsync
uid=1002(rsync) gid=123(rsync) groups=123(rsync)
# 检查启动用户是否存在
[root@backup ~]#mkdir /data
# 创建/data目录
[root@backup ~]#ll -d /data
drwxr-xr-x 2 root root 6 Jan 21 20:39 /data
[root@backup ~]#chown rsync.rsync /data
# 修改目录的属主和属组
[root@backup ~]#ll -d /data
drwxr-xr-x 2 rsync rsync 6 Jan 21 20:39 /data
[root@backup ~]#systemctl restart rsyncd
# 别忘记重启服务,服务名为rsyncd
--------------------------------
# backup本地测试
[root@backup ~]#cat /etc/rsync.passwd
rsync_backup:123
# 验证用户的用户名和密码
[root@backup ~]#ll /etc/rsync.passwd
-rw------- 1 root root 17 Jan 16 15:46 /etc/rsync.passwd
# 权限是600,不需要修改文件的属主,属组
[root@backup ~]#rsync -avz /home/test.txt rsync_backup@172.16.1.41::data
Password:
sending incremental file list
test.txt
# 成功传输过来了
sent 91 bytes received 43 bytes 53.60 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]#ll /data
total 0
-rw-r--r-- 1 rsync rsync 0 Jan 21 20:41 test.txt
2.nfs服务器
[root@nfs ~]#rpm -qa rsync
rsync-3.1.3-7.ky10.x86_64
# 需要提前安装rsync软件包
[root@nfs ~]#cat /etc/rsync_passwd.txt
123
# 客户端得有这个验证用户的密码文件,这样就不需要配置免密连接了
[root@nfs ~]#ll /etc/rsync_passwd.txt
-rw------- 1 root root 4 Jan 16 19:25 /etc/rsync_passwd.txt
# 修改密码文件的权限为600
[root@nfs ~]#ll /data
total 0
drwxr-xr-x 2 www www 19 Jan 20 20:59 a
drwxr-xr-x 2 www www 19 Jan 20 20:59 b
# 这些都是之前web服务器,里面的资源
[root@nfs ~]#tree /data/
/data/
├── a
│   └── 1.txt
└── b
└── 2.txt
# backup服务端本地测试没有问题,直接同步
[root@nfs ~]#rsync /data/ -avz rsync_backup@172.16.1.41::data --password-file=/etc/rsync_passwd.txt
'同步的是/data/,目录下的所有东西'
'--password-file'
'客户端rsync备份的命令后面交给脚本实现'
sending incremental file list
./
a/
a/1.txt
b/
b/2.txt
# 把/data目录下的所有都同步过去了
sent 233 bytes received 77 bytes 620.00 bytes/sec
total size is 0 speedup is 0.00
3.backup服务端验证
[root@backup ~]#ll /data/
total 0
drwxr-xr-x 2 rsync rsync 19 Jan 20 20:59 a
drwxr-xr-x 2 rsync rsync 19 Jan 20 20:59 b
-rw-r--r-- 1 rsync rsync 0 Jan 21 20:41 test.txt
# 经过用户压缩后,都为rsync
[root@backup ~]#tree /data/
/data/
├── a
│   └── 1.txt
├── b
│   └── 2.txt
└── test.txt
2 directories, 3 files
4.nfs服务器的配置
[root@nfs ~]#cat /etc/exports
/data/ 172.16.1.0/24(rw,sync,all_squash)
# 这里/data目录用来存储两台web服务器中的静态资源
# 这里用户没有进行统一,使用的是默认用户,nobody
[root@nfs ~]#id nobody
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
[root@nfs ~]#chown nobody.nobody /data
[root@nfs ~]#rm -rf /data/*
# 把原来的/data目录里面的东西全部都删了
[root@nfs ~]#ll -d /data
drwxr-xr-x 2 nobody nobody 6 Jan 24 14:55 /data
# 查看/data目录的属主属组
[root@nfs ~]#systemctl restart nfs
# 重启服务
[root@nfs ~]#cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
'这里uid和gid为65534的用户就是nobody'
# 查看对应的配置是否正确
5.web01服务器
'前提得需要安装nfs-utils,否则不识别nfs文件系统,也无法嗅探nfs服务器'
[root@web01 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web01 ~]#rm -rf /oldboy/*
# 删除oldboy文件里面的原有的内容
# 如果没有这个目录自己去创建这个目录
[root@web02 ~]#mkdir /oldboy
# 我们用户上传静态资源到web服务器中的/oldboy目录中去
[root@web02 ~]#ll -d /oldboy
drwxr-xr-x 2 root root 6 Jan 24 15:15 /oldboy
'我们现在不需要进行修改/oldboy属组,因为现在的web服务器上并没有跑任何业务'
'而且我们现在是用root身份去往里面写东西的'
[root@web01 ~]#mount -t nfs 172.16.1.31:/data /oldboy
[root@web01 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 49G 3.7G 46G 8% /
...........
172.16.1.31:/data 49G 3.8G 46G 8% /oldboy
# 成功挂载
6.web02服务器类似
[root@web02 ~]#rpm -qa nfs-utils
nfs-utils-2.5.1-5.p04.ky10.x86_64
[root@web02 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web02 ~]#mkdir /oldboy
[root@web02 ~]#mount -t nfs 172.16.1.31:/data /oldboy
[root@web02 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 49G 3.8G 46G 8% /
.........
172.16.1.31:/data 49G 3.8G 46G 8% /oldboy
7.验证一下
[root@web01 ~]#touch /oldboy/web01.txt
# web01服务器
[root@web02 ~]#touch /oldboy/web02.txt
# web02服务器
[root@nfs ~]#ll /data
total 0
-rw-r--r-- 1 nobody nobody 0 Jan 24 15:30 web01.txt
-rw-r--r-- 1 nobody nobody 0 Jan 24 15:30 web02.txt
# 这里是用nfs服务器来进行查看的,当然此时nfs的/data和web01,web02的/oldboy目录已经绑在一起了
# 三台机器都是可以查看的到
'为了防止nfs挂掉,nfs的/data中的静态资源也需要同步到backup服务器中'
'可以把rsync命令写入到定时任务中,定时备份'
'后面我们再实现实时同步'
[root@nfs ~]#rsync -avz /data/ rsync_backup@172.16.1.41::data --password-file=/etc/rsync_passwd.txt
sending incremental file list
./
web01.txt
web02.txt
# 成功把刚才web里面的资源/oldboy里的文件(在nfs服务器中的/data目录中存储着)同步到backup服务器中
sent 190 bytes received 65 bytes 510.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]#ll /data
total 0
-rw-r--r-- 1 rsync rsync 0 Jan 24 15:30 web01.txt
-rw-r--r-- 1 rsync rsync 0 Jan 24 15:30 web02.txt
# backup服务器进行验证,成功同步到nfs服务器中

nfs挂掉#

Terminal window
'模拟nfs服务器挂掉'
'统一用户的重要性'
1.backup服务器中配置nfs服务
[root@backup ~]#yum -y install nfs-utils
[root@backup ~]#rpm -qa nfs-utils
nfs-utils-2.5.1-5.p04.ky10.x86_64
[root@backup ~]#cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
[root@backup ~]#id nobody
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
[root@backup ~]#ll -d /data
drwxr-xr-x 4 rsync rsync 74 Jan 24 15:30 /data
'nfs服务中默认的压缩用户是nobody'
'站在nfs的角度看/data目录,那么这个目录的属主应为nobody'
'站在backup的角度看/data目录,我需要给.31做备份,用rsync做备份,它的所以目录的属主应为rsync'
'所以我们必须要进行同一用户,四台服务器都要创建www用户(uid=666,gid=666),先创建组,再在创建用户'
[root@backup ~]#id www
id: ‘www’: no such user
[root@backup ~]#groupadd -g 666 www
[root@backup ~]#useradd -g 666 -u666 -s /sbin/nologin -M www
[root@backup ~]#id www
uid=666(www) gid=666(www) groups=666(www)
'其他三台机器过程类似,自己创建'
[root@nfs ~]#id www
uid=666(www) gid=666(www) groups=666(www)
[root@web01 ~]#id www
uid=666(www) gid=666(www) groups=666(www)
[root@web02 ~]#id www
uid=666(www) gid=666(www) groups=666(www)
[root@backup ~]#cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@backup ~]#chown -R www.www /data
[root@backup ~]#ll -d /data/
drwxr-xr-x 4 www www 74 Jan 24 15:30 /data/
[root@backup ~]#ll -d /backup/
drwxr-xr-x 3 rsync rsync 23 Jan 17 13:58 /backup/
[root@backup ~]#chown -R www.www /backup
[root@backup ~]#ll -d /backup/
drwxr-xr-x 3 www www 23 Jan 17 13:58 /backup/
# /backup目录用来存放web服务的备份
[root@backup ~]#systemctl restart nfs
# 重启服务
[root@backup ~]#cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
# 至此nfs服务配置完毕
'我们修改了/data目录的属主,我们也得去修改rsync的配置文件中的uid和gid'
[root@backup ~]#cat /etc/rsyncd.conf
uid = www
gid = www
......# 剩下的不用管
[root@backup ~]#systemctl restart rsyncd
# 别忘记重启服务让rsync配置文件生效
2.backup本地测试/data目录
[root@backup ~]#rsync -avz /home/test.txt rsync_backup@172.16.1.41::data
Password:
sending incremental file list
test.txt
sent 91 bytes received 43 bytes 89.33 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]#ll /data
total 0
-rw-r--r-- 1 www www 0 Jan 21 20:41 test.txt
--------------------------
错误示范:
# 错误的本地测试
[root@backup ~]#rsync -avz /home/test.txt rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwd
@ERROR: auth failed on module data
rsync error: error starting client-server protocol (code 5) at main.c(1657) [sender=3.1.3]
[root@backup ~]#cat /etc/rsync.passwd
rsync_backup:123
# 这里面存的是用户名密码
'它对应的是rsync配置文件中的secrets file = /etc/rsync.passwd'
# 客户端--password-file选项中的文件只有密码123
-----------------------------
3.客户端进行测试
[root@nfs ~]#touch /home/nfs.txt
[root@nfs ~]#rsync -avz /home/nfs.txt rsync_backup@172.16.1.41::data --password-file=/etc/rsync_passwd.txt
sending incremental file list
nfs.txt
sent 90 bytes received 43 bytes 266.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs ~]#cat /etc/rsync_passwd.txt
123
# 人间客户端里面只有密码
4.backup服务端进行验证
[root@backup ~]#ll /data
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:00 nfs.txt
-rw-r--r-- 1 www www 0 Jan 21 20:41 test.txt
5.nfs服务修改属主
[root@nfs ~]#ll /data
total 0
-rw-r--r-- 1 nobody nobody 0 Jan 24 15:30 web01.txt
-rw-r--r-- 1 nobody nobody 0 Jan 24 15:30 web02.txt
[root@nfs ~]#cat /etc/exports
/data/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]#chown -R www.www /data
[root@nfs ~]#ll -d /data
drwxr-xr-x 2 www www 40 Jan 24 15:30 /data
[root@nfs ~]#systemctl restart nfs
[root@web01 ~]#touch /oldboy/test.txt
'web01服务器测试'
[root@web01 ~]#ll /oldboy/
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:09 test.txt
-rw-r--r-- 1 www www 0 Jan 24 15:30 web01.txt
-rw-r--r-- 1 www www 0 Jan 24 15:30 web02.txt
[root@backup ~]#rm -rf /data/*
'清空backup服务器中的/data目录的文件'
[root@nfs ~]#rsync -avz /data/ rsync_backup@172.16.1.41::data --password-file=/etc/rsync_passwd.txt
sending incremental file list
./
test.txt
web01.txt
web02.txt
'nfs服务器把web服务器传过来的资源同步到backup服务器中'
sent 241 bytes received 84 bytes 650.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]#ll /data
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:09 test.txt
-rw-r--r-- 1 www www 0 Jan 24 15:30 web01.txt
-rw-r--r-- 1 www www 0 Jan 24 15:30 web02.txt
'backup服务器全部都看到了'
6.nfs挂掉
[root@nfs ~]#systemctl stop nfs
[root@web01 ~]#df -h
^C
'web服务器直接夯住!'
[root@web01 ~]#cat /proc/mounts
172.16.1.31:/data /oldboy nfs4 rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,local_lock=none,addr=172.16.1.31 0 0
[root@web01 ~]#umount -lf /oldboy
# 强制卸载
[root@web01 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 49G 3.7G 46G 8% /
...........
tmpfs 95M 0 95M 0% /run/user/0
'web02同理,强制卸载'
[root@web02 ~]#ll /oldboy
total 0
'此时业务中断,原来的数据全部丢失'
[root@backup ~]#systemctl start nfs
'backup服务器启动nfs服务'
[root@web01 ~]#showmount -e 172.16.1.41
Export list for 172.16.1.41:
/data 172.16.1.0/24
[root@web02 ~]#showmount -e 172.16.1.41
Export list for 172.16.1.41:
/data 172.16.1.0/24
'两台web服务器都能嗅探到'
[root@web01 ~]#mount -t nfs 172.16.1.41:/data /oldboy
[root@web01 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
.......
172.16.1.41:/data 49G 3.8G 46G 8% /oldboy
[root@web01 ~]#ll /oldboy
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:09 test.txt
-rw-r--r-- 1 www www 0 Jan 24 15:30 web01.txt
-rw-r--r-- 1 www www 0 Jan 24 15:30 web02.txt
'挂载成功后,重新找到原来的数据'
# web02同理
# 这样就可以完美的解决nfs的单点故障了

仍有缺陷,定时备份,会有数据的丢失,需要一个工具 lsync 来实现实时备份

lsync服务#

image-20260121193421730
image-20260121193421730

  • 实时同步
  • 监控谁,就从哪部署 lsync服务

部署lsync服务#

Terminal window
# 在部署lsync服务前,把nfs.31服务器启动起来,关闭backup的nfs服务
# 让两台web重新挂载到nfs.31服务器上
lsync服务安装配置
'在哪里监控,就在哪里安装lsync服务'
# 这里我们要监控的是nfs服务端,从而实时同步至backup服务器
1)安装
[root@nfs ~]#yum -y install lsyncd
'软件包的名字是lsyncd,而不是lsync'
2)配置
[root@nfs ~]# cat /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
maxProcesses = 2,
nodaemon = false,
}
sync {
default.rsync,
source = "/data/",
target = "rsync_backup@172.16.1.41::data",
delete = true,
delay = 1,
rsync = {
binary = "/usr/bin/rsync",
password_file = "/etc/rsyncd.pwd",
archive = true,
compress = true,
}
}
########################
[root@nfs ~]# cat /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log", # 日志文件
statusFile = "/var/log/lsyncd/lsyncd.status", # 状态日志文件
maxProcesses = 2, # 最大进程数量
nodaemon = false, # 守护进程方式运行
}
sync {
default.rsync, # 使用rsync命令
source = "/data/", # 实时监控的目录
target = "rsync_backup@172.16.1.41::data",
delete = true, # --delete选项
delay = 1, # 延时1秒
# 看业务,有的时候,设置成15,不然压力太大了
rsync = {
binary = "/usr/bin/rsync", # 命令的绝对路径
password_file = "/etc/rsyncd.pwd", # 密码文件实现免交互
archive = true, # 类似-a
compress = true, # 类似-z
}
}
###########################
3)根据配置创建必要信息
[root@nfs ~]# echo 123 >/etc/rsyncd.pwd
# 验证用户的密码文件
[root@nfs ~]# chmod 600 /etc/rsyncd.pwd
# 修改密码文件的权限
[root@nfs ~]# ll /etc/rsyncd.pwd
-rw------- 1 root root 4 Aug 6 11:47 /etc/rsyncd.pwd
4)启动服务
[root@nfs ~]# systemctl start lsyncd
[root@nfs ~]# systemctl enable lsyncd
--------------------
[root@nfs ~]#cat /var/log/lsyncd/lsyncd.log
Sat Jan 24 17:39:20 2026 Normal: --- Startup ---
Sat Jan 24 17:39:20 2026 Normal: recursive startup rsync: /data/ -> rsync_backup@172.16.1.41::data/
Sat Jan 24 17:39:20 2026 Normal: Startup of /data/ -> rsync_backup@172.16.1.41::data/ finished.
'要学会看日志,日志是正确启动才行否则肯定是起不来的'
'日志是,Error: Failure on startup of一定是密码文件的权限问题'
----------------------
5)测试服务
[root@nfs ~]#rm -rf /data/*
[root@nfs ~]#ll /data
total 0
# nfs事先清空文件
[root@backup ~]#rm -rf /data/*
[root@backup ~]#ll /data
total 0
# backup也一样
[root@web01 ~]#ll /oldboy/
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:37 web01.txt
# web01
[root@nfs ~]#ll /data
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:37 web01.txt
# nfs.31
[root@backup ~]#ll /data/
total 0
-rw-r--r-- 1 www www 0 Jan 24 17:37 web01.txt
# backup.41
'从而实现实时同步至backup服务器中'
[root@web01 ~]#rm -rf /oldboy/web01.txt
[root@web01 ~]#ll /oldboy/
total 0
# web01删除的实际上是nfs中的文件
[root@nfs ~]#ll /data
total 0
# 又因为nfs有配置的有rsync的--delete选项,所以要和nfs.31服务器上的/data保持一致
[root@backup ~]#ll /data/
total 0

从头开始#

image-20260124211929134
image-20260124211929134

让我们恢复快照,从头开始

backup.41服务器#

Terminal window
[root@backup ~]#yum -y install rsync
[root@backup ~]#cat /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file =/var/log/rsyncd.log
############################
[backup]
comment = Welcome to oldboyedu backup!
path = /backup
[data]
path = /data
# 接着根据配置文件创建必要信息
[root@backup ~]#groupadd -g 666 www
[root@backup ~]#useradd -g 666 -u 666 -s /sbin/nologin -M www
[root@backup ~]#echo "rsync_backup:123" > /etc/rsync.passwd
[root@backup ~]#chmod 600 /etc/rsync.passwd
[root@backup ~]#mkdir /backup
[root@backup ~]#chown www.www /backup
[root@backup ~]#mkdir /data
[root@backup ~]#chown www.www /data
[root@backup ~]#touch /var/log/rsyncd.log
# 别忘了日志文件
[root@backup ~]#chown www.www /var/log/rsyncd.log
[root@backup ~]#systemctl restart rsyncd
[root@backup ~]#touch /home/test.txt
[root@backup ~]#rsync -avz /home/test.txt rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
test.txt
sent 91 bytes received 43 bytes 38.29 bytes/sec
total size is 0 speedup is 0.00
'至此rsync配置完毕'
# 开始安装nfs和配置
[root@backup ~]#yum -y install nfs-utils
[root@backup ~]#cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@backup ~]#systemctl restart nfs
[root@backup ~]#cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
[root@backup ~]#systemctl stop nfs
# 先关闭,备用
'nfs也配置完毕了'
#再来一个小脚本,验证备份文件的完整性
[root@backup ~]#cat /server/scripts/back_to_mail.sh
#!/bin/bash
#author:jiuzhao996
#desc:备份服务器清理,统计
result_file=/server/scripts/result.txt
#1.清理旧的备份
find ${backup_dir} -type f -name '*.tar.gz' -mtime +30 |xargs rm -f
# 这里备份服务器我们保存30天
#2.统计备份文件
find /backup -type f -name '*.tar.gz' |\
xargs ls -lh |\
awk -F'[ /]+' 'BEGIN{print "IP地址","文件名","文件大小"}{print $(NF-1),$NF,$5}'|\
column -t >${result_file}
# 这里写入到一个文件中去了
#2.5验证指纹文件
find /backup -name 'fingerprint.md5' | xargs md5sum -c >>${result_file}
#3.发送邮箱
mail -s "每日备份结果" jiuzhao996@qq.com<${result_file}
# 别忘了配置邮件服务
[root@backup ~]#yum -y install mailx
[root@backup ~]#cat /etc/mail.rc
set from=jiuhao_linux@163.com
#配置发件人
set smtp=smtps://smtp.163.com:465
#配置使用163发送邮件 如果是非加密smtp.163.com
#非加密默认端口是25
set smtp-auth-user=jiuhao_linux@163.com
#用户名:邮箱名字
set smtp-auth-password=BA2hK34GKED9PybC
#授权码
set smtp-auth=login
#认证形式login
#下面3行用于配置加密方式进行传输
set nss-config-dir=/etc/pki/nssdb/
set smtp-user-starttls
set ssl-verify=ignore

nfs.31服务器#

[root@nfs ~]#yum -y install rsync
[root@nfs ~]#cat /server/scripts/back_conf.sh
'定时备份到backup服务中'
#!bin/bash
#author: jiuzhao996
#desc: 客户端打包,备份,同步
ip=`hostname -I | awk '{print $1}'`
time=`date +"%F"`
dir=/backup/${ip}
file=conf-${time}.tar.gz
#1.创建目录
mkdir -p ${dir}
#2.打包压缩
tar zcvf ${dir}/${file} /etc/hosts
#2.5指纹文件
md5sum ${dir}/${file} > ${dir}/fingerprint.md5
#3.推送至服务端
rsync -avz ${dir} rsync_backup@172.16.1.41::backup --password-file=/etc/rsyncd.pwd
#4.清理缓存
find ${dir} -name "*.tar.gz" -type f -mtime +7 | xargs rm -f
[root@nfs ~]#echo "123" > /etc/rsyncd.pwd
[root@nfs ~]#chmod 600 /etc/rsyncd.pwd
[root@nfs ~]#yum -y install nfs-utils
'配置nfs服务'
[root@nfs ~]#cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]#groupadd -g 666 www
[root@nfs ~]#useradd -g 666 -u 666 -s /sbin/nologin -M www
[root@nfs ~]#mkdir /data
[root@nfs ~]#chown www.www /data
[root@nfs ~]#systemctl start nfs
[root@nfs ~]#cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
'nfs至此配置完毕'
[root@nfs ~]#yum -y install lsyncd
[root@nfs ~]#cat /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
maxProcesses = 2,
nodaemon = false,
}
sync {
default.rsync,
source = "/data/",
target = "rsync_backup@172.16.1.41::data",
delete = true,
delay = 1,
rsync = {
binary = "/usr/bin/rsync",
password_file = "/etc/rsyncd.pwd",
archive = true,
compress = true,
}
}
[root@nfs ~]#echo "123" > /etc/rsyncd.pwd
[root@nfs ~]#chmod 600 /etc/rsyncd.pwd
'这个是更改权限模式,并不是chown不要修改它的属主,必须是root'
[root@nfs ~]#ll /etc/rsyncd.pwd
-rw------- 1 600 root 4 Jan 24 20:10 /etc/rsyncd.pwd
[root@nfs ~]#systemctl start lsyncd
[root@nfs ~]#cat /var/log/lsyncd/lsyncd.log
Sat Jan 24 20:43:40 2026 Normal: --- Startup ---
Sat Jan 24 20:43:40 2026 Normal: recursive startup rsync: /data/ -> rsync_backup@172.16.1.41::data/
Sat Jan 24 20:43:40 2026 Normal: Startup of /data/ -> rsync_backup@172.16.1.41::data/ finished.
# 查看日志正常启动

web01.7服务器#

Terminal window
[root@web01 ~]#yum -y install rsync
[root@web01 ~]#vim /server/scripts/back_conf.sh
'脚本文件和nfs.31的一模一样'
[root@web01 ~]#echo "123" > /etc/rsyncd.pwd
# 验证用户的密码文件
[root@web01 ~]#chmod 600 /etc/rsyncd.pwd
[root@web01 ~]#yum -y install nfs-utils
[root@web01 ~]#groupadd -g 666 www
[root@web01 ~]#useradd -g 666 -u 666 -s /sbin/nologin -M www
[root@web01 ~]#mkdir /oldboy
[root@web01 ~]#chown www.www /oldboy/
[root@web01 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web01 ~]#mount -t nfs 172.16.1.31:/data /oldboy
[root@web01 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 49G 3.8G 45G 8% /
.......
172.16.1.31:/data 49G 3.8G 45G 8% /oldboy

web02.8服务器#

Terminal window
[root@web02 ~]#yum -y install rsync
[root@web02 ~]#vim /server/scripts/back_conf.sh
'脚本文件和nfs.31的一模一样'
[root@web02 ~]#echo "123" > /etc/rsyncd.pwd
[root@web02 ~]#chmod 600 /etc/rsyncd.pwd
[root@web02 ~]#ll /etc/rsyncd.pwd
-rw------- 1 root root 4 Jan 24 21:00 /etc/rsyncd.pwd
[root@web02 ~]#yum -y install nfs-utils
[root@web02 ~]#groupadd -g 666 www
[root@web02 ~]#useradd -g 666 -u 666 -s /sbin/nologin -M www
[root@web02 ~]#mkdir /oldboy
[root@web02 ~]#chown www.www /oldboy/
[root@web02 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web02 ~]#mount -t nfs 172.16.1.31:/data /oldboy
[root@web02 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 49G 3.8G 45G 8% /
.......
172.16.1.31:/data 49G 3.8G 45G 8% /oldboy

测试验证:#

Terminal window
[root@web01 ~]#touch /oldboy/web01.txt
[root@web02 ~]#touch /oldboy/web02.txt
[root@backup ~]#ll /data
total 0
-rw-r--r-- 1 www www 0 Jan 24 20:52 web01.txt
-rw-r--r-- 1 www www 0 Jan 24 20:52 web02.txt
[root@nfs ~]#sh /server/scripts/back_conf.sh
[root@web01 ~]#sh /server/scripts/back_conf.sh
[root@web02 ~]#sh /server/scripts/back_conf.sh
'运行备份脚本,后面可以配合着定时任务定时备份'
[root@backup ~]#ll /backup/
total 0
drwxr-xr-x 2 www www 59 Jan 24 20:55 10.0.0.31
drwxr-xr-x 2 www www 59 Jan 24 20:55 10.0.0.7
drwxr-xr-x 2 www www 59 Jan 24 20:55 10.0.0.8
[root@backup ~]#sh /server/scripts/back_to_mail.sh
'服务端运行发送邮件脚本'

image-20260124212456989
image-20260124212456989

image-20260124210623258
image-20260124210623258

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

lsync实时同步
https://www.kpyun.fun/posts/basics/extension/extension11/
作者
久棹
发布于
2025-10-03
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录