NFS+自动分发系统

需求1:

共享静态文件,比如discuz需要共享的目录是 data/attachment,dedecms需要共享upload(具体目录,你可以先上传一个图片,查看图片所在目录)

实现方案:

这一步我们选择使用nfs来共享这三个站点的静态文件,其中拿出来一台服务器单独做nfs服务端,然后6台web服务器做客户端。

  • 假设这七台机器IP分布如下:

web1

192.168.100.1

web2

192.168.100.2

web3

192.168.100.3

web4

192.168.100.4

web5

192.168.100.5

web6

192.168.100.6

NFS服务器

192.168.100.10

  • 需要共享的目录:

discuz需要共享的目录:/data/wwwroot/discuz.com/data/attachment/

dedecms需要共享的目录:/data/wwwroot/dedecms.com/uploads/

zrlog需要共享的目录:/data/wwwroot/zrlog.com/attached/

步骤:

1.在服务端安装nfs-utils和rpcbind包,安装命令:

yum install -y nfs-utils rpcbind

2.在6台客户端上安装nfs-utils包并且启动rpcbind服务,安装命令:

yum install -y nfs-utils
ststemctl start rpcbind
systemctl enable rpcbind  //设置开机启动

3.在服务端创建好三个共享目录并且修改权限为777

mkdir -p /data/wwwroot/discuz.com/data/attachment/    //创建discuz的共享目录
chmod 777 /data/wwwroot/discuz.com/data/attachment/
mkdir -p /data/wwwroot/dedecms.com/uploads/           //创建dedecms的共享目录
chmod 777 /data/wwwroot/dedecms.com/uploads/
mkdir -p /data/wwwroot/zrlog.com/attached/            //创建zrlog的共享目录
chmod 777 /data/wwwroot/zrlog.com/attached/ 

4.在服务端的/etc/exports文件中写入配置,内容如下:

[root@locahost ~]# vim /etc/exports

/data/wwwroot/discuz.com/data/attachment/ 192.168.100.0/24(rw,sync,no_root_squash)
/data/wwwroot/dedecms.com/uploads/ 192.168.100.0/24(rw,sync,no_root_squash)
/data/wwwroot/zrlog.com/attached/ 192.168.100.0/24(rw,sync,no_root_squash)

5.开启rpcbind和nfs服务,关闭防火墙,并设开机启动

[root@localhost ~]# systemctl start rpcbind

[root@localhost ~]# systemctl start nfs

[root@localhost ~]#systemctl enable rpcbind
[root@localhost ~]#systemctl enable nfs
[root@localhost ~]#systemctl stop firewalld

配置客户端:

1.查看一下服务端共享的哪些目录:

[root@localhost ~]$ showmount -e 192.168.100.7
Export list for 192.168.100.7:
/data/wwwroot/zrlog.com/attached         192.168.100.0/24
/data/wwwroot/dedecms.com/uploads        192.168.100.0/24
/data/wwwroot/discuz.com/data/attachment 192.168.100.0/24

可以看到客户端已经能正常获取到服务端共享的三个站点的静态文件目录了。

2.挂载共享目录:

[root@localhost ~]$ mount -t nfs 192.168.100.7:/data/wwwroot/zrlog.com/attached /data/wwwroot/zrlog.com/attached
[root@localhost ~]$ mount -t nfs 192.168.100.7:/data/wwwroot/dedecms.com/uploads /data/wwwroot/dedecms.com/uploads
[root@localhost ~]$ mount -t nfs 192.168.100.7:/data/wwwroot/discuz.com/data/attachment /data/wwwroot/discuz.com/data/attachment

## 然后在客户端的挂载目录下创建个文件看看是否同步到服务器上,服务端也需要创建一个文件看看是否能够同步到客户端上:
[root@localhost ~]$ touch /data/wwwroot/zrlog.com/attached/test153.txt
[root@localhost ~]$ touch /data/wwwroot/dedecms.com/uploads/test153.txt
[root@localhost ~]$ touch /data/wwwroot/discuz.com/data/attachment/test153.txt

## 服务端上查看:
[root@localhost ~]$ ls /data/wwwroot/zrlog.com/attached/test153.txt
/data/wwwroot/zrlog.com/attached/test153.txt
[root@localhost ~]$ ls /data/wwwroot/dedecms.com/uploads/test153.txt
/data/wwwroot/dedecms.com/uploads/test153.txt
[root@localhost ~]$ ls /data/wwwroot/discuz.com/data/attachment/test153.txt
/data/wwwroot/discuz.com/data/attachment/test153.txt
[root@localhost ~]$
## 同样的服务端也需要创建测试文件,然后到客户端上查看

确定第一台客户端可以正常共享目录后,再去另外五台客户端上也把这三个目录挂载一下。操作和第一台一致。

至此,web静态文件的目录就共享完成了,所有用户的静态文件都将写入到我们这台nfs服务器的三个共享目录中。

 

需求二:

 用shell脚本实现文件、代码同步上线(参考分发系统)

1.使用脚本编写一个简单的文件分发系统即可。

  • 首先用expect编写一个脚本文件rsync.expect,这个脚本是通过rsync实现文件同步的脚本,内容如下:
[root@localhost sbin]# vim rsync.expect                 //写入下面内容
#! /usr/bin/expect
set passwd "123456"                     //这里假设我们的web服务器的密码全部统一为123456
set host [lindex $argv 0]               //这里指的是我们web服务器的ip 
set file [lindex $argv 1]               //指的是list.txt ,表示我们需要分发的那些文件的列表而不仅仅是一个文件
spawn rsync -avR --files-from=$file / root@$host:/   //核心命令,其中-R选项是表示如果对端机器上没有我们需要同步的文件的路径的话就会自动创建这个路径
expect {
"yes/no" { send "yes\r" }
"password:" { send "$passwd\r" }
}
export eof
  • 然后编辑file.list,写入我们需要同步的所有文件的绝对路径:
[root@localhost sbin]# vim /tmp/file.list               //假设我们要同步的文件列表是下面的这些
/usr/local/nginx/conf/vhost/dedecms.com.conf 
/usr/local/nginx/conf/vhost/discuz.com.conf 
/usr/local/nginx/conf/vhost/zrlog.com.conf 
/usr/local/sbin/nginx_log_rotate.sh 
/var/spool/cron/root
  • 然后接着编辑ip.list,写入6台web服务器的ip地址:
[root@localhost sbin]# vim /tmp/ip.list                  //写入web服务器的ip
192.168.100.1
192.168.100.2
192.168.100.3
192.168.100.4
192.168.100.5
192.168.100.6
  • 再编写一个shell脚本rsync.sh,这个脚本就是遍历出ip.list文件内容然后交给rsync.expect脚本去执行:
[root@localhost sbin]# vim rsync.sh                     //写入下面内容
#! /bin/bash
for ip in `cat /tmp/ip.list`
do
        ./rsync.expect $ip /tmp/file.list
done
  • .最后我们只需要执行rsync.sh脚本即可实现批量同步多个文件:
[root@localhost sbin]# chmod a+x rsync.expect
[root@localhost sbin]# sh rsync.sh 

后续如果还需要上线别的代码文件,只需要修改/tmp/file.list 这个文件把新的代码文件路径加上去即可。

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值