花了一个礼拜终于艰难地自己部署好了一个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
感谢慕课网的风间影月老师的教学视频