lsync实时同步

lsync实时同步
[TOC]
NFS单点故障

前面通过负载均衡访问我们的
web 服务器,最终访问到NFS服务器
NFS 服务它现在是 单点 ,如果NFS存储 ==挂了== 怎么办呢?
用户上传的数据就都丢失了呀!
我们还有一个
backup备份服务器,把 NFS 服务器里面的内容推送至 backup 服务器利用
定时任务,定时进行推送 NFS服务器 挂了 ,我们在backup服务器里面搭建NFS存储 共享目录还是那个/data(web客户端挂载nfs的目录,同样也是nfs推送backup的目录)web客户端,先卸载 原来的nfs存储服务器,再挂载 新搭建的backup里面的nfs服务
因为我们运用的是
定时任务推送最快一分钟同步,容易丢数据 后面我们要实现 ==实时同步== ==秒级同步==

这里NFS服务器同样也是backup服务器的客户端,NFS服务器中的
/data目录中的信息,需要实时同步到backup服务器中,从而防止单点故障🙉backup服务器实际上是三台服务器的备份(web01,web02,nfs)
/backup目录备份web01,web02
/data目录备份nfs
backup服务器中既要配置backup服务,也要配置nfs服务,便于秒级恢复nfs存储
- 两台web服务器意识到nfs服务挂了
- 先umount取消挂载
- 再启动backup中的nfs服务
- 最后挂载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
1.backup的配置文件在哪里?/etc/rsyncd.conf(守护进程模式)2.rsync的服务名是自己吗?systemctl restart rsyncd# 应该是rsyncd3.守护进程传输数据的时候::[data]?不要中括号,用户名@IP::data4.守护进程模式中,验证用户免密连接的选项--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重新部署
# 让我们接着前面的继续做1.backup服务器# 使用守护进程模式,再添加一个模块[data][root@backup ~]#cat /etc/rsyncd.confuid = rsyncgid = rsyncport = 873fake super = yesuse chroot = nomax connections = 200timeout = 600ignore errorsviread only = falselist = falseauth users = rsync_backupsecrets file = /etc/rsync.passwdpid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog 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 rsyncuid=1002(rsync) gid=123(rsync) groups=123(rsync)# 检查启动用户是否存在[root@backup ~]#mkdir /data# 创建/data目录[root@backup ~]#ll -d /datadrwxr-xr-x 2 root root 6 Jan 21 20:39 /data[root@backup ~]#chown rsync.rsync /data# 修改目录的属主和属组[root@backup ~]#ll -d /datadrwxr-xr-x 2 rsync rsync 6 Jan 21 20:39 /data[root@backup ~]#systemctl restart rsyncd# 别忘记重启服务,服务名为rsyncd--------------------------------# backup本地测试[root@backup ~]#cat /etc/rsync.passwdrsync_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::dataPassword:sending incremental file listtest.txt# 成功传输过来了sent 91 bytes received 43 bytes 53.60 bytes/sectotal size is 0 speedup is 0.00[root@backup ~]#ll /datatotal 0-rw-r--r-- 1 rsync rsync 0 Jan 21 20:41 test.txt
2.nfs服务器[root@nfs ~]#rpm -qa rsyncrsync-3.1.3-7.ky10.x86_64# 需要提前安装rsync软件包[root@nfs ~]#cat /etc/rsync_passwd.txt123# 客户端得有这个验证用户的密码文件,这样就不需要配置免密连接了[root@nfs ~]#ll /etc/rsync_passwd.txt-rw------- 1 root root 4 Jan 16 19:25 /etc/rsync_passwd.txt# 修改密码文件的权限为600[root@nfs ~]#ll /datatotal 0drwxr-xr-x 2 www www 19 Jan 20 20:59 adrwxr-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.txtb/b/2.txt# 把/data目录下的所有都同步过去了sent 233 bytes received 77 bytes 620.00 bytes/sectotal size is 0 speedup is 0.00
3.backup服务端验证[root@backup ~]#ll /data/total 0drwxr-xr-x 2 rsync rsync 19 Jan 20 20:59 adrwxr-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.txt2 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 nobodyuid=65534(nobody) gid=65534(nobody) groups=65534(nobody)[root@nfs ~]#chown nobody.nobody /data[root@nfs ~]#rm -rf /data/*# 把原来的/data目录里面的东西全部都删了[root@nfs ~]#ll -d /datadrwxr-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.31Export 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 /oldboydrwxr-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 -hFilesystem 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-utilsnfs-utils-2.5.1-5.p04.ky10.x86_64[root@web02 ~]#showmount -e 172.16.1.31Export 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 -hFilesystem 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 /datatotal 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.txtsending incremental file list./web01.txtweb02.txt# 成功把刚才web里面的资源/oldboy里的文件(在nfs服务器中的/data目录中存储着)同步到backup服务器中sent 190 bytes received 65 bytes 510.00 bytes/sectotal size is 0 speedup is 0.00[root@backup ~]#ll /datatotal 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挂掉
'模拟nfs服务器挂掉''统一用户的重要性'1.backup服务器中配置nfs服务[root@backup ~]#yum -y install nfs-utils[root@backup ~]#rpm -qa nfs-utilsnfs-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 nobodyuid=65534(nobody) gid=65534(nobody) groups=65534(nobody)[root@backup ~]#ll -d /datadrwxr-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 wwwid: ‘www’: no such user[root@backup ~]#groupadd -g 666 www[root@backup ~]#useradd -g 666 -u666 -s /sbin/nologin -M www[root@backup ~]#id wwwuid=666(www) gid=666(www) groups=666(www)'其他三台机器过程类似,自己创建'[root@nfs ~]#id wwwuid=666(www) gid=666(www) groups=666(www)[root@web01 ~]#id wwwuid=666(www) gid=666(www) groups=666(www)[root@web02 ~]#id wwwuid=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.confuid = wwwgid = www......# 剩下的不用管[root@backup ~]#systemctl restart rsyncd# 别忘记重启服务让rsync配置文件生效
2.backup本地测试/data目录[root@backup ~]#rsync -avz /home/test.txt rsync_backup@172.16.1.41::dataPassword:sending incremental file listtest.txt
sent 91 bytes received 43 bytes 89.33 bytes/sectotal size is 0 speedup is 0.00[root@backup ~]#ll /datatotal 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 datarsync error: error starting client-server protocol (code 5) at main.c(1657) [sender=3.1.3][root@backup ~]#cat /etc/rsync.passwdrsync_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.txtsending incremental file listnfs.txt
sent 90 bytes received 43 bytes 266.00 bytes/sectotal size is 0 speedup is 0.00[root@nfs ~]#cat /etc/rsync_passwd.txt123# 人间客户端里面只有密码
4.backup服务端进行验证[root@backup ~]#ll /datatotal 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 /datatotal 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 /datadrwxr-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.txtsending incremental file list./test.txtweb01.txtweb02.txt'nfs服务器把web服务器传过来的资源同步到backup服务器中'sent 241 bytes received 84 bytes 650.00 bytes/sectotal size is 0 speedup is 0.00[root@backup ~]#ll /datatotal 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/mounts172.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 -hFilesystem 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 /oldboytotal 0'此时业务中断,原来的数据全部丢失'[root@backup ~]#systemctl start nfs'backup服务器启动nfs服务'[root@web01 ~]#showmount -e 172.16.1.41Export list for 172.16.1.41:/data 172.16.1.0/24[root@web02 ~]#showmount -e 172.16.1.41Export 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 -hFilesystem Size Used Avail Use% Mounted on.......172.16.1.41:/data 49G 3.8G 46G 8% /oldboy[root@web01 ~]#ll /oldboytotal 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服务

- 实时同步
- 监控谁,就从哪部署
lsync服务
部署lsync服务
# 在部署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.confsettings { 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.confsettings { 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.logSat 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 /datatotal 0# nfs事先清空文件[root@backup ~]#rm -rf /data/*[root@backup ~]#ll /datatotal 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 /datatotal 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 /datatotal 0# 又因为nfs有配置的有rsync的--delete选项,所以要和nfs.31服务器上的/data保持一致[root@backup ~]#ll /data/total 0从头开始

让我们恢复快照,从头开始
backup.41服务器
[root@backup ~]#yum -y install rsync[root@backup ~]#cat /etc/rsyncd.confuid = wwwgid = wwwport = 873fake super = yesuse chroot = nomax connections = 200timeout = 600ignore errorsread only = falselist = falseauth users = rsync_backupsecrets file = /etc/rsync.passwdpid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog 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::backupPassword:sending incremental file listtest.txt
sent 91 bytes received 43 bytes 38.29 bytes/sectotal 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.rcset 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-starttlsset ssl-verify=ignorenfs.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.confsettings { 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.logSat 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服务器
[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.31Export 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 -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 49G 3.8G 45G 8% /.......172.16.1.31:/data 49G 3.8G 45G 8% /oldboyweb02.8服务器
[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.31Export 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 -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 49G 3.8G 45G 8% /.......172.16.1.31:/data 49G 3.8G 45G 8% /oldboy测试验证:
[root@web01 ~]#touch /oldboy/web01.txt[root@web02 ~]#touch /oldboy/web02.txt[root@backup ~]#ll /datatotal 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 0drwxr-xr-x 2 www www 59 Jan 24 20:55 10.0.0.31drwxr-xr-x 2 www www 59 Jan 24 20:55 10.0.0.7drwxr-xr-x 2 www www 59 Jan 24 20:55 10.0.0.8[root@backup ~]#sh /server/scripts/back_to_mail.sh'服务端运行发送邮件脚本'

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



