搭建分布式FastDFS集群

  • Post author:
  • Post category:其他




搭建分布式FastDFS集群



1 环境

系统环境:ubantu18.04

FastDFS版本:5.11

Nginx版本:1.15.4

跟踪服务器(Tracker Server):Ip1(bc1-PC)

存储服务器(Storage Server):Ip1(bc1-PC);Ip2 (bc0-PC)

用户:root



2 安装FastDFS软件

建议在/home/user目录下新建soft文件夹,用于安装我们所需要的各种软件。本文安装包均是在/home/chenkeyu/soft目录下。



a. 安装FastDFS所需的依赖包

1)	apt install make cmake gcc gcc
2)	wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz

解压并安装

$ tar -zxvf V1.0.39.tar.gz
$ cd libfastcommon-1.0.39
$ ./make.sh
$ ./make.sh install
 

在这里插入图片描述



b. 下载安装FastDFS

安装并解压

wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
$ tar -zxvf V5.11.tar.gz
$ cd fastdfs-5.11
$ ./make.sh
$ ./make.sh install

在这里插入图片描述

执行完以上操作后,可以看到如下的文件

在这里插入图片描述

在这里插入图片描述



3 配置FastDFS跟踪器(Tracker)

进入/etc/fdfs,复制FastDFS跟踪器样例配置文件tracker.conf.sample,并重命名为 tracker.conf。

$ cd /etc/fdfs
$ cp tracker.conf.sample tracker.conf
$ vi tracker.conf

打开tracker.conf文件,只需要找到这两个参数并修改就可以了。

base_path=/home/chenkeyu/fastdfs/tracker 
HTTP port on this tracker server http.server_port=80

创建相应的文件夹

$ mkdir –p /home/chenkeyu/fastdfs/tracker

这时候我们就可以使用/etc/init.d/fdfs_trackerd start来启动 Tracker服务了,初次成功启动,会在 /home/chenkeyu/fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。你也可以启动服务看一下端口是否在监听,命令:

启动服务:/etc/init.d/fdfs_trackerd start
查看监听:netstat -unltp|grep fdfs

在这里插入图片描述

看到22122端口正常被监听后,这时候就算 Tracker服务安装成功啦!



4 配置FastDFS的Storage服务

进入/etc/fdfs的目录操作,把其中的storage.conf.sample文件改为storage.conf配置文件并修改它。命令:

$ cp storage.conf.sample storage.conf 
$ vim storage.conf

编辑storage.conf 标记的需要修改,其它的默认即可。

base_path= /home/chenkeyu/fastdfs/storage  #--需要修改,默认也可—
store_path0= /home/chenkeyu/fastdfs/file  #-需要修改,默认也可—
tracker_server= Ip1:22122  #--需要修改—
http.server_port=80  --可以不用修改,但必须保证此端口未被占用。

创建相应的文件夹

$ mkdir -p /home/chenkeyu/fastdfs/storage
$ mkdir -p /home/chenkeyu/fastdfs/file

使用命令/etc/init.d/fdfs_storaged start查看Storage是否成功启动,23000 端口正在被监听,就表示Storage 启动成功。

$ /etc/init.d/fdfs_storaged start
$ netstat -unltp|grep fdfs

在这里插入图片描述

在x2主机上重复以上过程(除去tracker的配置),并启动storage服务。

在这里插入图片描述

然后就可以在任意一台storage主机上执行以下命令,就可以查看Storage和Tracker是否在通信:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

在这里插入图片描述

看到上图所示的ACTIVE,表示通信成功。同时可以看到tracker_server的ip地址,以及两台storage的ip地址。



5 文件上传测试



a. 修改Tracker服务器中的客户端配置文件。

$ cd /etc/fdfs

$ cp client.conf.sample client.conf

$ vi client.conf

修改如下配置即可,其它默认。

base_path= /home/chenkeyu/fastdfs/client

tracker_server= Ip1:22122 #主机ip

创建相应的文件夹

$ mkdir –p /home/chenkeyu/fastdfs/client



b. 准备一张图片test.jpg,执行如下命令上传 test.jpg 图片

$ /usr/bin/fdfs_upload_file /etc/fdfs/client.conf  /home/chenkeyu/test.jpg

上传成功后返回文件ID号:

group1/M00/00/00/rBAPQVzeaJKAbbONAA6HjzTAop8119.png

在这里插入图片描述

其中group1表示这张图片被保存在了哪个组当中,M00代表磁盘目录,如果电脑只有一个磁盘那就只有M00, 如果有多个磁盘,那就M01、M02…等等。00/00代表磁盘上的两级目录,每级目录下是从00到FF共256个文件夹,两级就是256*256个。返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。 此时可以进入storage主机查看由tracker主机上传的图片,并保存到了相应的文件下。

$ cd  /home/chenkeyu/fastdfs/file/data/00/00

在这里插入图片描述

在这里插入图片描述

可以看到图片已经被保存到两台storage主机中。



6 在所有Storage节点安装fastdfs-nginx-module

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假如Tracker服务器将文件上传到Ip2,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储 Ip1,在文件还没有复制完成的情况下,客户端如果用这个文件Ip1上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

注:为了避免系统不必要的报错,此时的fastdfs-nginx-module建议安装在/usr/local/src目录下。

$ wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
$ tar –zxvf  V1.20.tar.gz

复制 fastdfs-nginx-module源码中的配置文件到/etc/fdfs 目录, 并修改

$ cd /usr/local/src/fastdfs-nginx-module-1.20/src
$ cp mod_fastdfs.conf /etc/fdfs
$ cd /etc/fdfs
$ vim mod_fastdfs.conf
tracker_server=Ip1:22122 #tracker服务IP和端口
url_have_group_name=true #访问链接前缀加上组名
store_path0=/home/chenkeyu/fastdfs/file  #文件存储路径



7 安装Nginx



a. 安装nginx所需环境

$ apt-get install build-essential
$ apt-get install libtool
$ apt-get install libpcre3 libpcre3-dev
$ apt-get install zlib1g-dev
$ apt-get install openssl



b. 下载安装nginx

$ wget http://nginx.org/download/nginx-1.15.4.tar.gz
$ tar -zxvf nginx-1.15.4.tar.gz 
$ cd nginx-1.15.4
$ ./configure --add-module=/usr/local/src/fastdfs-nginx-module-1.20/src/

(此处为之前下载的fastdfs-nginx-module-1.20/src所对应的目录)看到如下界面即表示添加成功,且编译完成。

在这里插入图片描述

$ make && make install
$ /usr/local/nginx/sbin/nginx    #启动



c. 其他nginx常用命令

$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx.conf
$ /usr/local/nginx/sbin/nginx -t #检测配置文件是否正确 
$ /usr/local/nginx/sbin/nginx -s stop #停止 
$ /usr/local/nginx/sbin/nginx -s reload #重载配置文件



8 FastDFS Storage配置nginx访问(Storage机器配置)

复制FastDFS的部分配置文件到/etc/fdfs目录,命令:

$ cd /home/chenkeyu/soft/fastdfs-5.11/conf
$ cp http.conf mime.types /etc/fdfs
$ cd /usr/local/nginx
$ vim nginx.conf

配置nginx.conf文件

listen 80;

location /group1/M00 {


root /home/chenkeyu/fastdfs/file/data;

ngx_fastdfs_module;

}



9 FastDFS Tracker配置nginx访问(Tracker机器配置)

$ vim /usr/local/nginx/conf/nginx.conf

此处若找不到nginx.conf文件,可以使用命名whereis nginx.conf查看。然后再相应的地方加入以下内容:

#gzip on;

upstream fdfs_group1 {


server Ip1:80 weight=1 max_fails=2 fail_timeout=30s;

}

listen 80;



设置 group 的负载均衡参数

location /group1/M00 {


proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://fdfs_group1;

expires 30d;

}

此时的location内容放在同一个location下即可,即189主机即作为tracker又作为storage。



10 上传文件测试

在浏览器访问之前上传的图片、成功。

Tracker:

http://Ip1/ group1/M00/00/00/rBAPQVzeaJKAbbONAA6HjzTAop8119.png

Storage:

http://Ip2/ group1/M00/00/00/rBAPQVzeaJKAbbONAA6HjzTAop8119.png

可看到我们之前的测试图片test.png



11 可能遇到的问题



a. 执行./nginx出现如图所示报错

在这里插入图片描述

端口地址已被使用。很大的可能nginx服务进程卡死了,导致80端口被占用。首先用lsof -i :80查看80端口被什么程序占用,返回结果如下。

在这里插入图片描述

方法一:现是nginx进程占用了80端口,所以我们把nginx进程kill掉,重新启动服务即可。

方法二:重新加载nginx进程。命令:/usr/local/nginx/sbin/nginx –s reload



b. Nginx 500错误(Internal Server Error 内部服务器错误)

在这里插入图片描述

原因可能如下:

1)是否磁盘空间不足?

使用 df -k 查看硬盘空间是否满了。清理硬盘空间就可以解决500错误。nginx如果开启了access log,在不需要的情况下,最好关闭access log, access log会占用大量硬盘空间。

2) nginx配置文件错误?

这里不是指语法错误,nginx如果配置文件有语法错误,启动的时候就会提示。当配置rewrite的时候,有些规则处理不当会出现500错误,请仔细检查自己的rewrite规则。如果配置文件里有些变量设置不当,也会出现500错误,比如引用了一个没有值的变量。

3) 如果上面的问题都不存在可能是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数。

4) 还有就是Linux索引节点(inode)用满导致故障的,df -i由索引节点(inode)爆满引发500问题http://www.cnblogs.com/hiit/p/8582942.html

inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。 而服务器的Block虽然还有剩余,但inode已经用满,因此在创建新目录或文件时,系统提示磁盘空间不足。

注:如果以上情况都不是,请在重头检查nignx的各项参数的配置。在保证所配置都正确的情况下,很有可能是nginx中的proxy占用。打开nginx.conf,注释掉如下内容,重启nginx,再重启浏览器即可。

在这里插入图片描述



c. 安装nginx,执行make时出现如下报错。

在这里插入图片描述

主要原因是 Makefile 里面 gcc 的参数多了一个 “-Werror”,找到出错的make文件夹,看Make文件里面有没有“-Werror”,如果有的话将其删除,重新编译即可。Makefile文件位于/nginx-1.11.7/objs中。



d. 安装nginx时出现如下报错

在这里插入图片描述

解决办法:

$ cd /usr/local/src/fastdfs-nginx-module-1.20/src
$ vim config

修改如下内容:

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

再重新编译即可。



版权声明:本文为Keyuchen_01原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。