[TOC]
全网备份
1.定时备份
2.1在rsync服务器上,配置rsync服务,实现推送。
配置rsync服务端,rsync客户端推送
[root@web02 ~]# rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
test
sent 130669 bytes received 30 bytes 11365.13 bytes/sec
total size is 134217728 speedup is 1026.92
推送成功的 !!!!!!!!!!!!
2.2在客户端nfs服务器上,实现打包、推送、删除,定时任务推送。
[root@web02 ~]# tar zcvfh /backup/backup_$(date +%F).tar.gz /var/spool/cron/root /etc/rc.local /etc/sysconfig/iptables /var/www/html /app/logs
tar: 从成员名中删除开头的“/”
/var/spool/cron/root
/etc/rc.local
/etc/sysconfig/iptables
/var/www/html/
/app/logs/
[root@web02 ~]# vim /server/scripts/bak.sh
#!/bin/bash
IP=`ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}'`
Path=/backup
if [ $(date +%w) -eq 0 ]
then
Time="web_$(date +%F-%w -d "-1day")"
else
Time=$(date +%F -d "-1day")
fi
mkdir -p $Path/$IP
cd / &&\
tar zcvfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/backup_$Time.tar.log &&\
rsync -avz $Path/ [email protected]::backup --password-file=/etc/rsync.password
2.3在rsync备份服务器上,做检查,发邮件给管理员
[root@web02 ~]# vim /server/scripts/check_and_del.sh
#!/bin/bash
IP=`ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}'`
Path=/backup
then
Time="web_$(date +%F-%w -d "-1day")"
else
Time=$(date +%F -d "-1day")
fi
LANG-en
find /backup/ -type f -name "*${Time}*.log"|xargs md5sum -c >>$Path/${Time}_result.log &&\
mail -s "$Time bak result" [email protected] <$Path/${Time}_result.log
find /backup/ -type f ! -name "web*-6*" -mtime +180 |xargs rm -f
2.4配置mail使用外部smtp发邮件
通过修改 配置文件可以使用外部smtp服务器,可以达到sendmail/postfix等内部邮件服务而用外部的smtp服务器发送邮件的目的:
修改/etc/mail.rc最后一行加入
set [email protected] smtp=smtp.163.com smtp-auth-user=592654815 smtp-auth-password=XXXX smtp-auth=login
.nfs看挂载情况:
①服务端:[root@localhost ~]# cat /var/lib/nfs/etab
/data 172.16.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
②客户端:[root@web02 ~]# df -h ---->这种方法,出问题就会卡死,不建议
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 935M 16G 6% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
172.16.10.10:/data 18G 1.2G 16G 8% /mnt
[root@web02 ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=496916k,nr_inodes=124229,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda2 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
172.16.10.10:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.10.30,minorversion=0,local_lock=none,addr=172.16.10.10 0 0
nfs client mount 挂载参数:
fg:前端挂载
bg:后台挂载
soft:限时挂载,超时退出
hard:持续挂载,直到kill或unmount
intr:当使用hard挂载,可以timeout后把它中断掉
rsize:读的区块大小
wsize:写的区块大小
man mount 后的-o参数
下面mount命令-o选项后面可以连接参数,注意,有些选项只有出现/etc/fstab里才有效,下面这些选项绝大多数文件系统上,但是sync仅适合ext2 ext3 fat vfat ufs等文件系统。
①async:涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,但会降低数据安全,一般情况,生产环境不推荐使用,除非对性能要求很高,对数据可靠性不要求。
②sync:该参数和async相反,有I/0操作时,都会同步出路I/O,即把数据同步写入磁盘,此参数会牺牲一点I/O性能,但是,换来的是掉电后数据的安全性。
atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,默认选项,在高并发情况下建议通过明确加上noatime,来取消这个默认项,以提升I/O性能,优化I/O的 目的。
ro:以只读
rw:可写
2.1.1案例:
①fstab修改错误导致系统无法启动故障修复案例
进入单用户或救援模式: mount -o rw,remount /
然后修改/etc/fstab
②文件系统内部自动一致性(只读)
③rsync bug
进入单用户或救援模式: mount -o rw,remount /
2.1.1mount 挂载优化
客户端挂载
mount -t nfs -o noatime,nodiratime,nosuid,rsize=131072,wsize=131072 172.16.10.10:/data/ /mnt
其实默认设置就不错了。
mount -t nfs 172.16.10.10:/data/ /mnt
2.1.2nfs内核优化建议/proc/sys/net/core/rmem_default
:该文件指定接收套接字缓冲区大小的默认值(以字节为单位),默认:124928
(/proc/sys/net/core/rmen_max
:该文件指定接收套接字缓冲区大小的最大值(以字节为单位),默认:124928cat /proc/sys/net/core/wmem_default
该文件指定发送套接字缓冲区大小的默认值(以字节为单位),默认:124928cat /proc/sys/net/core/wmem_max
该文件指定发送套接字缓冲区大小的最大值(以字节为单位),默认:124928
NFS内核优化
[root@localhost ~]# cat >>/etc/sysctl.conf<
2.2.1企业生产场景NFS共享存储优化小结:
①硬件:Sas/ssd磁盘,买多块,raid5 raid10 网卡吞吐量要大,至少千兆(多块bond)
②NFS服务器端配置:/data 172.16.10.10/24(rw,sync,all_squash,)
③客户端配置命令:mount -t nfs -o noatime,nodiratime,nosuid,rsize=131072,wsize=131072 172.16.10.10:/data/ /mnt
④对NFS 服务的所有服务器内核进行优化时,执行如下命令:
[root@localhost ~]# cat >>/etc/sysctl.conf<
执行sysctl -p生效
如果卸载时提示"umount: /mnt: device is busy",需要退出挂载目录再进行卸载,如果NFSsever宕机了,则需要强卸载,可执行umount -lf /mnt
大型网站NFS网络文件系统的替代软件为分布式文件系统MFS GlusterFS FastDFS
2.3nfs系统应用的优缺点:
优点:
①NFS文件系统内数据在文件系统上,可以看见的。
②部署快速,维护简单方便,且可控,满足需求就是最好的。
③可靠,从软件层面上看,数据可靠性高,经久耐用,数据是在文件系统之上。
④服务非常稳定。
缺点:
①存在单点故障,如果NFS server宕机了,文件目录就不能共享,所有客户端不能访问。
②在大数据高并发的场合,NFS效率、性能有限(2千万/日以下PV的网站不是瓶颈,除非网站架构设计很差)。
③客户端认证是基于IP和主机名,权限要根据ID识别,安全性一般(用于内网,则问题不大)
④NFS数据是明文的,NFS本身不对数据完整性验证。
⑤多台客户机器挂载一个NFS服务时,连接管理维护麻烦(耦合度高),尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)
⑥涉及同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高,网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是程序及架构解耦,让网站的扩展性变得更好。
应用建议:大中小型网站(参考点2000万/日PV以下)线上应用,都有用武之地,门户站也会有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也扛不住压力,而且用户体验度差。
2.共享存储实时备份(共享存储的单点解决方案)
3.1第一个里程碑:
①实现从nfs客户端到rsync服务端部署
rsync服务配置步骤:
1.查看rsync安装包
rpm -qa rsync
2.添加rsync服务的用户,管理本地目录的
useradd rsync -s /sbin/nologin -M
id rsync
3.生成rsyncd.conf配置文件
vim /etc/rsyncd.conf放入事先准备的配置
4.根据rsyncd.conf的auth users配置账户,远程连接的,并根据secrets file参数生成密码文件
echo "rsync_backup:lihao" >> /etc/rsync.password
5.为密码文件配置权限
chmod 600 /etc/rsync.password
6.创建共享的目录并授权rsync服务管理
mkdir /backup -p
chown -R rsync.rsync /backup
7.启动rsync服务并检查
rsync --daemon
ps -ef |grep rsync|grep -v grep
备份端:
[root@localhost ~]# cat -n /etc/rsyncd.conf
1 #rsync_config___________start
2 #created by lihao 21:36 2018/8/20
3 ##rsync.conf start##
4 uid = rsync #用户
5 gid = rsync #用户组
6 use chroot = no #安全相关
7 max connections = 200 #最大连接数
8 timeout = 300 #超时时间秒
9 pid file = /var/run/rsyncd.pid #进程对应的进程号文件
10 lock file = /var/run/rsync.lock #锁文件
11 log file = /var/log/rsyncd.log #日志文件
12 [backup] #模块名称
13 path = /backup #服务器提供访问的目录
14 ignore errors #忽略错误
15 read only = false #可写
16 list = false #不能列表
17 hosts allow = 172.16.10.0/24 #允许服务器连接
18 hosts deny = 0.0.0.0/32 #拒绝连接
19 auth users = rsync_backup
20 secrets file = /etc/rsync.password
21 #rsync_config___________end
多模块应用
[root@localhost /]# vim /etc/rsyncd.conf
1 #rsync_config___________start
2 #created by lihao 21:36 2018/8/20
3 ##rsync.conf start##
4 uid = rsync
5 gid = rsync
6 use chroot = no
7 max connections = 200
8 timeout = 300
9 pid file = /var/run/rsyncd.pid
10 lock file = /var/run/rsync.lock
11 log file = /var/log/rsyncd.log
12 ignore errors
13 read only = false
14 list = false
15 hosts allow = 172.16.10.0/24
16 #hosts deny = 0.0.0.0/32
17 auth users = rsync_backup
18 secrets file = /etc/rsync.password
19 [backup]
20 path = /backup
21 [lihao]
22 path = /lihao
23 #rsync_config___________end
创建rsync用户
[root@localhost ~]# id rsync
id: rsync:无此用户
[root@localhost ~]# useradd rsync -s /sbin/nologin -M
[root@localhost ~]# tail -1 /etc/passwd
rsync:x:500:500::/home/rsync:/sbin/nologin
[root@localhost ~]# rsync --daemon
[root@localhost ~]# ps -ef |grep rsync|grep -v grep
root 1503 1 0 21:53 ? 00:00:00 rsync --daemon
[root@localhost ~]# mkdir /backup
[root@localhost ~]# ls -ld /backup/
drwxr-xr-x 2 root root 4096 8月 20 21:54 /backup/
[root@localhost ~]# chown rsync.rsync /backup/
[root@localhost ~]# vim /etc/rsyncd.password
1 rsync_backup:lihao
[root@localhost ~]# ls /etc/rsync.password -l
-rw-r--r-- 1 root root 19 8月 20 22:04 /etc/rsync.password
[root@localhost ~]# chmod 600 /etc/rsync.password
[root@localhost ~]# ls /etc/rsync.password -l
-rw------- 1 root root 19 8月 20 22:04 /etc/rsync.password
[root@localhost ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1503 root 4u IPv4 11123 0t0 TCP *:rsync (LISTEN)
rsync 1503 root 5u IPv6 11124 0t0 TCP *:rsync (LISTEN)
客户端配置
1.生成连接服务器需要的密码文件
echo "lihao" >>/etc/rsync.password
2.为密码文件配置权限
chmod 600 /etc/rsync.password
3.同步文件(两种方法)
rsync -avz /backup rsync://[email protected]/backup --password-file=/etc/rsync.password
rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
[root@localhost ~]# echo "lihao" >>/etc/rsync.password
[root@localhost ~]# cat /etc/rsync.password
lihao
[root@localhost ~]# chmod 600 /etc/rsync.password
[root@localhost ~]# ll /etc/rsync.password
-rw------- 1 root root 6 8月 20 22:28 /etc/rsync.password
[root@localhost backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
sending incremental file list
./
stu001
stu002
stu003
stu004
stu005
stu006
stu007
stu008
stu009
stu010
stu011
stu012
stu013
stu014
stu015
stu016
stu017
stu018
stu019
stu020
stu021
stu022
stu023
stu024
stu025
stu026
stu027
stu028
stu029
stu030
stu031
stu032
stu033
stu034
stu035
stu036
stu037
stu038
stu039
stu040
stu041
stu042
stu043
stu044
stu045
stu046
stu047
stu048
stu049
stu050
stu051
stu052
stu053
stu054
stu055
stu056
stu057
stu058
stu059
stu060
stu061
stu062
stu063
stu064
stu065
stu066
stu067
stu068
stu069
stu070
stu071
stu072
stu073
stu074
stu075
stu076
stu077
stu078
stu079
stu080
stu081
stu082
stu083
stu084
stu085
stu086
stu087
stu088
stu089
stu090
stu091
stu092
stu093
stu094
stu095
stu096
stu097
stu098
stu099
stu100
sent 4428 bytes received 1911 bytes 12678.00 bytes/sec
total size is 0 speedup is 0.00
NFS------网络文件系统。主要功能是通过网络(一般局域网)让不同的主机系统之间可以共享文件或目录。
NFS端口不固定
NFS工作流程:
①先启动RPC服务
②启动NFS服务,自动向RPC注册
③客户端请求NFS服务
④RPC返回IP端口
⑤客户端拿着IP端口请求数据
修改yum.conf 记录rpm文件
[root@ntf-backup ~]# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
安装nfs安装包
[root@ntf-backup ~]# yum -y install nfs-utils rpcbind
[root@nfs-server ~]# rpm -aq nfs-utils rpcbind
nfs-utils-1.2.3-78.el6.x86_64
rpcbind-0.2.0-16.el6.x86_64
[root@nfs-server ~]# /etc/init.d/rpcbind start (要先启动rpc,再启动nfs)
正在启动 rpcbind: [确定]
[root@nfs-server ~]# netstat -ntpau|grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1425/rpcbind
tcp 0 0 :::111 :::* LISTEN 1425/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 1425/rpcbind
udp 0 0 0.0.0.0:752 0.0.0.0:* 1425/rpcbind
udp 0 0 :::111 :::* 1425/rpcbind
udp 0 0 :::752 :::* 1425/rpcbind
[root@nfs-server ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
[root@nfs-server ~]# /etc/init.d/nfs
nfs nfslock
[root@nfs-server ~]# /etc/init.d/nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[root@nfs-server ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 36426 mountd
100005 1 tcp 43685 mountd
100005 2 udp 58343 mountd
100005 2 tcp 39429 mountd
100005 3 udp 45346 mountd
100005 3 tcp 38027 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 35376 nlockmgr
100021 3 udp 35376 nlockmgr
100021 4 udp 35376 nlockmgr
100021 1 tcp 37467 nlockmgr
100021 3 tcp 37467 nlockmgr
100021 4 tcp 37467 nlockmgr
开机自启动:
[root@nfs-server ~]# chkconfig nfs on
[root@nfs-server ~]# chkconfig rpcbind on
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径,如(/data)。注意共享目录的本地权限,如果
需要读写共享,一定要让本地目录可以被NFS客户端用户nfsnobody读写。
NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等也可以为整个网段地址
,还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务服务器。
[root@nfs-server ~]# mkdir /data -p
oot@nfs-server ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
[root@nfs-server ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs-server ~]# ll /data
总用量 12
drwxr-xr-x 5 nfsnobody nfsnobody 4096 8月 2 22:17 oldboy
drwxr-xr-x 7 nfsnobody nfsnobody 4096 8月 2 22:51 test
drwxr-xr-x 7 nfsnobody nfsnobody 4096 8月 6 21:33 www
[root@nfs-server ~]# vim /etc/exports
1 #share /data for lihao at 2018/8/28
2 /data 172.16.10.0/24(rw,sync)
"/etc/exports" 2L, 66C 已写入
[root@nfs-server ~]# cat /etc/exports
#share /data for lihao at 2018/8/28
/data 172.16.10.0/24(rw,sync)
[root@nfs-server ~]# /etc/init.d/rpcbind status
rpcbind (pid 1425) 正在运行...
[root@nfs-server ~]# /etc/init.d/nfs status
rpc.svcgssd 已停
rpc.mountd (pid 1465) 正在运行...
nfsd (pid 1480 1479 1478 1477 1476 1475 1474 1473) 正在运行...
[root@nfs-server ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 36426 mountd
100005 1 tcp 43685 mountd
100005 2 udp 58343 mountd
100005 2 tcp 39429 mountd
100005 3 udp 45346 mountd
100005 3 tcp 38027 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 35376 nlockmgr
100021 3 udp 35376 nlockmgr
100021 4 udp 35376 nlockmgr
100021 1 tcp 37467 nlockmgr
100021 3 tcp 37467 nlockmgr
100021 4 tcp 37467 nlockmgr
[root@nfs-server ~]# /etc/init.d/nfs reload
[root@nfs-server ~]# showmount -e 172.16.10.10
Export list for 172.16.10.10:
/data 172.16.10.0/24
####服务端已经配置完成#######
####客户端配置#####
[root@web ~]# showmount -e 172.16.10.10
Export list for 172.16.10.10:
/data 172.16.10.0/24
[root@web ~]# mount -t nfs 172.16.10.10:/data /mnt
[root@web mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 1.1G 16G 7% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
172.16.10.10:/data 18G 1.2G 16G 8% /mnt (提示挂载成功)
##测试##
[root@web ~]# cd /mnt
[root@web mnt]# ls
oldboy test www
[root@web mnt]# touch test.txt
[root@web mnt]# echo "1123" >test.txt
[root@nfs-server ~]# cd /data
[root@nfs-server data]# ls
oldboy test test.txt www
[root@nfs-server data]# cat test.txt
1123
###完成##
NFS客户端:
①检查系统版本
hostname nfs-
cat /etc/redhat-release
uname -r
②安装rpc服务检查
rpm -aq nfs-utils rpcbind
yum -y install nfs-utils rpcbind
③启动rpc服务并检查
/etc/init.d/rpcbind start
/etc/init.d/rpcbind status
④设置开机自启动并检查
chkconfig rpcbind on
chkconfig --list rpcbind
⑤检查服务端的NFS是否OK
showmount -e 172.16.10.10
排查故障:
1.物理故障 ping 172.16.10.10
2.端口是否开通
Telnet 172.16.10.10 111(注意:防火墙是否开启阻挡)
⑥挂载并测试
mount -t nfs 172.16.10.10:/data /mnt
服务端配置
①检查系统版本
hostname nfs-
cat /etc/redhat-release
uname -r
②安装rpc服务检查
rpm -aq nfs-utils rpcbind
yum -y install nfs-utils rpcbind
③启动rpc和NFS服务并检查
/etc/init.d/rpcbind start
/etc/init.d/rpcbind status
rpcinfo -p localhost
/etc/init.d/nfs start
rpcinfo -p localhost
④设置开机自启动并检查
chkconfig rpcbind on
chkconfig --list rpcbind
chkconfig nfs on
chkconfig --list nfs
⑤配置共享/data目录
cat >>/etc/exports<
3.2第二个里程碑:
①实现从nfs客户端对nfs目录文件系统事件的实时监控
3.2.1安装inotify-tools包
yum安装方法:
[root@nfs_server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@nfs_server ~]# yum -y install inotify-tools
[root@nfs_server ~]# rpm -qa inotify-tools
inotify-tools-3.14-1.el6.x86_64
工具集介绍:
中间可以用逗号隔开create,delete,close_write
实时监控/data目录创建和删除文件
[root@nfs_server ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /data
3.3第三个里程碑:
①当监控到nfs目录文件系统事件变化后,触发rsync推送变化的文件
[root@nfs_server scripts]# vim inotify.sh
#!/bin/bash
Path=/data
Ip=192.168.16.103
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write $Path \
|while read file
do
cd $Path && \
rsync -az ./ --delete rsync_backup@$Ip::nfsbackup/ --password-file=/etc/rsync.password &
done
inotify调优:
事件相关参数默认大小
[root@nfs_server scripts]# cd /proc/sys/fs/inotify
[root@nfs_server inotify]# ls
max_queued_events max_user_instances max_user_watches
[root@nfs_server inotify]# cat max_queued_events
16384
[root@nfs_server inotify]# cat max_user_instances
128
[root@nfs_server inotify]# cat max_user_watches
8192
关键参数说明:
max_queued_events--设置inotify实例事件(event)队列可容纳的事件数量
max_user_instances--设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_user_watches--设置inotifywait或inotifywatch命令可以监控的文件数量(单进程
实战调优:
[root@nfs_server inotify]# echo 655350 >/proc/sys/fs/inotify/max_user_watches
[root@nfs_server inotify]# echo 655350 >/proc/sys/fs/inotify/max_queued_events
[root@nfs_server inotify]# cat /proc/sys/fs/inotify/max_queued_events
655350
重启会失效:写入/etc/rc.local.
inotify优点:
1.监控文件系统事件变化,通过同步工具实现实时数据同步。
inotify缺点:
1.并发如果大于200个文件(10-100k),同步就会有延迟。
2.有变化才推送,没变化不理会
3.监控到事件后,调用rsync同步单进程的(加&并发),sersync多进程同步。
sersync功能:
1.支持配置文件管理
2.真正的守护进程socket
3.可以对失败文件定时重传(定时任务功能)
4.第三方的HTTP接口(例如更新cdn缓存)
5.默认多线程rsync同步
高并发数据实时同步方案小结
1.inotify(sersync)+rsync文件级别
2.drbd文件系统级别,基于block.缺点:备节点数据不可用
3.第三方软件的同步功能:MySQL同步,oracle,mongodb
4.程序双写,直接写两台服务器
5.业务逻辑解决(读写分离,备读不到,读主)
6.nfs集群(1.4.5)(双写主存储,备存储用inotify(sersync)+rsync,备没有找主解决延迟问题)