4.部署NFS
Linux9期架构day04
NFS文件共享存储
扩展rsync结合inotify实现实时同步
## 1.客户端上安装inotify
[root@web01 ~]# yum install -y inotify-tools
## 2.inotifywait命令选项
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
## 用法
- 当/backup目录出现创建,修改,删除,修改属性,写入内容时,将在屏幕输出信息
/usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /backup
## 3.写脚本触发rsync命令,与备份机实现实时备份
[root@nfs ~]# vim ssbeifen.sh
#!/bin/bash
export RSYNC_PASSWORD=123
jiankong_dir='/data'
rsync_user='jzk_bak'
rsync_mkuai='jkz'
/usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write $jiankong_dir | while read line;do
rsync -az --delete $jiankong_dir/ ${rsync_user}@10.0.0.41::${rsync_mkuai}
done &
NFS共享存储
基本简介
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架****构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS**
共享存储
nfs实现的原理
Rpc.nfsd: 他是基本的NFS守护进程,主要功能是管理客户端是否能够登入服务器
Rpc.mount:主要功能是管理NFS的文件系统。当客户端顺利通过nfsd登入NFS服务器后,他会使用NFS服务提供的文件前,还必须通过文件使用权限的验证。他还会读取NFS的配置文件/etc/exprots来对比客户端权限
Rortmap:主要功能是进行端口映射工作
服务端安装配置文件里面的命令
执行man exports命令,然后切换到文件结尾,可以快速查看如下样例格式:
| nfs共享参数 | 参数作用 | 
|---|---|
| rw | 读写权限 | 
| ro | 只读权限 | 
| root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) | 
| no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用) | 
| all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) | 
| no_all_squash | 无论NFS客户端使用什么账户访问,都不进行压缩 | 
| sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 | 
| async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 | 
| anonuid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 | 
| anongid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 | 
# nfs服务端的配置文件修改
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data :NFS共享目录(可以有多个共享目录)
# /abc 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
# /bcd 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
等。。客户端需要什么共享目录就写什么共享目录
172.16.1.0/24: 0/24代表本地网络的所有网段 
rw:读写权限
sync:同时将数据写入到内存与硬盘中,保证不丢失数据
all_squash:无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
anonuid=666:启动用户的uid
anongid=666:启动用户的gid
# 检查配置文件是否生效
[root@nfs data]# cat /var/lib/nfs/etab
# nfs客户端的命令
[root@web01 ~]# showmount -e 172.16.1.31   ## 查看有多少共享目录31是服务端
# 挂载共享目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /本地需要共享的文件
# 卸载共享
[root@web01 ~]# umount /本地共享的文件
#通过mount -o指定挂载参数,禁止更新目录及文件时间戳挂载(用的少)
[root@web01 ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /mnt
nfs共享和备份实例
1. 准备环境
思路
- 准备环境
 - nfs配置共享储存和实时备份数据(写脚本)
 - 配置客户端
 - 配置backup服务端
 - 测试
 
| 角色 | 外网ip | 内网ip | 主机名 | 
|---|---|---|---|
| NFS客户端 | eth0:10.0.0.7 | eth0:172.16.1.7 | web01 | 
| NFS客户端 | eth0:10.0.0.8 | eth0:172.16.1.8 | web02 | 
| NFS服务端(backup客户端) | eth0:10.0.0.31 | eth0:172.16.1.31 | nfs | 
| backup服务端 | eth0:10.0.0.41 | eth0:172.16.1.41 | backup | 
2. nfs配置共享储存和实时备份数据
# CentOS 6,需要安装nfs和rpc
[root@nfs ~]# yum install -y nfs-utils rpcbind
# CentOS 7 直接开始(内置rpcbind并且已启动)
# 1.修改nfs的配置文件
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
# 2.创建共享目录,并修改属主和属组
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown  www.www /data
# 3.创建服务的通用用户
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -g 666 -u 666 -s /sbin/nologin -M
# 4.启动服务和开机自启
[root@nfs ~]# systemctl start nfs.service
[root@nfs ~]# systemctl enable nfs.service
######## 若是CentOS6,需要多启动一个服务rpcbind 并且是先启动##########
[root@nfs ~]# systemctl start rpcbind nfs-server
########################### 实时备份/data ###############################
# 1.下载实时备份
[root@nfs /data]# yum install -y rsync inotify-tools
# 2.写脚本触发rsync命令                        ##  rsync与inotify命令一起使用实时监控备份,写了while循环
[root@nfs ~]# vim ssbeifen.sh
#!/bin/bash
export RSYNC_PASSWORD=123
jiankong_dir='/data'
rsync_user='jkz_bak'
rsync_mkuai='jkz'
/usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write $jiankong_dir | while read line;do
rsync -az --delete $jiankong_dir/ ${rsync_user}@10.0.0.41::${rsync_mkuai}
done &
# 3.rsync备份服务开启
[root@nfs ~]# systemctl start rsyncd
[root@nfs ~]# systemctl enable rsyncd
3. 配置客户端(所有nfs客户端操作一致,此处以web02为例)
# 1.创建服务通用用户
[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -g 666 -u 666 -s /sbin/nologin -M
# 2.安装服务
[root@web02 ~]# yum install -y httpd php              ### 一个服务
# 3.查看nsf有几个可以挂载的目录
[root@web02 ~]# showmount -e 172.16.1.31
Export list for 10.0.0.31:
/data 172.16.1.0/24
# 4.挂载站点目录
[root@web02 ~]# mount -t nfs 172.16.1.31:/data /var/www/html
# 5.解压php写的一个html页面
[root@web02 /var/www/html]# unzip kaoshi.zip
# 6.修改http的启动用户
[root@web02 /var/www/html]# vim /etc/httpd/conf/httpd.conf      ##启动服务的用户和用户组
# 把apache用户组和用户修改成www用户组和用户
User www
Group www
# 7.更改挂载目录的属主和属组
[root@web02 ~]# chown -R www.www  /var/www/html/
# 8.启动httpd服务和开机自启
[root@web02 ~]# systemctl start httpd
[root@web02 ~]# systemctl enable httpd
# 服务端完
4. 配置backup服务端
# 1.更改rsync配置文件
[root@nfs ~]# vim /etc/rsyncd.conf
# 指定启动rsync服务的用户id
uid = www
# 指定启动rsync服务的用户组id
gid = www
# 指定rsync服务启动的端口
port = 873
# 假装是root
fake super = yes
# 禁锢path目录
use chroot = no
# 最大连接数是200
max connections = 200
# 超时时间是600s
timeout = 600
# 忽略错误
ignore errors
# 可读可写
read only = false
# 其它客户端用户不允许查看模块名
list = false
# rsync服务的日志所在路径
log file = /var/log/rsyncd.log
########### 命令相关配置 #############
auth users = jkz_bak
secrets file = /etc/rsync_pass
[jkz]
comment = welcome to oldboyedu backup!
path = /backup
# 2.创建用户
[root@backup ~]# groupadd www -g 666
[root@backup ~]#  useradd www -g 666 -u 666 -s /sbin/nologin -M
# 3.创建写入用户密码文件,授权密码文件
[root@backup ~]# echo 'jkz_bak:123' > /etc/rsync_pass
[root@backup ~]# chmod 600 /etc/rsync_pass
# 4.创建备份目录,并且修改属主属组
[root@backup ~]# mkdir /backup
[root@backup ~]# chown www.www  -R /backup 
# 5.启动和开机自启rsync服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
# 6.检查端口和进程
[root@backup ~]# netstat -lntup |grep 873
[root@backup ~]# ps -ef |grep [r]sync
# 最后给所有虚拟机同步时间   ntpdate time1.aliyun.com
5. 测试
进入nfs任意一个客户端随便上传一个文件,比如10.0.07
查看web01有个时间的目录和_jkz.png(上传成功)
查看web02有个时间的目录和_jkz.png(共享成功)
查看nfs有个时间的目录和_jkz.png(共享成功)
使用ip查看也没有问题并且共享成功
最后查看备份 也没有问题(完成结束)

                
            
        
浙公网安备 33010602011771号