0%

centos7.* 安装 FastDFS

FastDFS简介

fastDFS 是以C语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件为载体的在线服务,如图片网站,视频网站等

分布式文件系统:

基于客户端/服务器的文件存储系统对等特性允许一些系统扮演客户端和服务器的双重角色,可供多个用户访问的服务器,比如,用户可以“发表”一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样

FastDFS由跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)构成。

Tracker server 追踪服务器

追踪服务器负责接收客户端的请求,选择合适的组合storage server ,tracker server 与 storage server之间也会用心跳机制来检测对方是否活着。
Tracker需要管理的信息也都放在内存中,并且里面所有的Tracker都是对等的(每个节点地位相等),很容易扩展
客户端访问集群的时候会随机分配一个Tracker来和客户端交互。

Storage server 储存服务器

实际存储数据,分成若干个组(group),实际traker就是管理的storage中的组,而组内机器中则存储数据,group可以隔离不同应用的数据,不同的应用的数据放在不同group里面,

优点:
海量的存储:主从型分布式存储,存储空间方便拓展,
fastDFS对文件内容做hash处理,避免出现重复文件
然后fastDFS结合Nginx集成, 提供网站效率

linux-centos7-install-fastdfs-2020415143340

读写操作

写入数据

写操作的时候,storage会将他所挂载的所有数据存储目录的底下都创建2级子目录,每一级256个总共65536个,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据作为本地文件存储到该目录中。

linux-centos7-install-fastdfs-202041514373

下载文件

当客户端向Tracker发起下载请求时,并不会直接下载,而是先查询storage server(检测同步状态),返回storage server的ip和端口,
然后客户端会带着文件信息(组名,路径,文件名),去访问相关的storage,然后下载文件。

linux-centos7-install-fastdfs-2020415143642

源代码方式安装

首先下载源代码:

libfastcommon

fastdfs

fastdfs-nginx-module

nginx

1.把需要的安装包上传到服务器

mkdir 目录名

2.安装所需依赖

yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget && yum install lrzsz -y

3.进入程序所在的目录

a.安装libfastcommon

1
2
3
4
5
6
7
8
9
unzip libfastcommon.zip
cd libfastcommon
./make.sh
./make.sh install
#如果没有报错,执行建立软件链接的命令:
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

b.安装FastDfs:

1
2
3
4
unzip fastdfs-5.11.zip
cd fastdfs-5.11
./make.sh
./make.sh install

查看目录:

ll /etc/fdfs

有3个模板文件,各复制一份重命名为对应的conf文件

1
2
3
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

c.安装tracker:

创建tarcker工作目录,根据服务器硬盘分布创建工作目录:

mkdir -p /lvdata/fastdfs/fastdfs_tracker

配置tracker

vim /etc/fdfs/tracker.conf

disabled=false #默认开启 
port=22122 #默认端口号 
base_path=/lvdata/fastdfs/fastdfs_tracker #刚刚创建的目录 
http.server_port=6666 #默认端口是8080

:wq!

保存修改后,启动tracker:
service fdfs_trackerd start
设置开机启动:
systemctl enable fdfs_trackerd

ll /lvdata/fastdfs/fastdfs_tracker,多了data,logs目录

查看tracker运行情况:
netstat -unltp|grep fdfs
可以看到在监听22122端口

d.安装storage

创建数据目录:

mkdir -p /lvdata/fastdfs/fastdfs_storage
mkdir -p /lvdata/fastdfs/fastdfs_storage_data

修改配置文件:

vim /etc/fdfs/storage.conf

1.disabled=false 
2.group_name=group1 #组名,根据实际情况修改 
3.port=23000  #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 
4.base_path=/lvdata/fastdfs/fastdfs_storage  #设置storage数据文件和日志目录 
5.store_path_count=1 #存储路径个数,需要和store_path个数匹配 
6.base_path0=/lvdata/fastdfs/fastdfs_storage_data #实际文件存储路径 注意检查
7.tracker_server=192.168.150.132:22122 #我CentOS7的ip地址 
8.http.server_port=8888 #设置 http 端口号
:wq!

修改后,保存退出。创建软链接:

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

启动storage:

service fdfs_storaged start

设置开机启动:

systemctl enable fdfs_storaged

查看服务运行情况:

netstat -unltp |grep fdfs

可以看到在监听23000端口。

确认下storage是否注册到了tracker:

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

成功后可以看到:

ip_addr = 192.168.150.132 (localhost.localdomain) ACTIVE 的字样

修改客户端配置文件:

vim /etc/fdfs/client.conf

base_path=/lvdata/fastdfs/fastdfs_tracker #tracker服务器文件路径
tracker_server=192.168.150.132:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=6666 # tracker 服务器的 http端口号,必须和tracker的设置对应起来

:wq!

修改后,保存。

测试上传一张照片:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /root/test.png

成功后,会返回图片的路径如:

group1/M00/00/00/wKiWhFrdeCeAC_vCAABqgowGIFg399.png

查看是否上传成功:

cd /usr/testdfsdev/fastdfs/fastdfs_storage_data/data
cd 00/00;ls
wKiWhFrdeCeAC_vCAABqgowGIFg399.png

表明上传成功。

data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

在4.05版本的时候已经移除http支持,需要http支持,安装nginx及相关模块:
安装依赖包:

yum -y install pcre pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl-devel

安装nginx并添加fastdfs-nginx-module:

解压nginx和fastdfs-nginx-module:

tar xzvf nginx-1.12.0.tar.gz unzip fastdfs-nginx-module.zip vim /root/fastdfs-nginx-module/src/config,修改后的内容如下:

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

:wq!


cd nginx-1.12.0
./configure --prefix=/usr/local/nginx --add-module=/data/fdfs.install/fastdfs-nginx-module-1.22/src/

ng
回车,如果没有错误信息,直接安装:

make && make install

修改nginx配置:

vim /usr/local/nginx/conf/nginx.conf
server {
        listen       9999;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /group1/M00 {
            root /lvdata/fastdfs/fastdfs_storage_data/data;
            ngx_fastdfs_module;
        }
:wq!

保存修改。

进入fastdfs安装时解压的目录下的conf,将http.conf,mime.types复制到/etc/fdfs目录下:

cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/

将fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:

cp /lvdata/nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

vim /etc/fdfs/mod_fastdfs.conf
base_path=/lvdata/fastdfs/fastdfs_storage #保存日志目录
tracker_server=192.168.150.132:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/lvdata/fastdfs/fastdfs_storage_data #存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1

在文件的最后设置group:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/lvdata/fastdfs/fastdfs_storage_data
store_path1=/lvdata/fastdfs/fastdfs_storage_data

# group settings for group #2
# since v1.14
# when support multi-group, uncomment following section as neccessary
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/lvdata/fastdfs/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/lvdata/fastdfs/fastdfs_storage_data

创建M00至storage存储目录的符号链接:

ln  -s  /lvdata/fastdfs/fastdfs_storage_data/data/ /lvdata/fastdfs/fastdfs_storage_data/data/M00

启动nginx:

/usr/local/nginx/sbin/nginx

成功启动:

ngx_http_fastdfs_set pid=1231

使用刚才返回的图片路径,使用浏览器测试:

X.X.X.X:9999/group1/M00/00/00/wKiWhFrdeCeAC_vCAABqgowGIFg399.png

如果可以看到刚才的图片,说明nginx配置正常。

docker 方式安装

待补充