T O P
Image

Linux

FDFS分布式存储服务器搭建

Ubuntu下用Nginx搭建FDFS文件服务器

  • By - C灵C

  • 2017年6月4日 23:50





假设现在已有一台全新的Ubuntu虚拟机,如果还未安装,请参考虚拟机安装的教程。

 

由于ubuntu系统默认是没有激活root用户的,需要我们手工进行操作,使用快捷键〈Ctrl+Alt+F3〉进入终端,输入刚刚设置的用户名,本例为root1,与密码,完成登录。随后输入如下命令:

sudo passwd root

Enter new UNIX password:这个是root的密码

Retype new UNIX password:重复root的密码

 

通过如下命令查看ip:

sudo apt install net-tools

ipconfig

 

通过官网或者其他网络资源,自行安装并激活Xshell、Xftp工具,并尝试通过root用户连接本机,如若无法连接请参考以下方法:

1、使用apt工具下载并安装openssh-server,输入命令:

sudo apt install openssh-server

2、通过如下命令安装vim

sudo apt install vim

3、修改/etc/ssh/sshd_config文件:

vim /etc/ssh/sshd_config

4、找到PermitRootLogin prohibit-password按〈i〉键插入代码,通过#将其注释,在其下方添加如下代码:

PermitRootLogin yes

添加完成后按〈Esc〉键,再按〈Shift + :〉输入wq保存并退出。

5、重启ssh服务

sudo service ssh restart

再重新通过Xshell工具进行连接,登录root用户。

 

下载安装libfastcommon

libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,通过以下命令直接安装即可:

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz

或者直接从GitHub上clone下来:

apt-get install git

git clone https://github.com/happyfish100/libfastcommon.git

 

新建libfastcommon目录:

apt install mkdir

mkdir -p /usr/local/libfastcommon

 

将下载V1.0.36.tar.gz压缩包拷贝到新建的目录下然后解压:

cp  V1.0.36.tar.gz /usr/local/libfastcommon

cd /usr/local/libfastcommon

tar  –zxvf  V1.0.36.tar.gz

cd libfastcommon-1.0.36

 

安装编译环境、编译、安装,如图所示:

apt-get install build-essential

./make.sh

./make.sh install

libfastcommon.png


下载FastDFS:

cd ~

wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz

 

新建目录:

mkdir -p /usr/local/fastdfs

 

将下载好的V5.11.tar.gz文件拷贝到新建的目录中然后解压:

cp V5.11.tar.gz /usr/local/fastdfs

cd /usr/local/fastdfs

tar -zxvf V5.11.tar.gz

cd fastdfs-5.11

 

编译、安装,成功后如图所示:

./make.sh

./make.sh install

fastdfs.png


从上面的安装过程中,我们可以看到libfastcommon.so和libfdfsclient.so文件都安装到了/usr/lib64/目录下,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

创建libfastcommon.so软链接

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

创建libfdfsclient.so软链接

ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

 

FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下,所以需要建立 /usr/bin 到 /usr/local/bin 的软链接

ln -s /usr/bin/fdfs_trackerd   /usr/local/bin

ln -s /usr/bin/fdfs_storaged   /usr/local/bin

ln -s /usr/bin/stop.sh         /usr/local/bin

ln -s /usr/bin/restart.sh      /usr/local/bin

 

创建存储目录

用于存储tracker server的数据和日志

mkdir -p /data/fastdfs/tracker

用于存储storage server的数据和日志

mkdir -p /data/fastdfs/storage

用于存储上传的资源文件

mkdir -p /data/fastdfs/res

用于存储client server的数据和日志

mkdir -p /data/fastdfs/client

临时目录

mkdir -p /data/fastdfs/temp

 

配置跟踪服务器(tracker server)

复制一份tracker.conf.sample文件并修改文件名

cd /etc/fdfs

cp tracker.conf.sample tracker.conf

编辑tracker.conf

vim tracker.conf

修改成如下配置:

Tracker 存储数据和日志根目录(根目录必须存在,子目录会自动创建

base_path=/data/fastdfs/tracker

HTTP 服务端口

http.server_port=80

 

配置存储服务器(storage server)

复制一份storage.conf.sample文件并修改文件名

cd /etc/fdfs

cp storage.conf.sample storage.conf

编辑storage.conf

vim storage.conf

修改成如下配置:

数据和日志存储的根目录

base_path=/data/fastdfs/storage

指定第一存储目录,逐一配置 store_path0,索引从0开始。

store_path0=/data/fastdfs/res

storage与tracker可以不在同一台服务器上,所以此处指定tracker服务器地址,本文为上面预定好的IP,请根据虚拟机IP地址自行更换。

tracker_server=192.168.209.121:22122

HTTP 访问文件的端口,此处需要与后面Nginx监听的端口保持一致

http.server_port=80

 

配置客户端服务器(client server),此处仅为测试上传,后面会在程序中使用代码来上传文件

复制一份client.conf.sample文件并修改文件名

cd /etc/fdfs

cp client.conf.sample client.conf

编辑client.conf

vim client.conf

修改成如下配置:

将base_path路径改为刚新建的client目录

base_path=/data/fastdfs/client

 

指定tracker服务器地址,端口号相同,IP同为虚拟机的IP

tracker_server=192.168.0.101:22122

 

启动tracker和storage

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

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

或者通过以下命令启动

/etc/init.d/fdfs_trackerd start

/etc/init.d/fdfs_storaged start

 

查看tracker和storage启动是否成功

tail -f /data/fdfs/storage/logs/storaged.log

tail -f /data/fdfs/tracker/logs/trackerd.log

或者通过如下命令查看端口是否正在被监听,如图所示:

netstat -unltp | grep fdfs

storagetracker.png


测试文件上传功能

通过Xftp软件上传一张图片至桌面即/home/root1/Desktop,执行以下命令测试服务器是否配置成功:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /home/root1/Desktop/c0c.png

上传成功后,会返回如图类似的fileId:

fdfsupload.png


通过上面的步骤,已经可以上传文件了,但是不能够将上传的文件下载下来。因此需要Nginx作为服务器支持Http方式访问文件,同样的后面安装FastDFS模块页需要用到Nginx环境。Nginx只需要安装在storage server所在的服务器即可,用于访问文件,保存刚刚获得的field,后续测试会用到。

 

通过如下命令安装nginx所需环境:

apt-get install libpcre3 libpcre3-dev

apt-get install openssl libssl-dev

apt-get install zlib1g-dev

注意在“zlib1g-dev”包中,此处为“1g”,谐音为“一g”,并非“lg”。

 

下载Nginx

wget https://nginx.org/download/nginx-1.12.1.tar.gz

新建目录

mkdir -p /usr/local/nginx

cp nginx-1.12.1.tar.gz /usr/local/nginx

cd /usr/local/nginx

解压

tar -zxvf nginx-1.12.1.tar.gz

cd nginx-1.12.1

使用默认配置

./configure

编译、安装

make

make install

如果出现如下图错误:

nginxerrot.png


通过如下命令解决:

vim objs/Makefile

修改CFLAGS参数,在后面追加以下代码:

-Wno-implicit-fallthrough

再次执行编译、安装即可。

 

启动Nginx

cd /usr/local/nginx/sbin/

./nginx

或者可以直接输入以下命令

/usr/local/nginx/sbin/nginx

Nginx其他命令

./nginx -s stop

./nginx -s reload

./nginx -s quit

修改nginx配置文件nginx.conf

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

添加如下行,将 /group1/M00 映射到 /ljzsg/fastdfs/file/data

location /group1/M00 {

    alias /data/fastdfs/res/data;

}

如图所示。


nginx.conf.png


重启Nginx:

/usr/local/nginx/sbin/nginx -s reload

 

此时,可通过浏览器访问,虚拟机IP+刚保存的filed,即可查看到刚刚上传的图片,例:

http://192.168.86.234/group1/M00/00/00/wKhVhlz13weAZ8M0AAAzdK4sKc0043.png

 

FastDFS通过tracker服务器,将文件放在storage存储服务器中,但是同组存储服务器之间需要进入文件复制,有同步延迟的问,为避免客户端由于复制延迟导致的文件无法访问错误。在所有的storage节点安装fastdfs-nginx-module:

通过Xftp上传fastdfs-nginx-module-master至/usr/local文件夹

配置nginx,在nginx中添加模块:

先将nginx关闭

/usr/local/nginx/sbin/nginx -s stop

进入解压包目录

cd /usr/local/nginx/nginx-1.12.1

添加模块

./configure --add-module=../../fastdfs-nginx-module-master/src

重新编译、安装,如若报错请参考上述解决方式:

make

make install

查看Ningx版本以及模块:

/usr/local/nginx/sbin/nginx –V

 

添加模块成功后,需要将fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

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

vim /etc/fdfs/mod_fastdfs.conf

主要修改以下配置,其他的默认即可:

客户端访问文件连接超时时长(单位:秒)

connect_timeout=10

临时目录

base_path=/data/fastdfs/temp

tracker服务IP和端口

tracker_server=192.168.45.128:22122

访问链接前缀加上组名group1

url_have_group_name=true

文件存储路径

store_path0=/data/fastdfs/res

 

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

cd /usr/local/fastdfs/fastdfs-5.11/conf/

cp http.conf mime.types anti-steal.jpg /etc/fdfs/

 

配置nginx访问storage文件,修改nginx.conf

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

修改配置,其它的默认,在80端口下添加fastdfs-nginx模块

location ~/group([0-9])/M00 {

    ngx_fastdfs_module;

}

如图所示:

nginxaddmodule.png


启动nginx

/usr/local/nginx/sbin/nginx

启动成功后,重新访问已上传的图片。