zoukankan      html  css  js  c++  java
  • NFS介绍,及运用rsync、nginx、inotify案例

    一 NFS服务

    基本概述
    NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
    NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
    
    为什么使用NFS
    1.实现多台服务器之间数据共享
    2.实现多台服务器之间数据一致
    

    二 NFS 应用

    nfs原理
    1.用户访问NFS客户端,将请求转化为函数
    2.NFS通过TCP/IP连接服务端
    3.NFS服务端接收请求,会先调用portmap进程进行端口映射
    4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
    5.Rpc.mount进程用于判断客户端对服务端的操作权限
    6.如果通过权限验证,可以对服务端进行操作,修改或读取
    
    NFS配置详解
    [root@nfs ~]# cat /etc/exports
    /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    
    rw 读写权限
    ro 只读权限
    all_squash 当NFS客户端以任意⽤户访问时,修改权限为NFS服务器的匿名⽤户(常⽤)
    anonuid 配合all_squash,指定匿名⽤户的uid,⽤户为系统⽤户,必须存在
    anongid 配合all_squash,指定匿名⽤户的gid
    sync 同时将数据写⼊内存和磁盘(保证数据不丢失)
    
    async 优先将数据写⼊内存,再写⼊硬盘;效率⾼,但是会丢失数据
    root_squash 当NFS客户端以root访问时,修改权限为NFS服务器的匿名⽤户(不常⽤)
    no_root_squash 当NFS客户端以root访问时,修改权限为NFS服务器的root⽤户(⼏乎不⽤)
    no_all_squash 当NFS客户端以任意⽤户访问时,不修改权限(不常⽤)
    
    NFS存储优点
    1.NFS⽂件系统简单易⽤、⽅便部署、数据可靠、服务稳定、满⾜中⼩企业需求。
    2.NFS⽂件系统内存放的数据都在⽂件系统之上,所有数据都是能看得⻅。
    
    NFS局限性
    1.存在单点故障, 如果构建⾼可⽤维护麻烦web->nfs()->backup
    2.NFS数据明⽂, 并不对数据做任何校验。
    3.客户端挂载NFS服务没有密码验证, 安全性⼀般(内⽹使⽤)
    
    NFS应⽤建议
    1.⽣产场景应将静态数据尽可能往前端推, 减少后端存储压⼒
    2.必须将存储⾥的静态资源通过CDN缓存jpgpngmp4avicssjs
    3.如果没有缓存或架构本身历史遗留问题太⼤, 在多存储也⽆⽤
    

    三 下载Nginx

    # 准备两台机器
    web1  192.168.15.7
    web2  192.168.15.8
    
    # 两台机器分别添加nginx.repo : http://nginx.org/en/linux_packages.html#RHEL-CentOS
    
    [root@web1 ~]# vim /etc/yum.repos.d/nginx.repo 
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [root@web1 ~]# yum clean all
    [root@web1 ~]# yum makecache
    [root@web1 ~]# yum install nginx -y
    [root@web1 ~]# systemctl start nginx
    

    四 NFS实际体验

    案例需求:

    web服务器访问的页面能够实时的备份到backup服务器

    web服务器的数据是要共享

    web01和web02 ----> nginx /usr/share/nginx/html

    nfs ----> 配置一个挂载点,建立一个监控

    backup ----> 备份仓库

    1、环境准备

    2、backup服务器搭建rsync服务端
    ## 0.关闭selinux与firewalld防火墙
    [root@backup ~] systemctl stop firewalld
    [root@backup ~] setenforce 0
    [root@backup ~] sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    
    ## 1、安装并配置rsync守护进程模式
    [root@backup ~] yum install -y rsync
    [root@backup ~] vim /etc/rsyncd.conf
    uid = www
    gid = www
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 200
    ignore errors
    read only = false
    list = true
    auth users = dandan
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    comment = "该备份文件是web端挂载到nfs服务器的文件"
    path = /backup
    
    ## 2、创建用户
    [root@backup ~] groupadd www -g 666
    [root@backup ~] useradd www -u 666 -g 666
    
    ## 3、创建密码文件并授权
    [root@backup ~] echo "dandan:111" > /etc/rsync.passwd
    [root@backup ~] chmod 600 /etc/rsync.passwd #授权
    
    ## 4、创建真实目录并授权
    [root@backup ~] mkdir /backup
    [root@backup ~] chown -R www.www /backup
    
    ## 5、启动服务
    [root@pbackup ~] systemctl start rsyncd
    [root@backup ~] ps -ef |grep rsyncd #验证启动
    root 25733 1 00:00:00 /usr/bin/rsync --daemon --nodetach
    
    3、NFS服务器搭建(NFS作为backup的服务端)
    ## 0.关闭selinux与firewalld防火墙
    [root@nfs ~] systemctl stop firewalld
    [root@nfs ~] setenforce 0
    [root@nfs ~] sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    
    ## 1安装NFS、rpcbind服务
    [root@nfs ~] yum install -y nfs-utils rpcbind
    
    ### 2、配置NFS
    [root@nfs ~] vim /etc/exports
    /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    
    ## 3、创建用户
    [root@nfs ~] groupadd www -g 666
    [root@nfs ~] useradd www -u 666 -g 666
    
    ## 4、创建目录并授权
    [root@nfs ~] mkdir /data
    [root@nfs ~] chown -R www.www /data
    
    ## 5、启动服务、验证配置
    [root@nfs ~] systemctl start nfs rpbind  # rpcind Cenots默认已经启动且安装过
    [root@nfs ~] cat /var/lib/nfs/etab
    /data
    172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_su
    btree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,r
    oot_squash,all_squash)
    
    4、NFS服务器实时备份data目录到rsync
    ### 1、安装inotify-tools
    [root@ nfs ~] yum install -y inotify-tools
    
    ## 2、编写、启动脚本
    [root@nfs ~] vim rsyn-inotify.sh
    #!/bin/bash
    export RSYNC_PASSWORD=111
    dir=/data
    /usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
    cd $dir && rsync -az -R --delete . dandan@172.16.1.41::backup
    >/dev/null 2>&1
    done &
    
    ## 3.启动服务、验证配置
    [root@nfs ~] sh rsyn-inotify.sh
    [root@nfs ~] ps -ef |grep rsyn
    root 9224 1 0 15:30 pts/0 00:00:00 sh rsyn-inotify.sh
    
    5、web 01和 web 02搭建上传案例代码 具体步骤 (2台服务器操作一样)
    ## 0.关闭防火墙与selinux  
    [root@web01 ~]# systemctl stop firewalld
    [root@web01 ~]# setenforce 0
    [root@web01 ~]#  sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    
    ## 1.编写nginxg官方源,并下载安装软件
    [root@web01 ~]# vim /etc/yum.repos.d/nginx.repo 
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    ## 2.清空缓存与生成缓存
    [root@web01 ~]# yum clean all
    [root@web01 ~]# yum makecache
    
    ## 3.下载nginx软件
    [root@web1 ~]# yum install -y nginx 
    
    ## 4.配置网站代码
    [root@web01 ~]# rz  #上传案例压缩包   
    [root@web01 ~]# unzip anli.zip -d /usr/share/nginx/html/   # 解压到nginx目录
    [root@web01 ~]# ll
    total 80
    -rw-r--r--. 1 root root 38772 Apr 27 2018 bg.jpg
    -rw-r--r--. 1 root root 2633 May 4 2018 index.html
    -rw-r--r--. 1 root root 52 May 10 2018 info.php
    -rw-r--r--. 1 root root 26995 Nov 22 16:47 anli.zip
    -rw-r--r--. 1 root root 1192 Jan 10 2020 upload_file.php
    
    ## 4. 创建用户
    [root@web01 ~]# groupadd www -g 666
    [root@web01 ~]# useradd www -u 666 -g 666
    
    ## 5. 修改站点目录权限
    [root@web01 html]# chown -R www.www /usr/share/nginx/html/ 
    
    ## 6.启动服务、验证配置
    [root@web01 ~] # systemctl start nginx
    [root@web01 ~] # ps -ef | grep nginx
    
    ## 7、安装rpcbind、nfs并查看挂载点
    [root@web01 ~]# yum install -y nfs-utils rpcbind
    [root@web01 ~]# showmount -e 172.16.1.31
    Export list for 172.16.1.31:
    /data 172.16.1.0/24
    
    ## 8、挂载并验证
    [root@web01 ~]# mount -t nfs 172.16.1.31:/data /usr/share/nginx/html
    
    [root@web01 ~]# df -h #验证挂载
     172.16.1.31:/data   /usr/share/nginx/html
    
    7、访问并测试
    # 1.直接进IE浏览器输入IP页面
    192.168.15.7
    192.168.15.8
    # 2、上传案例测试,页面成功
    
  • 相关阅读:
    spring mvc 返回json
    spring mvc 解决后台传递值乱码问题
    sring mvc 返回值至jsp界面的几种方式
    spring mvc 注解访问控制器以及接收form数据的方式,包括直接接收日期类型及对象的方法
    spring mvc 通过配置xml访问控制器的三种方式
    spring mvc 入门配置
    HBase 学习笔记
    Centos搭建Linux测试环境,几个基本的设置项
    kafka 集群安装与安装测试
    Kafka 分布式消息队列介绍
  • 原文地址:https://www.cnblogs.com/caodan01/p/14688459.html
Copyright © 2011-2022 走看看