将web服务用户上传的目录挂载到NFS服务器
为什么要做?方便以后多台服务器访问一样的内容等等
实践
1)统一NFS和web用户,关键是UID
[root@web02~]#id nginx
uid=1111(nginx)gid=1111(nginx)组=1111(nginx)
[rootenfs01~]#grep 111/etc/passwd
[root@nfs01~]#useradd nginx -u 1111 -s /sbin/nologin -M
[root@nfs01 ~]#grep 1111 /etc/passwd
nginx:x:1111:1111::/home/nginx:/sbin/nologin
强调:所有的WEB和NES都要统一一个UID的用户,名称可以不一样,但是UID要一样
[root@nfs01 ~]#cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
2)/etc/exports配置
[root@nfs01 ~]#vim /etc/exports
#CCTV shared dir at time
#/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro) #/16也行,工作中可以多个网段
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=11111) #任何用户访问nfs共享目录,都会以1111的访问(默认的也行)
3)创建挂载目录
[root@nfs01 ~]#cd /data
[root@nfs01 ~]#mkdir -p /data/blog_nfs
[root@web02 ~]# umount /mnt #我这里之前挂载过,所以卸载
4)注意事项
如我的wordpress博客图片网址
http://blog.etiantian.org/wp-content/uploads/2020/09/005BYqpggy1fwre4ud9oqj31hc0u0tkz-300x169.jpg
路径:/wp-content/uploads
[root@web02 /application/nginx/html/blog/wp-content/uploads]#pwd
#以以下路径作为挂载点比较合适
/application/nginx/html/blog/wp-content/uploads
mount -t nfs 172.16.1.31:/data/blog_nfs /application/nginx/html/blog/wp-content/uploads
#不能直接挂载直接挂载web02的/applicstipn/nginx/html/blog/wp-content/uploads目录下的文件就没了
#卸载umount /application/nginx/html/blog/wp-content/uploads
解决方法:scp复制,推送
[root@web02 /application/nginx/html/blog/wp-content/uploads]#scp 2020 172.16.1.31:/data/blog_nfs/
#输入yes与用户密码
2020: not a regular file #出错原因,此文件是一个目录
[root@web02 /application/nginx/html/blog/wp-content/uploads]#scp -rp 2020 172.16.1.31:/data/blog_nfs/
#-p保留文件的最后修改时间,最后访问时间和权限模式;-q不显示复制进度;-r以递归方式复制
root@172.16.1.31's password:
7.png 100% 374KB 。。。。
5)检查
[root@nfs01 /data/blog_nfs]#ls
2020
[root@nfs01 /data/blog_nfs/2020]#ll
drwxr-xr-x 2 root root 4096 9月 29 18:08 09
drwxr-xr-x 2 root root 6 10月 2 21:02 10
6)授权
#root模式,nginx用户处理不了,需要授权,给/data目录授权
[root@nfs01 ~]#chown -R nginx.nginx /data
[root@nfs01 ~]#ll /data
总用量 12
drwxr-xr-x 3 nginx nginx 18 10月 2 21:12 blog_nfs
drwxr-xr-x 2 nginx nginx 6 9月 6 18:34 Client
。。。。
7)mv备份
[root@web02 /application/nginx/html/blog/wp-content/uploads]#ls
2020
[root@web02 /application/nginx/html/blog/wp-content/uploads]#mv 2020 /opt
[root@web02 /application/nginx/html/blog/wp-content/uploads]#ls #什么也没有
8)挂载
[root@web02 ~]#mount -t nfs 172.16.1.31:/data/blog_nfs /application/nginx/html/blog/wp-content/uploads
[root@web02 ~]#df -h
文件系统 容量 已用 可用 已用% 挂载点
172.16.1.31:/data/blog_nfs 19G 2.2G 17G 12% /application/nginx-1.18.0/html/blog/wp-content/uploads
9)查看挂载目录下的内容
[root@web02 ~]#cd /application/nginx-1.18.0/html/blog/wp-content/uploads
[root@web02 /application/nginx-1.18.0/html/blog/wp-content/uploads]#ls
2020
#这里没有东西就是博客wordpress没有写东西,刷新一下或者写个博客发布就有内容了
[root@web02 /application/nginx/html/blog/wp-content/uploads]#tree
.
└── 2020
├── 09
│ ├── 005BYqpggy1fwre4ud9oqj31hc0u0tkz-1024x576.jpg
│ ├── 005BYqpggy1fwre4ud9oqj31hc0u0tkz-150x150.jpg
│ ├── 7-768x461.png
│ └── 7.png
└── 10
3 directories, 15 files
[root@web02 /application/nginx/html/blog/wp-content/uploads]#
测试NFS挂载OK
扩展:systemctl reload nfs #平滑重启
挂载点卸载之前
可以看见wordpress博客的图片,可看图片链接
挂载点卸载之后:(记得清除浏览器历史缓存)
[root@web02 ~]#umount /application/nginx/html/blog/wp-content/uploads
卸载挂载点
清除浏览器浏览数据就看不到照片了
我们写博客,我们上传、修改、删除图片对于服务器来说都是上传新的图片。
扩展:为了以后数据迁移方便,我们的备份服务器使用域名访问比较合理化。
这里我们的备份服务器域名为db01.etiantian.org
,这样我们就不需要开发人员操作了,直接修改hosts文件即可。即服务器之间的访问用域名访问,以后数据迁移比较合理。
[root@web01 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
2.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db0l.etiantian.org
172.16.1.61 m01
10.0.0.7 www.etiantian.org bbs.etiantian.org blog.etiantian.org etiantian.org
应用:
[root@web01 /application/nginx/html/blog]#vim wp-config.php
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'root' );
/** MySQL database password */
define( 'DB_PASSWORD', 'oldboy123' );
/** MySQL hostname */
define( 'DB_HOST', 'db0l.etiantian.org' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );