实验服务器配置如下
- 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 -p
2.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.local
3.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