DNS服务部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS服务部署相关的知识,希望对你有一定的参考价值。

NFS网络文件系统(存储服务),什么是NFS?

NFS是Network File System的缩写,中文意思是网络文件系统,它的主要功能是通过网络(一般是局域网)
让不同的主机系统之间可以共享文件或目录 

什么是文件系统:
知识回顾:
文件系统(装修的风格)--怎么来存放文件的,即存放文件的一种方式
新磁盘要做raid---分区---格式化(文件系统)---挂载使用
centos ext2,3,4
centos 7 xfs
suse reisersfs
分布式文件系统:mfs gfs fastdfs(重点研究的分布式文件系统)

1.3 为什么要NFS服务进行数据存储

a 实现数据信息共享
b 实现数据信息一致

1.4 NFS系统原理介绍

1.4.1 NFS服务工作架构(挂载架构图)
a 部署好NFS服务
b web服务器进行挂载nfs共享目录
c 对客户端挂载点目录下的数据进行修改,等价于在服务端共享目录中,对数据的修改

1.4.2 什么叫做rpc服务
rpc服务类似一个中介服务,由于nfs服务启动会产生多个进程和端口(端口号随机产生),
不方便客户端与之建立网络连接
利用rpc服务建立nfs文件共享流程
a 启动rpc服务,创建111端口信息
b 启动nfs服务,向rpc服务注册进程端口号信息
c 客户端访问rpc服务,获取nfs服务信息
d 客户端获取nfs共享目录信息后,进行mount挂载

1.4.3 nfs工作原理图
nfs服务端:做了3件事
nfs客户端:做了3件事

1.5 NFS服务部署过程

技术分享图片
1.5.1 确认部署环境
3台服务器:web01 backup nfs01

扩展:实现yum下载数据本地保存
vim /etc/yum.conf     ---修改编写yum配置文件
cachedir=/var/cache/yum/$basearch/$releasever   --- 下载软件保存路径
keepcache=1                                     --- 开启yum下载软件保存功能
[[email protected] ~]# yum reinstall telnet -y
[[email protected] ~]# cd /var/cache/yum/x86_64/6/
[[email protected] 6]# tree

1.5.2 nfs服务部署流程

技术分享图片

1.5.3 nfs服务端部署
第一个里程碑:确认nfs相关软件是否安装
rpm -qa rpcbind
rpm -qa nfs-utils

第二个里程碑:进行nfs相关软件yum安装
yum install -y rpcbind nfs-utils

第三个里程碑:编写nfs配置文件
[[email protected] 6]# cat /etc/exports 
/data 172.16.1.0/24(rw,sync)

第四个里程碑:创建共享目录
mkdir /data
chown -R nfsnobody.nfsnobody /data

第五个里程碑:启动nfs相关服务
[[email protected] data]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ] 
[[email protected] data]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]

第六个里程碑:检查nfs相关服务是否正常启动
[[email protected] data]# rpcinfo -p localhost      --- 确认房源信息是否已经注册到rpc服务中
[[email protected] data]# showmount -e 172.16.1.31  --- 确认是否有可以挂载的目录信息
Export list for 172.16.1.31:

/data 172.16.1.0/24
1.5.4 本地测试挂载
[[email protected] data]# mount -t nfs 172.16.1.31:/data /mnt --- nfs服务端本地测试挂载
[[email protected] data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.7G 6.8G 20% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
172.16.1.31:/data 8.8G 1.7G 6.8G 20% /mnt

1.5.5 nfs客户端部署
第一个里程碑:安装相应nfs客户端软件
yum install -y rpcbind nfs-utils

第二个里程碑:rpcbind服务可以启动(也可以不启动)
/etc/init.d/rpcbind start

第三个里程碑:进行挂载前测试
[[email protected] data]# rpcinfo -p localhost      --- 确认房源信息是否已经注册到rpc服务中
[[email protected] data]# showmount -e 172.16.1.31  --- 由于未安装nfs-utils软件,因此没有showmount

第四个里程碑:进行共享目录挂载
[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt
[[email protected] ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3          8.8G  1.7G  6.8G  20% /
tmpfs              931M     0  931M   0% /dev/shm
/dev/sda1          190M   40M  141M  22% /boot
172.16.1.31:/data  8.8G  1.7G  6.8G  20% /mnt

1.6 NFS服务常见进程详解

查看看以上进程,均可以执行 ”man 进程名“ 命令,例如 “man rpc.idmapd”,
可查看有关NFS服务进程的英文说明参考:

1.7 exports配置文件格式

NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)

NFS共享目录 NFS客户端地址(参数1,参数2,...)

执行man exports命令,然后切换到文件结尾,可以快速查看如下样例格式:
EXAMPLE

sample /etc/exports file

      /                 master(rw) trusty(rw,no_root_squash)
      /projects         proj*.local.domain(rw)
      /usr              *.local.domain(ro) @trusted(rw)
      /home/joe         pc001(rw,all_squash,anonuid=150,anongid=100)
      /pub              *(ro,insecure,all_squash)
      /srv/www          -sync,rw server @trusted @external(ro)
      /foo              2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
      /build            buildhost[0-9].local.domain(rw)

1.8 exports配置文件重要参数说明

no_root_squash --- root用户不进行映射压缩
root_squash --- root用户进行映射压缩
all_squash --- 所有用户都进行压缩
no_all_squash --- 所有用户都不进行压缩

root_squash,no_all_squash参数实践
[[email protected] data]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,root_squash,no_all_squash)

1.9 NFS在企业生产集群架构中的位置

技术分享图片

1.10 NFS存储服务器搭建-同步异步对比及优点缺点

技术分享图片

1.11 命令参数

技术分享图片
流程图
技术分享图片

实践操作:将默认nfsnobody映射用户转为www
第一里程碑:在服务端和客户端创建出相同uid和gid的www用户
[[email protected] ~]# useradd -u 666 www
[[email protected] ~]# id www
uid=666(www) gid=666(www) groups=666(www)

[[email protected] ~]# useradd -u 666 www
[[email protected] ~]# id www
uid=666(www) gid=666(www) groups=666(www)

第二里程碑:编写nfs服务端配置文件
[[email protected] ~]# cat /etc/exports 
/data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666)

第三个里程:修改原有共享目录权限
chown -R www.www /data

第四个里程:客户端进行挂载测试
[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt
[[email protected] mnt]# touch oldboy.txt
[email protected] mnt]# ll
otal 0
rw-r--r-- 1 www www 0 Dec  1 09:35 oldboy.txt

1.3 为什么用户默认映射为nfsnobody

[[email protected] data]# cat /var/lib/nfs/etab     --- nfs默认配置信息记录文件
/data   172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
[[email protected] data]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

1.4 实践练习:共享不同的两个目录,分别赋予读和写权限

服务端上面要求:
nfs服务器172.16.1.31,共享下面两个目录:
/data/w 要求的权限可读写,同步数据sync,所有用户都压缩为匿名用户all_suqash
/data/r 要求的权限为只读,同步数据sync,所有用户都压缩为匿名用户all_squash

客户端上面要求:
backup服务器 把NFS服务器的/data/r 挂载到/data/r
web01服务器 把NFS服务器的/data/w 挂载到/data/w

1.5 配置nfs服务端:

第一个里程:编写nfs配置文件
vim /etc/exports
/data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666)
/data/w 172.16.1.0/24(rw,sync,all_suqash)
/data/r 172.16.1.0/24(ro,sync,all_suqash)

第二个里程:创建新增共享目录
[[email protected] data]# mkdir /data/{w,r} -p
[[email protected] data]# chown -R nfsnobody.nfsnobody /data/
[[email protected] data]# ll /data/
total 8
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 1 09:35 oldboy.txt
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Dec 1 10:30 r
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Dec 1 10:30 w

第三个里程:平滑重启nfs服务
/etc/init.d/nfs reload

配置nfs客户端:
backup服务器配置:
创建挂载点目录:mkdir /data/r -p
进行共享目录挂载:mount -t nfs 172.16.1.31:/data/r /data/r
说明:如果挂载点已经挂载上了,需要卸载重新挂载

web01服务器配置:
创建挂载点目录:mkdir /data/w -p
进行共享目录挂载:mount -t nfs 172.16.1.31:/data/w /data/w
说明:如果挂载点已经挂载上了,需要卸载重新挂载

第四个里程:进行挂载目录权限测试
测试backup挂载目录权限(预期结果:挂载目录中创建信息会权限拒绝)
[[email protected] ~]# cd /data/r/
[[email protected] r]# touch oldboy_backup.txt
touch: cannot touch `oldboy_backup.txt‘: Permission denied

测试web01挂载目录权限(预期结果:挂载目录中创建信息会权限拒绝)
[[email protected] w]# touch oldboy_web01.txt
[[email protected] w]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 1 10:48 oldboy_web01.txt

注意:nfs配置文件中,配置的共享目录,不要有父目录与子目录的继承关系

1.6 NFS服务的重点知识梳理

NFS客户端权限与三个因素有关:
1) NFS服务器/etc/exports设置需要开放可写入的权限,即服务器端的共享权限。
? 2) NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限。
? 3)每台机器对应存在和NFS默认配置UID的相同UID 65534的nfsnobody用户
(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)、

重要配置文件与命令总结
/etc/exports --- nfs服务端主配置文件
/usr/sbin/exportfs --- exportfs为nfs服务管理命令,还可以进行命令行配置共享目录信息
/usr/sbin/showmount --- 显示可以挂载的共享目录列表信息
/var/lib/nfs/etab --- 查看nfs服务端默认挂载参数配置信息
/proc/mounts --- 查看nfs客户端默认挂载参数配置信息

umount命令重要参数
-l Lazy unmount --- 懒惰卸载,不用跳出挂载的目录进行卸载
-f Force unmount --- 强制卸载
NFS客户端挂载命令

1.7 客户端挂载可能会遇到的问题

第一个报错:
[[email protected] ~]# showmount -e 10.0.0.7 <- 这里遇到了故障
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
问题说明:
nfs服务端防火墙没有关闭,防火墙策略阻止掉了

第二个报错:
[[email protected] ~]# showmount -e 10.0.0.7
clnt_create: RPC: Program not registered
问题说明:
nfs服务没有启动,只启动了rpcbind服务

第三个报错:
[[email protected] data]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
Starting NFS mountd: [FAILED]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
[FAILED]
问题说明:
nfs与rpcbind服务启动顺序不正确,rpcbind服务没有启动,先启动了nfs服务

第四个报错:
示例1:客户端挂载报错“No such file or directory”
[[email protected] ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt
mount.nfs: mounting 172.16.1.31:/data failed, reason given by server: No such file or directory
解答:原因是NFS服务器端没有共享目录/data,创建即可。命令如下:
[[email protected] ~]# mkdir /data

第五个报错:
示例4:卸载挂载设备时显示device is busy。
[[email protected] mnt]# umount /mnt
umount.nfs: /mnt: device is busy
umount.nfs: /mnt: device is busy
问题解决:
umount -lf /mnt

第六个报错:
示例5:CentOS 6.6客户端NFS挂载时遇到问题。
[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt
mount:wrong fs type,bad option,bad option,bad superblock on 10.0.0.7:/data,
missing codepage or helper program,or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program )
In some cases useful info is found in syslog - try
meg | tail or so
问题说明:
客户端没有安装nfs-utils软件包,无法识别nfs文件系统类型

第七个报错:
共享目录挂载很卡
mount -t nfs 172.16.1.31:/data /mnt
cd /mnt
time touch test.txt
原因分析:
? NFS服务端重启之后。立刻进行挂载会出现此问题,因为NFS自身重启的时候,拥有无敌的时间,默认是90秒;在无敌时间内,是不能对共享目录进行更改的操作;
? 在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
NLM_GRACE_PERI0D=90

第八个报错:
Stale file handle
客户端报错
mount -t nfs 172.16.1.31:/data /mnt
mount.nfs: Stale file handle
问题原因:
挂载点目录已经在挂载中,一定要卸载后,才能进行重新挂载

1.8 NFS客户端开机自启动挂载

1.8.1 利用rc.local文件实现
将挂载命令追加到/etc/rc.local文件中
echo ‘mount -t nfs 172.16.1.31:/data /mnt‘ >>/etc/rc.local

1.8.2 利用fstab文件实现
vim /etc/fstab
挂载什么 挂载到哪 类型 挂载参数 是否备份 是否检查磁盘
172.16.1.31:/data /mnt nfs defaults 0(dump) 0(fsck)
[[email protected] ~]# /etc/init.d/netfs start
说明:netfs服务设置开机自启动后,可以让系统网络服务启动后,再次识别fstab文件配置信息

1.8.3 NFS客户端挂载参数说明
技术分享图片
技术分享图片
1.8.4 NFS客户端优化参数总结

技术分享图片
技术分享图片
1.8.4.1 有关系统安全挂载参数选项
在企业工作场景,一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的。
因此在挂载的时候,用下面的命令很有必要:
mount -t nfs -o nosuid,noexec,nodev,rw 10.0.0.7:/data /mnt
通过mount -o指定挂载参数和在/etc/fstab里指定挂载参数的效果是一样的。
网络文件系统和gf 本地的文件系统效果也是一样的。

1.8.4.2 mount挂载性能优化参数选项
下面介绍几个在企业生产环境下,NFS性能优化挂载的例子。
1)禁止更新目录及文件时间戳挂载,命令如下:
mount -t nfs -o noatime,nodiratime 10.0.0.7:/data /mnt

以上是关于DNS服务部署的主要内容,如果未能解决你的问题,请参考以下文章

部署DNS服务和管理DNS

Linux网络服务——部署搭建DNS服务器

Kubernetes 部署集群内部DNS服务

架构师成长之路6.4 DNS服务器搭建(部署主从DNS)

linux下的DNS服务器部署(详细)

DNS主从服务器部署配置