实验服务器配置如下
- nfs : 172.16.1.171
- backup: 172.16.1.172
- web01 : 172.16.1.173
- web02 : 172.16.1.174
1.nfs的安装、使用和优化
#server
#-----------------------------------------------------------------------------------------------
yum  install nfs-utils -y 
yum install  rpcbind -y 
#在web01,web02和nfs上分别创建如下账户
#避免使用nfsnobody,提高安全性
useradd -u 1099 www
mkdir -p /data
chown -R www:www /data
echo "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1099,anongid=1099)"> /etc/exports
systemctl start nfs
#exports参数说明
rw                       #可读写
ro                       #只读
sync                     #同步,写到磁盘
async                    #异步,写到缓冲区
root_squash              #root权限压缩:如果使用nfs共享目录的是root账户,那么权限将被压缩为nfsnobody
no_root_squash           #no_root权限压缩:如果使用nfs共享目录的是root账户,那么将具有nfs主机的root权限
anonuid                  #指定uid
anongid                  #指定gid
#client
#-----------------------------------------------------------------------------------------------
yum  install nfs-utils -y 
yum  install rpcbind -y
#查看nfs服务状态
showmount -e 172.16.1.171
useradd -u 1099 www
mkdir -p /data
chown -R www:www /data
#手动挂载命令
mount -t nfs 172.16.1.171:/data /data
#开机自动挂载
echo "mount -a" >> /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local
#建议挂载参数
cat >>/etc/fstab<<EOF
172.16.1.171:/data /data nfs defaults,soft,rsize=131072,wsize=131072  0 0
EOF
#mount挂载参数
#mount -t nfs -o hard,soft.........
hard                     #高耦合度,添加开机自动挂载nfs后,如果nfs主机故障无法开机,那么该主机也会被卡死
soft                     #低耦合度,超时后放弃连接nfs
fg                       #后台挂载
exec                     #允许运行可执行文件
noexec                   #不允许运行可执行文件,提高安全性
noatime                  #不更新文件的inode时间戳,提高IO性能
nodiratime               #不更新目录的inode时间戳,提高IO性能
nfs主机的内核优化
cat >>/etc/sysctl.conf<<EOF
#################nfs的优化#################
net.core.wmem_default = 838608         #发送套接字缓冲区默认值
net.core.rmem_default = 8388608        #接收套接字缓冲区默认值
net.core.rmem_max = 16777216           #接收套接字缓冲区最大值
net.core.wmem_max = 16777216           #发送套接字缓冲区最大值
#################nfs的优化#################
EOF
sysctl -p2.inotify-tools的安装和使用(需要rsync)
#需要epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y inotify-tools
#inotifywait和inotifywatch
inotifywait     #监控变化事件
#参数
-m              #始终保持事件监控
-d              #命令后台运行并记录日志
-r              #递减监控目录数据信息变化
-q              #只打印事件日志
--excludei      #排除文件或目录
--timefmt       #指定时间输出格式
%y%m%d %H%M-%e  #%e输出事件类型
--format        #打印指定的输出字符串
%w%f            #文件路径
-e              #监控指定的事件,如果省略,表示监控所有事件
access          #文件或目录内容被读取
modify          #文件或目录内容被修改
attrib          #文件或目录属性被修改
close_write     #文件或目录在写入模式打开后关闭的
close_nowrite   #文件或目录在只读模式打开后关闭的
close           #文件或目录被关闭(无论模式)
open            #文件或目录被打开(无论模式)
moved_to        #文件或目录被移动到监控目录中
moved_from      #文件或目录被移动到监控目录中(from监控目录)
create          #文件或目录内容被创建
delete          #文件或目录内容被删除
inotifywatch    #统计监控数据
#inotify-tools的优化
#/proc/sys/fs/inotify目录包含三个文件
max_queued_events    #队列可容纳的事件数量
默认8192              #建议:50000000
max_user_instances   #命令的进程数
默认128               #建议:128
max_user_watches     #单进程可以监控的文件数量
默认16384             #建议:50000000
#重启后会失效,建议放rc.local里
cat >>/etc/rc.d/rc.local<<EOF
#################inotify-tools的优化#################
echo "50000000" > /proc/sys/fs/inotify/max_queued_events
echo "50000000" > /proc/sys/fs/inotify/max_user_watches
#################inotify-tools的优化#################
EOF
#-----------------------------------------------------------------------------------------------
#实时复制脚本
#close_write包含了create的过程,所以只用close_write就可以监控创建和修改
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /data | while read line
do
#处理删除事件,因为文件被删除后无法获取文件名进行单独同步,只能整体同步整个文件夹
#如果$line获取的文件不存在,那么将同步整个data文件夹,并跳出当此循环,如果文件存在,将执行第二条语句
   [ ! -e $line ] && rsync -az /data/ --delete rsync_backup@172.16.1.172::backup --password-file=/etc/rsync.password && continue
   rsync -az $line --delete rsync_backup@172.16.1.172::backup --password-file=/etc/rsync.password
done
#脚本开机自启
echo "/home/script/sync.sh &" >> /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local3.sersync的安装和使用(需要rsync)
#具体参数参考confxml,已做注释
#一键脚本
#!/bin/bash
wget https://download.luckinserver.cn:90/linux-software/sersync/sersync.tar.gz
tar -xzf sersync.tar.gz
cp -a sersync /usr/local
cp /usr/local/sersync/bin/sersync  /usr/local/bin
rm -f sersync.tar.gz
rm -rf sersync
cat >/usr/lib/systemd/system/sersync.service <<EOF
[Unit]
Description=sersync
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/sersync -d  -n 30 -o /usr/local/sersync/conf/confxml.xml
[Install]
WantedBy=multi-user.target
EOF