中间件

NFS实时复制的实例

admin · 8月7日 · 2020年

实验服务器配置如下

  • 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