nfs部署安装:
服务端:
1、安装
yum isntall -y rpcbind nfs-utils
2、配置
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
3、创建目录
mkdir /data
chown -R nfsnobody.nfsnobody /data
4、启动服务
systemctl start rpcbind nfs
systemctl enable rpcbind nfs
5、验证服务启动
netstat -lntp | grep rpc
##### 1、安装服务
```bash
yum install -y rpcbind nfs-utils
2、启动rpcbind
systemctl start rpcbind
systemctl enable rpcbind
3、验证可挂载目录
showmount -e 172.16.1.31
4、挂载
mount -t nfs 172.16.1.31:/data /var/www/html
5、开机挂载
[root@web01 html]# vim /etc/fstab
172.16.1.31:/data /var/www/html nfs defaults 0 0
6、卸载
[root@nfs-client ~]# umount /nfsdir
#注意:卸载的时候如果提示”umount.nfs: /nfsdir: device is busy”
#1.切换至其他目录, 然后在进行卸载。
#2.NFS Server宕机, 强制卸载umount -lf /nfsdir
7、增加安全性
#通过mount -o指定挂载参数,禁止使用suid,exec,增加安全性能
[root@nfs-client ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data /mnt
8、增加性能
#通过mount -o指定挂载参数,禁止更新目录及文件时间戳挂载
[root@nfs-client ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /mnt
NFS配置详解
1、常用的配置:
rw:挂载目录具有读写权限
sync:将数据同时保存至内存和磁盘
all_squash:压缩用户权限为nfs的匿名用户
anonuid:指定用户的uid,用户必须是真实存在的
anongid:指定用户的gid,用户组也必须是存在的
2、不常用的配置:
ro:挂载目录为只读权限
async:将数据先写入内存,再写入磁盘
no_all_squash:不压缩用户权限
root_squash:用户使用root用户登录时,压缩为nfs匿名用户权限
no_root_squash:用户使用root用户登录时,不压缩为用户权限
3、验证只读权限
[root@nfs data]# vim /etc/exports
/data 172.16.1.0/24(ro,sync,all_squash)
[root@nfs data]# systemctl restart nfs
#客户端创建文件报错
[root@backup html]# mkdir 123
mkdir: cannot create directory ‘123’: Read-only file system
4、验证挂载目录配置的文件
[root@nfs data]# 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)
统一web01、nfs、backup所有用户
1、web01:
#1.修改httpd启动用户
[root@web01 www]# vim /etc/httpd/conf/httpd.conf
User www
Group www
#2.创建用户
[root@web01 www]# groupadd www -g 666
[root@web01 www]# useradd www -u 666 -g 666
#3.重启httpd
[root@web01 www]# systemctl restart httpd
#4.重新授权目录
[root@web01 www]# chown -R www.www /var/www/html/
2、NFS服务器:
#1.修改nfs配置文件
[root@nfs data]# vim /etc/exports
/data 172.16.1.0/24(ro,sync,anonuid=666,anongid=666,all_squash)
#2.重启服务
[root@nfs data]# systemctl restart nfs
#3.验证服务
[root@nfs data]# cat /var/lib/nfs/etab
#4.创建用户
[root@web01 www]# groupadd www -g 666
[root@web01 www]# useradd www -u 666 -g 666
#5.授权目录
[root@nfs data]# chown -R www.www /data/
3、backup服务器
#1.修改rsync配置
[root@backup backup]# vim /etc/rsyncd.conf
uid = www
gid = www
#2.重启服务
[root@backup backup]# systemctl restart rsyncd
#3.创建用户
[root@web01 www]# groupadd www -g 666
[root@web01 www]# useradd www -u 666 -g 666
#4.授权目录
[root@backup backup]# chown -R www.www /backup/
NFS存储小结
1.NFS存储优点
1)NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2)NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。
2.NFS存储局限
存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup
NFS数据明文, 并不对数据做任何校验。
客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
3.NFS应用建议
- 生产场景应将静态数据尽可能往前端推, 减少后端存储压力
- 必须将存储里的静态资源通过CDN缓存jpg\png\mp4\avi\css\js
- 如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
结合rsync,解决NFS单点故障
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lY6Ib86M-1577169009927)(C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1575343556723.png)]
backup服务器:
1.安装rpcbind和nfs
[root@backup ~]# yum install -y rpcbind nfs-utils
2.配置nfs
[root@backup ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666,all_squash)
3.创建系统用户
[root@backup www]# groupadd www -g 666
[root@backup www]# useradd www -u 666 -g 666
4.创建目录
[root@backup ~]# mkdir /data
#授权
[root@backup ~]# chown -R www.www /data/
5.启动服务
[root@backup ~]# systemctl start rpcbind nfs
6.安装rsync
[root@backup ~]# yum install -y rsync
7.配置rsync
[root@backup ~]# vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = false
max connections = 200
timeout = 600
ignore errors
read only = false
list = true
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[data]
comment = welcome to oldboyedu backup!
path = /data
[backup]
comment = welcome to oldboyedu backup!
path = /backup
8.创建虚拟用户的密码文件
[root@backup ~]# echo 'rsync_backup:123456' > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
9.启动服务
[root@backup ~]# systemctl start rsyncd
10.验证服务
[root@backup ~]# netstat -lntp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7882/rsync
tcp6 0 0 :::873 :::* LISTEN 7882/rsync
[root@backup ~]#
NFS服务器:
1.安装rpcbind和nfs
[root@nfs ~]# yum install -y rpcbind nfs-utils
2.配置nfs
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666,all_squash)
3.创建系统用户
[root@nfs www]# groupadd www -g 666
[root@nfs www]# useradd www -u 666 -g 666
4.创建目录
[root@nfs ~]# mkdir /data
#授权
[root@nfs ~]# chown -R www.www /data/
5.启动服务
[root@nfs ~]# systemctl start rpcbind nfs
6.安装rsync
[root@nfs ~]# yum install -y rsync
7.写脚本
[root@web01 ~]# vim /scripts/client-put.sh
#!/bin/bash
#配置环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#配置变量
DIR=/backup
H=$(hostname)
I=$(hostname -I | awk '{print $2}')
D=$(date +%F)
S=$DIR/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)
#1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
mkdir -p $S
#2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
cd / && \
tar zcf $S/conf.tar.gz etc/hosts
#添加认证文件
md5sum $S/conf.tar.gz > $S/flag_$D
#3.客户端最后将备份的数据进行推送至备份服务器
export RSYNC_PASSWORD=123456
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write /data | while read line;do
cd /data && rsync -avz /data/ rsync_backup@172.16.1.41::data >/dev/null 2>&1
done &
#5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find $DIR -type d -mtime +7 | xargs rm -rf
8.创建文件备份目录
[root@nfs ~]# mkdir /backup
[root@nfs ~]# chown -R www.www /backup/
web服务器:
1.安装rpcbind和nfs
[root@web01 ~]# yum install -y rpcbind nfs-utils
2.启动rpcbind
[root@web01 ~]# systemctl start rpcbind
3.验证nfs可挂载目录
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web01 ~]# showmount -e 172.16.1.41
Export list for 172.16.1.41:
/data 172.16.1.0/24
4.安装httpd和PHP
[root@web01 ~]# yum install -y httpd php
5.配置httpd
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
User www
Group www
6.创建用户
[root@nfs www]# groupadd www -g 666
[root@nfs www]# useradd www -u 666 -g 666
7.上传代码文件
[root@web01 ~]# cd /var/www/html/
[root@web01 html]# rz kaoshi.zip
[root@web01 html]# unzip kaoshi.zip
[root@web01 html]# vim upload_file.php
$wen="/var/www/html/pic";
[root@web01 html]# mkdir pic
8.授权目录
[root@web01 html]# chown -R www.www /var/www/html/
9.挂载
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/pic/
10.启动httpd
[root@web01 html]# systemctl start httpd
11.挂载出现问题时切换(脚本)
[root@web01 html]# mkdir /scripts/
[root@web01 html]# vim /scripts/nfs.sh
#!/bin/bash
umount -lf /var/www/html/pic &>/dev/null
showmount -e 172.16.1.31 &>/dev/null
if [ $? -eq 0 ];then
mount -t nfs 172.16.1.31:/data /var/www/html/pic &>/dev/null
else
mount -t nfs 172.16.1.41:/data /var/www/html/pic &>/dev/null
fi
[root@web01 ~]# vim /scripts/nfs.sh
#!/bin/bash
while true
do
showmount -e 172.16.1.31 &>/dev/null
if [ $? -eq 0 ]
then
umount -lf /var/www/html &>/dev/null
mount -t nfs 172.16.1.31:/data /var/www/html &>/dev/null
else
umount -lf /var/www/html &>/dev/null
mount -t nfs 172.16.1.41:/data /var/www/html &>/dev/null
fi
sleep 5
done
扩展inotify
1.安装inotify
[root@nfs ~]# yum -y install inotify-tools
2.inotify参数说明
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3.命令测试
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
4.脚本编写
[root@backup ~]# vim rsyn-inotify.sh
#!/bin/bash
dir=/backup
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
done &