zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    卡特兰数
    java学习
    最大化窗口
    C++复制文件的代码
    C++复制文件(使用WindowsAPI)
    C++下获取XMLHTTPRequest指针
    操作哈希表
    《Windows Communication Foundation之旅》系列之三(转载)
    让.Net2.0的Membership使用已存在的Sql Server2000/2005数据库
    用Visual C#做WinForm组件
  • 原文地址:https://www.cnblogs.com/duanxiaobiao/p/14514751.html
Copyright © 2011-2022 走看看