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**

共享存储

image-20200508213923513

nfs实现的原理

Rpc.nfsd: 他是基本的NFS守护进程,主要功能是管理客户端是否能够登入服务器

Rpc.mount:主要功能是管理NFS的文件系统。当客户端顺利通过nfsd登入NFS服务器后,他会使用NFS服务提供的文件前,还必须通过文件使用权限的验证。他还会读取NFS的配置文件/etc/exprots来对比客户端权限

Rortmap:主要功能是进行端口映射工作

image-20200508215300197

服务端安装配置文件里面的命令

执行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. 准备环境

思路

  1. 准备环境
  2. nfs配置共享储存和实时备份数据(写脚本)
  3. 配置客户端
  4. 配置backup服务端
  5. 测试
角色 外网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

image-20200508203516376

查看web01有个时间的目录和_jkz.png(上传成功)

image-20200508203750246

查看web02有个时间的目录和_jkz.png(共享成功)image-20200508203931004

查看nfs有个时间的目录和_jkz.png(共享成功)image-20200508204016942

使用ip查看也没有问题并且共享成功

image-20200508204251706

image-20200508204515453

最后查看备份 也没有问题(完成结束)

image-20200508204636117


posted @ 2020-06-01 23:30  柯正  阅读(201)  评论(0)    收藏  举报