#Linux#搭建分布式高性能FastDFS文件服务器

花了一个礼拜终于艰难地自己部署好了一个Linux平台下的FastDFS结合Nginx的高可用分布式系统,写这推文总结以下踩过的坑

1,重装了VMware导致虚拟网卡安装失败,最后用过全网的方法后来洞察出是系统问题,最后重装系统解决;

2,前期在Linux系统中的RedHat的yum源需要付费,更换yum源复杂,最后决定使用阿里云ECS作为平台搭建;

3,使用configure命令配置Nginx时命令出错,导致编译失败!

4,tracker、storage、client、nginx的配置文件不清晰明确,使用公网ip和私有ip不明确,导致文件上传成功后无法通过web访问;

5,阿里云服务器安全组没有添加准许端口号。

部署环境:阿里云ECS-Linux_centOS7.6-64位

公有IP:39.111.111.111   

私有IP:172.111.111.111  

安全组规则开放端口和ip

准备文件:

直达链接: https://pan.baidu.com/s/1QTrO34p4gtUMm0_KTdv2jg

提取码: n5c3

前期准备工作完毕!开搞!

用root登陆到centos7

【1】先安装相关的依赖环境

注意!!!#不属于命令内容,文件的拷贝可以利用FileZilla工具

----------------------------------------------------------------------------------------------------------------------------------------------------------

1,gcc编译环境

2,libevent库

分别执行以下命令

#yum install gcc-c++

#yum -y install libevent

把相关文件放到/home/tar下

【2】搭建fastdfs依赖环境

把libfastcommonV1.0.7.tar.gz拷贝至/usr/local/下,依次执行以下代码

#cd /usr/local

#tar -zxvf libfastcommonV1.0.7.tar.gz

#cd libfastcommon-1.0.7

#./make.sh

#./make.sh install

---------------------------------------------------------------------------------------------------------

如果出现 permission denied!则先输入#chmod 777 *.sh 赋予文件权限

---------------------------------------------------------------------------------------------------------

libfastcommon安装好后他只会将库文件拷贝到lib64里面,但是fastdfs执行只会引用lib下的库文件,所以我们需要将/usr/lib64下的库文件手动拷贝至/usr/lib下,执行以下命令

 #cp /usr/lib64/libfastcommon.so /usr/lib/

【3】tracker和storage安装配置

将FastDFS_v5.05.tar.gz拷贝至/usr/local/下,依次执行命令:

#tar -zxvf FastDFS_v5.05.tar.gz

#cd FastDFS

#./make.sh

#./make.sh install

出现权限问题操作同【2】

(1)配置tracker服务:

进入/etc/fdfs目录,三个范例配置文件:client.conf.sample、storage.conf.sample、tracker.conf.sample

拷贝一份并去掉sample,不建议直接改sample,以免出错后没有备份配置文件;

到此步你的界面是这样的

#vim tracker.conf

修改:

# the base path to store data and log files (存放日志文件路径)

base_path=/home/yuqing/FastDFS   

改为:

base_path=/home/fastdfs

注意这个的端口,是后面nginx访问本地文件的端口

# HTTP port on this tracker server

http.server_port=8888

保存退出:

Esc→#:wq

---------------------------------------------------------------------------------------------------------------------------------

(2)配置storage服务:

#vim storage.conf

修改:

group_name=group1

改为group_name=eleba(自己取个名字,在访问的Url时包含在里面,一般取项目名称就好,例:eleba

 

base_path=/home/fastdfs    (存放日志文件的路径)

改为:base_path=/home/fastdfs

 

store_path0=/home/yuqing/FastDFS(存放文件的路径,后面需要到指定路径创建目录fastdfs0)

改为:store_path0=/home/fastdfs0

如果有多个挂载磁盘则定义多个store_path,如下

#store_path1=.....

#store_path2=......

 

修改:

tracker_server=39.111.111.111:22122  (填写公网IP)

####如果有多个则配置多个tracker####

 

同样注意最下面的端口,是后面nginx访问本地文件的端口

# HTTP port on this tracker server

http.server_port=8888

保存并退出

-----------------------------------------------------------------------------------------------------------------------------------

(3)配置client.conf

修改:

base_path=/home/fastdfs

 

修改:

tracker_server=本机ip:172.111.111.111 :22122(本机IP)

 

#HTTP settings

http.tracker_server_port=8888  (和12步骤同理不罗嗦)

-----------------------------------------------------------------------------------------------------------------------------------

(4)启动tracker和storage服务:

分别执行一下命令:

#/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

#/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

关闭系统防火墙:不然待会外网访问不到你的服务器的

#systemctl stop firewalld.service

启动成功后可以配置开机自动启动:

#vim /etc/rc.d/rc.loca

在打开的文件中添加:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

退出保存即可。
-----------------------------------------------------------------------------------------------------------------------------------

【4】整合nginx实现负载均衡和高可用

nginx可以在tracker和storage上都安装,在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker服务器可以不配置nginx,我这儿作学习使用,只有一个tracker,因此只配一下storage

将fastdfs-nginx-module_v1.16.tar.gz传至/usr/local/下,分别执行以下命令

#cd /usr/local

#tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

#cd fastdfs-nginx-module/src

修改config文件将/usr/local/路径改为/usr/(一共三个)

 

然后将/usr/local/FastDFS/conf下的http.conf和mime.types拷贝到/etc/fdfs/

#cp /usr/local/FastDFS/conf/http.conf /usr/local/FastDFS/conf/mime.types /etc/fdfs/

将/usr/local/fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下

#cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

 

 

并修改mod_fastdfs.conf的内容:#vim /etc/fdfs/mod_fastdfs.conf

base_path=/home/fastdfs

 

use_storage_id =false

 

tracker_server=39.111.111.111:22122  (公网IP)

#tracker_server=同上:22122(多个tracker配置多行)

 

group_name=eleba    (group名称,和之前自己取的一样)

 

url_have_group_name=true  (url中包含group名称)

 

store_path0=/home/fastdfs0 #指定文件存储路径

 

将/usr/lib64/下的libfdfsclient.so拷贝至/usr/lib下

直接执行以下命令

#cp /usr/lib64/libfdfsclient.so /usr/lib/

创建nginx/client目录

#mkdir -p /var/temp/nginx/client

 

【5】安装Nginx和添加fastdfs模块

安装nginx环境需要依赖gcc和几个开发包:依次执行下面命令进行安装
#yum install -y pcre pcre-devel

#yum install -y zlib zlib-devel


#yum install -y openssl openssl-devel

把nginx-1.8.0.tar.gz包放到/usr/local下

#tar zxf nginx-1.8.0.tar.gz

#cd nginx-1.8.0

使用configure命令创建makeFile文件(直接拷贝后按回车即可)

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \

--add-module=/usr/local/fastdfs-nginx-module/src

(注意蓝色部分,add module是添加fastdfs模块,路径写成你的fastdfs-nginx-module源码路径即可)

再依次执行以下命令:

#make

#make install

然后进入nginx安装文件夹

#cd /usr/local/nginx/conf

修改nginx.conf

#vim nginx.conf

在server块中添加监听端口,他默认监听端口为80

listen 8888; (这里跟之前storage配置的一样)
location /group1/M00 {
root /usr/fastdfs0/data;
(跟storage配置的路径一样) 
ngx_fastdfs_module;
}

最后如图,本地ip为本机的ip即:172.111.111.111  

在最顶部添加user root;

保存并退出。

启动nginx:进入nginx/sbin/目录

(是sbin目录,不是当前的conf目录返回上一级再进入,当时我就是在这里傻傻执行不了)

执行

#./nginx

如果出现缺少##/var/run/nginx/nginx.pid文件##错误的话(我当时就出现了),依次去用命令#mkdir创建目录,最后的nginx.pid文件是通过#touch nginx.pid命令创建的。

到此你在你的浏览器访问39.111.111.111:8888或者直接访问39.111.111.111会出现这个页面,说明nginx安装成功了!!!

【6】测试

上传文件:

使用格式:
/usr/bin/fdfs_test 客户端配置文件地址 upload 上传文件

比如将/home下的test.jpg图片上传到FastDFS中:
#/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.jpg

我们在filezilla上看下文件是否上传了到该路径

http://39.111.111.111:8888/eleba/M00/00/00/rBJd4lyHPIGAWBD1AAF3vzgtgRw216_big.jpg就是文件的下载路径。

对应storage服务器上的
/home/fastdfs0/data/00/00/rBJd4lyHPIGAWBD1AAF3vzgtgRw216_big.jpg文件。

fastDFS默认会保存两张图,一张为大图,一张为缩略图,上传完毕后回调方法会返回两个M00/**/**/文件名的字符串,在java后台可以自己拼接出访问的Url

我们访问一下Url看能不能看到图

漂亮的犊子成功出来了,当时刚好在测试上传她刚好给我发的,就顺手给用来测试了嘻嘻嘻~~


当然如果你访问我上面那个Url肯定不能出来这个图,因为博文里面的公网IP是随便起的方便大家区分而已

注意点:

1,配置*.conf的时候,一定不能把公网IP和本机IP搞混,不然很可能会启动不了storage服务,或者访问不了图片;

2,全局的http.server.porn都要保持一致,我取的是8888

3,如果访问公网ip不能出现nginx页面,请关闭linux的防火墙,阿里云安全组放行指定端口;

4,访问公网ip可以看到nginx页面,文件也可以上传成功,但是通过Url访问图片出现404,要么权限不足,检查是否在

nginx.conf头部添加了user root;再者检查 nginx.conf 配置server中的location是否正确,防火墙是否关闭等。

【7】总结收获

本着学习的心态,为了这次的课程设计更完善,我决定搭建一个分布式文件系统, 配置这个文件系统花了将近一个礼拜,一个礼拜都没睡午觉了,查阅各种资料,有时一呆就是五六个小时,能踩的坑都被我踩了,百度相关踩坑帖子都被我看过,发现原来google在查阅资料方面真的比百度强,网上很多教程都是基于本地的虚拟机,所以公网和本机ip的配置最为复杂,一次一次的控制变量尝试终于让我悟出了最总结果,最后苦苦挣扎在404里面,查阅了全网的办法,后来用着我四级都没过的英语水平,看着全英的配置注释,终于找到错误的地方,原来是nginx.conf里面的文件路径错了,全局http.server.porn没有保持一致,最后成功收获了知识。我真棒!感谢这段时间给与鼓励的人儿!爱你们~

 

参考文章:https://blog.csdn.net/playadota/article/details/78381109

感谢慕课网的风间影月老师的教学视频

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值