FastDFS安装部署

前言:

资源地址:链接:https://pan.baidu.com/s/1BwjWEHIGKCVAeJvlbdRmSA 提取码:7mqz

一、 安装libfastcommon

​ 由于我的centOS7没有安装zip, 先安装 :

yum -y install unzip zip

用yum安装gcc:

yum -y install gcc-c++

安装成功后解压(先上传) libfastcommon-master.zip

unzip libfastcommon-master.zip

进入我们刚刚解压的目录:

cd  libfastcommon-master

编译 libfastcommon

./make.sh

安装编译好的库

./make.sh install

libfastcommon默认会被安装到 /usr/lib64/libfastcommon.so但是FastDFS的主程序却在/usr/local/lib目录下 ,这个时候我们就要建立一个软链接了,实际上也相当于windows上的快捷方式。

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

二、安装FastDFS

解压FastDFS安装包

unzip fastdfs-5.11.zip

进到刚解压的目录

cd fastdfs-5.11

安装perl类库

yum install perl -y

编译FastDFs

./make.sh

安装编译好的类库

./make.sh install

如果没有报错那么就成功了。安装log中会提示FastDFS安装到了/etc/fdfs目录下。

成功后查看安装目录:

cd /etc/fdfs/

我们需要把这三个示例文件复制一份,去掉.sample

cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

FastDFS安装结束。

三、安装tracker

3.1创建tracker工作目录

这个目录可以自定义,用来保存tracker的data和log 。

创建下面的目录:

mkdir -p  /usr/local/fdfs/tracker

3.2配置tracker

cd /etc/fdfs
vi tracker.conf

打开后重点关注下面4个配置:

1.disabled=false #默认开启 
2.port=22122 #默认端口号 
3.base_path=/usr/local/fdfs/tracker  #我刚刚创建的目录 
4.http.server_port=6666  #默认端口是8080

3.3启动tracker

保存配置后启动tracker,命令如下:

service fdfs_trackerd start

如果不能启动,或提示用systemctl可改用命令:

systemctl start fdfs_trackerd

成功后应该可以看到:

[root@localhost fdfs]# service fdfs_trackerd start
Starting fdfs_trackerd (via systemctl):                    [  OK  ]

进行刚刚创建的tracker目录,发现目录中多了data和log两个目录

最后我们需要给tracker加入开机启动

1、查看开启启动文件权限:

ll /etc/rc.d/rc.local

-rw-r--r-- 1 root root 501 Jun 16 21:34 /etc/rc.d/rc.local

发现并没有执行权限,需要加一下:

chmod +x /etc/rc.d/rc.local

修改rc.local

vi  /etc/rc.d/rc.local

在最后增加:

service fdfs_trackerd start

查看一下tracker的端口监听情况(需要先安装net-tools网络工具包:yum install net-tools -y)

netstat -antp|grep fdfs

tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2231/fdfs_trackerd

端口22122成功监听。

四、安装storage

storage的安装与tracker很类似。

4.1 为storage配置工作目录

与tracker不现的是,由于storage还需要一个目录用来存储数据,所以我另外多建了一个storage_data

mkdir -p /usr/local/fdfs/storage
mkdir -p  /usr/local/fdfs/storage_data

下面是我的目录结构:
主目录: /usr/local/fdfs/storage
存储数据目录: /usr/local/fdfs/storage_data

4.2 修改storage配置文件

修改storage.conf

vi /etc/fdfs/storage.conf
1.disabled=false 
2.group_name=group1              #组名,根据实际情况修改 
3.port=23000                     #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 
4.base_path=/usr/local/fdfs/storage    #设置storage数据文件和日志目录 
5.store_path_count=1             #存储路径个数,需要和store_path个数匹配 
6.store_path0=/usr/local/fdfs/storage_data  #实际文件存储路径 
7.tracker_server=192.168.188.138:22122  #我CentOS7的ip地址 
8.http.server_port=8888  #设置 http 端口号

修改保存后创建软引用

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

4.3 启动storage

service fdfs_storaged start

如果不能启动,或提示用systemctl可改用命令:

systemctl start fdfs_storaged

成功后应该可以看到:
Starting fdfs_storaged (via systemctl): [ OK ]

同样的,设置开机启动:
修改 rc.local

vi /etc/rc.d/rc.local

在最后增加:

service fdfs_storaged start

查看一下服务是否启动

netstat -antp|grep fdfs

tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2323/fdfs_storaged

服务已正常启动。

4.4 校验整合

到这里,fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去。
查看命令:

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

成功后可以看到:

[2018-06-05 19:56:26] DEBUG - base_path=/usr/local/fdfs/storage, connect_timeout=30, 
network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, 
use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
server_count=1, server_index=0
tracker server is 192.168.188.138:22122
group count: 1
Group 1:
group name = group1
disk total space = 17394 MB
disk free space = 13880 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0
        Storage 1:
                id = 192.168.188.138
                ip_addr = 192.168.188.138 (bogon)  ACTIVE
                http domain = 
                version = 5.11
                join time = 2018-06-03 18:34:42
                up time = 2018-06-05 19:31:05
                total storage = 17394 MB
                free storage = 13880 MB
                upload priority = 10
                store_path_count = 1
                subdir_count_per_path = 256
                storage_port = 23000
                storage_http_port = 8888
                current_write_path = 0
                source storage id = 
                if_trunk_server = 0
                connection.alloc_count = 256
                connection.current_count = 0
                connection.max_count = 0
                total_upload_count = 5
                success_upload_count = 5
                total_append_count = 0
                success_append_count = 0
                total_modify_count = 0
                success_modify_count = 0
                total_truncate_count = 0
                success_truncate_count = 0
                total_set_meta_count = 0
                success_set_meta_count = 0
                total_delete_count = 0
                success_delete_count = 0
                total_download_count = 0
                success_download_count = 0
                total_get_meta_count = 0
                success_get_meta_count = 0
                total_create_link_count = 0
                success_create_link_count = 0
                total_delete_link_count = 0
                success_delete_link_count = 0
                total_upload_bytes = 492292
                success_upload_bytes = 492292
                total_append_bytes = 0
                success_append_bytes = 0
                total_modify_bytes = 0
                success_modify_bytes = 0
                stotal_download_bytes = 0
                success_download_bytes = 0
                total_sync_in_bytes = 0
                success_sync_in_bytes = 0
                total_sync_out_bytes = 0
                success_sync_out_bytes = 0
                total_file_open_count = 5
                success_file_open_count = 5
                total_file_read_count = 0
                success_file_read_count = 0
                total_file_write_count = 5
                success_file_write_count = 5
                last_heart_beat_time = 2018-06-05 19:56:07
                last_source_update = 2018-06-03 22:36:03
                last_sync_update = 1970-01-01 08:00:00
                last_synced_timestamp = 1970-01-01 08:00:00 

五、测试文件上传

5.1 配置客户端

需要修改客户端的配置文件:

vi /etc/fdfs/client.conf
base_path=/usr/local/fdfs/tracker  #tracker服务器文件路径
tracker_server=192.168.188.146:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=6666 # tracker 服务器的http端口号,必须和tracker的设置对应起来

5.2 模拟上传

通过ssh客户端上传一张本地图片到root目录

确定图片位置后,我们输入上传图片命令把图片上传到FastDFS服务器:

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/1.jpg #这后面放的是图片的位置

成功后会返回图片的路径:group1/M00/00/00/wKi8ilsWfg2AI2fRAADg3sO_IT8991.jpg
组名:group1
磁盘:M00
目录:00/00
文件名称:wKi8ilsWfg2AI2fRAADg3sO_IT8991.jpg

我们上传的图片会被上传到我们创建的storage_data目录下,让我们去看看:

cd /usr/local/fdfs/storage_data/data
ls

00 0A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96 A0 AA B4 BE C8 D2 DC E6 F0 FA
01 0B 15 1F 29 33 3D 47 51 5B 65 6F 79 83 8D 97 A1 AB B5 BF C9 D3 DD E7 F1 FB
02 0C 16 20 2A 34 3E 48 52 5C 66 70 7A 84 8E 98 A2 AC B6 C0 CA D4 DE E8 F2 FC
03 0D 17 21 2B 35 3F 49 53 5D 67 71 7B 85 8F 99 A3 AD B7 C1 CB D5 DF E9 F3 FD
04 0E 18 22 2C 36 40 4A 54 5E 68 72 7C 86 90 9A A4 AE B8 C2 CC D6 E0 EA F4 FE
05 0F 19 23 2D 37 41 4B 55 5F 69 73 7D 87 91 9B A5 AF B9 C3 CD D7 E1 EB F5 FF
06 10 1A 24 2E 38 42 4C 56 60 6A 74 7E 88 92 9C A6 B0 BA C4 CE D8 E2 EC F6
07 11 1B 25 2F 39 43 4D 57 61 6B 75 7F 89 93 9D A7 B1 BB C5 CF D9 E3 ED F7
08 12 1C 26 30 3A 44 4E 58 62 6C 76 80 8A 94 9E A8 B2 BC C6 D0 DA E4 EE F8
09 13 1D 27 31 3B 45 4F 59 63 6D 77 81 8B 95 9F A9 B3 BD C7 D1 DB E5 EF F9

cd 00/00
ll

果然通过刚刚返回的路径,我们成功找到了图片。

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

六、FastDFS的nginx模块安装

6.1安装nginx准备

在安装nginx之前要安装nginx所需的依赖lib:

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

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

解压nginx,和 fastdfs-nginx-module:

tar -zxvf nginx-1.12.0.tar.gz
unzip fastdfs-nginx-module-master.zip

解压后进入nginx目录编译安装nginx,并添加fastdfs-nginx-module:

cd /root/nginx-1.12.0
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module-master/src

第一个目录是nginx安装目录,第二个目录是fastdfs-nginx-module源码目录

如果配置不报错的话,开始编译:

make

编译安装:

make install

nginx的默认目录是/usr/local/nginx,安装成功后查看:

cd /usr/local/nginx
ll
drwx------. 2 nobody root    6 Jun  3 19:53 client_body_temp
drwxr-xr-x. 2 root   root 4096 Jun  3 20:36 conf
drwx------. 2 nobody root    6 Jun  3 19:53 fastcgi_temp
drwxr-xr-x. 2 root   root   40 Jun  3 19:36 html
drwxr-xr-x. 2 root   root   58 Jun  5 19:31 logs
drwx------. 2 nobody root    6 Jun  3 19:53 proxy_temp
drwxr-xr-x. 2 root   root   19 Jun  3 19:36 sbin
drwx------. 2 nobody root    6 Jun  3 19:53 scgi_temp
drwx------. 2 nobody root    6 Jun  3 19:53 uwsgi_temp

6.3 配置storage nginx

修改nginx.conf:

cd /usr/local/nginx/conf
vi nginx.conf

修改监听端口 listen 9999, 新增location

server {
	listen       9999;
	server_name  localhost;
    
    location / {
        root   html;
        index  index.html index.htm;
    }
	# 需要添加的代码
    location ~/group1/M00 {
        root /usr/local/fdfs/storage_data/data;
        ngx_fastdfs_module;
    }
	# end
    location = /50x.html {
        root   html;
    }

}

然后进入FastDFS安装时的解压过的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:

cd /root/fastdfs-5.11/conf
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/

另外还需要把 fastdfs-nginx-module 安装目录中 src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:

cd /root/fastdfs-nginx-module-master/src
cp mod_fastdfs.conf /etc/fdfs/

对刚刚拷贝的mod_fastdfs.conf文件进行修改:

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

在文件的最后,设置group

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/local/fdfs/storage_data

...多组的继续设置group2、group3

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

ln  -s  /usr/local/fdfs/storage_data/data/  /usr/local/fdfs/storage_data/data/M00

启动nginx:

/usr/local/nginx/sbin/nginx

成功启动:ngx_http_fastdfs_set pid=8142

设置开机自动启动nginx:
修改rc.local

vi /etc/rc.d/rc.local

在最后增加:

浏览器访问 http://192.168.188.138:9999 (根据自己IP访问)

image-20210310220656896

storage的nginx已配置成功。接下来,我们还要继续配置tracker的nginx。

6.4 配置tracker nginx

再解压一个nginx:
我在我自己的工作下再建了一个nginx2,把原来的nginx-1.12.0.tar.gz又解压了一份到里面

cd ~
mkdir nginx2
tar -xvf nginx-1.12.0.tar.gz -C /root/nginx2

进入到nginx2目录,设置编译配置

cd /root/nginx2/nginx-1.12.0
./configure --prefix=/usr/local/nginx2 --add-module=/root/fastdfs-nginx-module-master/src

如果配置不报错的话,开始编译:

make

编译安装:

make install

nginx的安装目录是 /usr/local/nginx2

接下来,一样的还是修改nginx.conf,端口号可以不改,用80的。需将upstream指向tracker的nginx地址。

vi /usr/local/nginx2/conf/nginx.conf
 upstream fdfs_group1 {
        server 127.0.0.1:9999;
    }
    server {
        listen       80;
        server_name  localhost;
        
    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location /group1/M00 {
        proxy_pass http://fdfs_group1;
    }
    #location / {
    #    root   html;
    #    index  index.html index.htm;
    #}

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

启动nginx:

/usr/local/nginx2/sbin/nginx

设置开机自动启动nginx:
修改rc.local

vi /etc/rc.d/rc.local

在最后增加:

/usr/local/nginx2/sbin/nginx

浏览器访问 http://192.168.188.138

6.5 HTTP测试

现在我们再去访问一下,原来我们上传过的文件:

http://192.168.188.146/group1/M00/00/00/wKi8ilsWiS2AbyWrAADg3sO_IT8536.jpg

七、使用maven项目编写图片上传demo

7.1 pom.xml 依赖

<dependency>
	<groupId>cn.bestwu</groupId>
	<artifactId>fastdfs-client-java</artifactId>
	<version>1.27</version>
</dependency>

7.2 fdfs_client.conf 配置文件

​ 在 maven项目的resources文件夹下创建 fdfs_client.conf 配置文件

# 改成自己的IP
tracker_server=182.254.229.119:22122    

7.3 main方法

​ 在测试文件夹下创建一个测试类TestStorageClient,并编写main方法。将第六条的图片路径更改成自己本地的图片地址。

public class TestStorageClient {

    public static void main(String[] args) throws IOException, MyException {
        // 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
        ClientGlobal.init("./src/main/resources/fdfs_client.conf");
        // 2、创建一个 TrackerClient 对象。直接 new 一个。
        TrackerClient trackerClient = new TrackerClient();
        // 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
        TrackerServer trackerServer = trackerClient.getConnection();
        // 4、创建一个 StorageServer 的引用,值为 null
        StorageServer storageServer = null;
        // 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 6、使用 StorageClient 对象上传图片。
        //扩展名不带“.”
        String[] strings = storageClient.upload_file("D:/cat.jpg", "jpg",
                null);
        // 7、返回数组。包含组名和图片的路径。
        for (String string : strings) {
            System.out.println(string);
        }
		// http://182.254.229.119/group1/M00/00/00/CgAIDV_9PbOAclrBAACvSmRH5h8087.jpg night.jpg
        /*http://182.254.229.119/group1/M00/00/00/CgAIDV_9QEeABcBNAABanGTtiQw792.jpg Cat 猫*/

    }
}

​ main方法执行成功后返回的数据为 : 组名和图片的路径。

fdfs

浏览器访问 :http://182.254.229.119/group1/M00/00/00/CgAIDWBI1aGAPpM4AABanGTtiQw241.jpg

posted @ 2021-03-10 22:51  duanxiaobiao  阅读(397)  评论(0编辑  收藏  举报