节点 IP地址 镜像
FTP 192.168.116.130 centos7 1511
NFS 192.168.116.131 centos7 1511

基础搭建

  1. *两个节点都要配置*
  2. // 修改主机名:
  3. # hostnamectl set-hostname ftp
  4. # hostnamectl set-hostname nfs
  5. // 关闭防火墙及安全规则:
  6. # systemctl stop firewalld
  7. # systemctl disable firewalld
  8. # setenforce 0

FTP 部署

  1. yum 安装 FTP
  1. [root@ftp ~]# yum -y install vsftpd
  2. //启动 ftp 并设置开机自启:
  3. [root@ftp ~]# systemctl start vsftpd
  4. [root@ftp ~]# systemctl enable vsftpd
  5. //创建虚拟用户账号(bai1-6):
  6. [root@ftp ~]# vi /etc/vsftpd/users.conf
  7. //内容
  8. bai1
  9. 0000
  10. bai2
  11. 0000
  12. bai3
  13. 0000
  14. bai4
  15. 0000
  16. bai5
  17. 0000
  18. bai6
  19. 0000
  20. //转化为 Berkeley DB 格式的数据文件:
  21. [root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db
  22. //设置 DB 文件权限提高安全性:
  23. [root@ftp ~]# chmod 600 /etc/vsftpd/users.db
  24. //创建 FTP 根目录及虚拟用户映射的系统用户:
  25. [root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin
  26. [root@ftp ~]# mkdir -p /home/vsftpd/xmcsxy
  27. [root@ftp ~]# chmod -R 755 /home/vsftpd
  28. //建立支持虚拟用户的 PAM 认证文件:
  29. [root@ftp ~]# vi /etc/pam.d/vsftpd
  30. auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
  31. account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
  32. //备份配置文件并导入有效参数:
  33. [root@ftp ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
  34. [root@ftp ~]# egrep -v '^$|^#' /etc/vsftpd/vsftpd.conf.bak >
  35. /etc/vsftpd/vsftpd.conf
  36. //添加虚拟用户支持修改配置文件/etc/vsftpd/vsftpd.conf:
  37. anonymous_enable=NO
  38. chroot_local_user=YES
  39. guest_enable=YES
  40. allow_writeable_chroot=YES
  41. user_config_dir=/etc/vsftpd/vsftpd_conf
  42. //为不同的虚拟用户建立独立的配置文件:
  43. [root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_conf
  44. [root@ftp ~]# cd /etc/vsftpd/vsftpd_conf
  45. [root@ftp vsftpd_conf]# vi bai1
  46. local_root=/home/vsftpd/xmcsxy/yumwei #本地家目录路径
  47. write_enable=YES
  48. anon_upload_enable=NO
  49. anon_max_rate=60000
  50. //以此类推把 bai1.....bai6 配置完,修改每个用户的本地家目录路径!
  51. 重启服务生效配置文件:
  52. [root@ftp ~]# systemctl restart vsftpd
  53. [root@ftp ~]# systemctl status vsftpd
  54. [root@ftp ~]# netstat -lntp | grep 21
  55. tcp6 0 0 :::21 :::*
  56. LISTEN 18750/vsftpd

NFS 部署

检查环境(两台都需要):

  1. //检查环境(两台都需要):
  2. # uname -a
  3. //安装 nfs 依赖包(两台都需要):
  4. # yum -y install nfs-utils rpcbind
  5. //查看 nfsnobody 用户在不在(两台都需要):
  6. # id nfsnobody
  7. uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
  8. //启动 nfs 相关服务(两台都需要)
  9. //启动 rpc 服务:
  10. # systemctl start rpcbind
  11. # systemctl enable rpcbind
  12. //启动 nfs 服务:
  13. # systemctl start nfs
  14. # systemctl enable nfs
  15. //查看 rpc 端口:
  16. [root@ftp ~]# netstat -lntp | grep rpc
  17. tcp 0 0 0.0.0.0:34875 0.0.0.0:*
  18. LISTEN 19141/rpc.statd
  19. tcp 0 0 0.0.0.0:20048 0.0.0.0:*
  20. LISTEN 19162/rpc.mountd
  21. tcp6 0 0 :::48860 :::*
  22. LISTEN 19141/rpc.statd
  23. tcp6 0 0 :::20048 :::*
  24. LISTEN 19162/rpc.mountd
  25. 查看端口映射情况:
  26. # rpcinfo -p localhost (注:这里 nfs 服务没启动,看不到 nfs 端口的映射情况)
  27. program vers proto port service
  28. 100000 4 tcp 111 portmapper
  29. 100000 3 tcp 111 portmapper
  30. 100000 2 tcp 111 portmapper
  31. 100000 4 udp 111 portmapper
  32. 100000 3 udp 111 portmapper
  33. 100000 2 udp 111 portmapper
  34. 100024 1 udp 57809 status
  35. 100024 1 tcp 59892 status
  36. 100005 1 udp 20048 mountd
  37. 100005 1 tcp 20048 mountd
  38. 100005 2 udp 20048 mountd
  39. 100005 2 tcp 20048 mountd
  40. 100005 3 udp 20048 mountd
  41. 100005 3 tcp 20048 mountd
  42. 100003 3 tcp 2049 nfs
  43. 100003 4 tcp 2049 nfs
  44. 100227 3 tcp 2049 nfs_acl
  45. 100003 3 udp 2049 nfs
  46. 100003 4 udp 2049 nfs
  47. 100227 3 udp 2049 nfs_acl
  48. 100021 1 udp 48151 nlockmgr
  49. 100021 3 udp 48151 nlockmgr
  50. 100021 4 udp 48151 nlockmgr
  51. 100021 1 tcp 49211 nlockmgr
  52. 100021 3 tcp 49211 nlockmgr
  53. 100021 4 tcp 49211 nlockmgr

创建共享目录(正是重点部分)

  1. 创建共享目录:
  2. [root@nfs ~]# mkdir /data
  3. 更改共享目录权限:
  4. [root@nfs ~]# chown -R nfsnobody.nfsnobody /data
  5. [root@nfs ~]# chmod 755 -R /data
  6. 添加一块磁盘将永久挂载在/data 目录上:

添加一块磁盘将永久挂载在/data 目录上:
1 添加新磁盘重启虚拟机
image.png

  1. //#查看新磁盘名字
  2. [root@nfs ~]# cat /proc/partitions
  3. major minor #blocks name
  4. 8 16 20971520 sdb
  5. 8 17 20970496 sdb1
  6. 8 0 41943040 sda
  7. 8 1 512000 sda1
  8. 8 2 41430016 sda2
  9. 11 0 4228096 sr0
  10. 253 0 39284736 dm-0
  11. 253 1 2097152 dm-1
  12. [root@nfs ~]#
  13. [root@nfs ~]# fdisk /dev/sdb
  14. //命令(输入 m 获取帮助):n
  15. Partition type:
  16. p primary (0 primary, 0 extended, 4 free)
  17. e extended
  18. Select (default p): p
  19. // 分区号 (1-4,默认 1):
  20. // 起始 扇区 (2048-41943039,默认为 2048):
  21. // 将使用默认值 2048
  22. // Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
  23. // 将使用默认值 41943039
  24. // 分区 1 已设置为 Linux 类型,大小设为 20 GiB
  25. // 命令(输入 m 获取帮助):w
  26. The partition table has been altered!
  27. Calling ioctl() to re-read partition table.
  28. 正在同步磁盘。
  29. 3 .格式化分区并永久挂载
  30. [root@nfs ~]# mkfs.ext4 /dev/sdb1

image.png

  1. //永久挂载
  2. [root@nfs ~]# vi /etc/fstab
  3. /dev/sdb1 /data ext4 defaults 0 0
  4. [root@nfs ~]# mount -a
  5. [root@nfs ~]# df -h #查看是否挂载成功
  6. 文件系统 容量 已用 可用 已用% 挂载点
  7. devtmpfs 898M 0 898M 0% /dev
  8. tmpfs 910M 0 910M 0% /dev/shm
  9. tmpfs 910M 9.6M 901M 2% /run
  10. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  11. /dev/mapper/centos-root 21G 1.3G 20G 7% /
  12. /dev/sda1 1014M 150M 865M 15% /boot
  13. tmpfs 182M 0 182M 0% /run/user/0
  14. /dev/sdb1 20G 45M 19G 1% /data
  15. //4 配置 nfs 共享目录
  16. [root@nfs ~]# vi /etc/exports
  17. /data 192.168.116.0/24(rw,no_root_squash,async) #分配
  18. no_root_squash 权限
  19. //5 生效配置与检验
  20. [root@nfs ~]# exportfs -rv
  21. exporting 192.168.116.0/24:/data
  22. [root@nfs ~]# showmount -e localhost
  23. Export list for localhost:
  24. /data 192.168.116.0/24
  25. [root@ftp ~]# showmount -e 192.168.116.131 #检测 nfs 共享目录创建成
  26. Export list for 192.168.116.131:
  27. /data 192.168.116.0/24
  28. 6.4 调试与检验成果
  29. 将/data 目录挂载到/home/vsftpd/xmcsxy/目录上
  30. [root@ftp ~]# mount -t nfs 192.168.116.131:/data /home/vsftpd/xmcsxy/
  31. [root@ftp ~]# df -h
  32. 文件系统 容量 已用 可用 已用% 挂载点
  33. devtmpfs 898M 0 898M 0% /dev
  34. tmpfs 910M 0 910M 0% /dev/shm
  35. tmpfs 910M 9.6M 901M 2% /run
  36. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  37. /dev/mapper/centos-root 30G 1.3G 29G 5% /
  38. /dev/sda1 1014M 149M 865M 15% /boot
  39. tmpfs 182M 0 182M 0% /run/user/0
  40. 192.168.100.12:/data 20G 44M 19G 1% /home/vsftpd/xmcsxy
  41. 创建对应 FTP 虚拟用户的家目录:
  42. [root@ftp ~]# cd /home/vsftpd/xmcsxy/
  43. [root@ftp xmcsxy]# mkdir yumwei
  44. [root@ftp xmcsxy]# mkdir yumwei2
  45. [root@ftp xmcsxy]# mkdir yumwei3
  46. [root@ftp xmcsxy]# mkdir yumwei4
  47. [root@ftp xmcsxy]# mkdir yumwei5
  48. [root@ftp xmcsxy]# mkdir yumwei6
  49. 测试虚拟用户登录:
  50. nfs 服务端安装 lftp(ftp 命令行客户端):

测试虚拟用户登录:

在nfs 服务端安装 lftp(ftp 命令行客户端)
image.png测试虚拟用户登录:
在 nfs 服务端安装 lftp(ftp 命令行客户端):

  1. [root@nfs ~]# lftp bai1@192.168.116.130
  2. 口令:
  3. lftp bai1@192.168.116.130:~> ls
  4. -rw-r--r-- 1 0 0 15056476 Dec 22 2021 php-5.6.39.tar.bz2
  5. lftp bai1@192.168.116.130:/> get php-5.6.39.tar.bz2

至此架构系统部署已经完成!

shell 备用数据脚本及定时计划

  1. [root@nfs ~]# vi /usr/local/sbin/backup.sh
  2. a=`date '+%Y%m%d'` #定义时间
  3. b=/backup/weekbackup #定义备份目录路径
  4. c=/var/log/backup.log #定义输出日志路径
  5. pname=$(rpm -qa | grep rsync) #定义 rsync 安装包检查
  6. #判断 rsync 是否存在
  7. if [ $? -eq 0 ]
  8. then
  9. echo "软件包 rsync 已经安装。"
  10. else
  11. echo "软件包 rsync 没有安装"
  12. yum -y install rsync >> /dev/null
  13. if [ $? -eq 0 ];then
  14. echo "安装 rsync 完成。"
  15. else
  16. echo "安装 rsync 失败。"
  17. fi
  18. fi
  19. #判断备份目录是否存在,并增量备份。
  20. if [ ! -d "$b" ];then
  21. mkdir -p $b
  22. echo "$a Backup File missing!" >> /var/log/backup.log
  23. rsync -rvz /data $b/$a
  24. else
  25. rsync -rvz /data $b/$a
  26. if [ -d $b/$a ];then
  27. echo "$a Backup success." >> /var/log/backup.log
  28. find $b -mtime +14 | xargs rm -rf
  29. else
  30. echo "$a Backup failed." >> /var/log/backup.log
  31. fi
  32. fi
  33. 测试脚本执行过程结果:
  34. [root@nfs ~]# sh -x /usr/local/sbin/backup.sh
  35. ++ date +%Y%m%d
  36. + a=20211222
  37. + b=/backup/weekbackup
  38. + c=/var/log/backup.log
  39. ++ rpm -qa
  40. ++ grep rsync
  41. + pname=
  42. + '[' 1 -eq 0 ']'
  43. + echo '软件包 rsync 没有安装'
  44. 软件包 rsync 没有安装
  45. + yum -y install rsync
  46. + '[' 0 -eq 0 ']'
  47. + echo '安装 rsync 完成。'
  48. 安装 rsync 完成。
  49. + '[' '!' -d /backup/weekbackup ']'
  50. + mkdir -p /backup/weekbackup
  51. + echo '20211222 Backup File missing!'
  52. + rsync -rvz /data /backup/weekbackup/20211222
  53. sending incremental file list
  54. created directory /backup/weekbackup/20211222
  55. data/
  56. data/lost+found/
  57. data/yumwei/
  58. data/yumwei/php-5.6.39.tar.bz2
  59. data/yumwei2/
  60. data/yumwei3/
  61. data/yumwei4/
  62. data/yumwei5/
  63. data/yumwei6/
  64. sent 15061796 bytes received 63 bytes 30123718.00 bytes/sec
  65. total size is 15056476 speedup is 1.00
  66. [root@nfs ~]# crontab -e
  67. no crontab for root - using an empty one
  68. crontab: installing new crontab
  69. [root@nfs ~]#
  70. [root@nfs ~]#
  71. [root@nfs ~]# crontab -e
  72. 0 21 */7 * * sh /usr/local/sbin/backup.sh #每 7 天晚上 21 点执行一次脚本

至此案例实操完成!