第2-1-2章 传统方式安装FastDFS-附FastDFS常用命令


目录
  • https://github.com/happyfish100/libfastcommon/releases 选择合适的版本进行安装。

    #下载
    [root@node5-vm10 ~]# cd /usr/local/src
    [root@node5-vm10 src]#  wget -O libfastcommon-1.0.43.tar.gz  https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.43
    
    #解压
    [root@node5-vm10 src]# tar -zxvf libfastcommon-1.0.43.tar.gz 
    
    #编译安装
    [root@node5-vm10 src]# cd libfastcommon-1.0.43
    [root@node5-vm10 libfastcommon-1.0.43]# ./make.sh 
    [root@node5-vm10 libfastcommon-1.0.43]# ./make.sh install
    

    3.4 安装FastDFS

    下载地址:https://github.com/happyfish100/fastdfs/releases 选择合适的版本,当前最新release版本是6.06

    #切换目录
    [root@node5-vm10 libfastcommon-1.0.43]# cd /usr/local/src/ 
    
    #下载
    [root@node5-vm10 src]# wget -O fastdfs-6.06.tar.gz https://codeload.github.com/happyfish100/fastdfs/tar.gz/V6.06
    
    #解压
    [root@node5-vm10 src]# tar -zxvf fastdfs-6.06.tar.gz 
    
    #安装
    [root@node5-vm10 src]# cd fastdfs-6.06
    [root@node5-vm10 fastdfs-6.06]# ./make.sh
    [root@node5-vm10 fastdfs-6.06]# ./make.sh install
    

    默认安装方式安装后的相应文件与目录

    A、服务脚本:

    /etc/init.d/fdfs_storaged
    /etc/init.d/fdfs_trackerd
    

    B、配置文件(这三个是作者给的样例配置文件)

    /etc/fdfs/client.conf.sample
    /etc/fdfs/storage.conf.sample
    /etc/fdfs/tracker.conf.sample
    

    C、命令工具在 /usr/bin/ 目录下:

    fdfs_appender_test
    fdfs_appender_test1
    fdfs_append_file
    fdfs_crc32
    fdfs_delete_file
    fdfs_download_file
    fdfs_file_info
    fdfs_monitor
    fdfs_regenerate_filename
    fdfs_storaged
    fdfs_test
    fdfs_test1
    fdfs_trackerd
    fdfs_upload_appender
    fdfs_upload_file
    

    D、服务启动命令在:/usr/local/src/fastdfs-6.06

    restart.sh
    setup.sh
    stop.sh
    

    3.5 安装fastdfs-nginx-module

    我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者(淘宝的架构师余庆)为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。

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

    [root@node5-vm10 fdfs]# cd /usr/local/src
    [root@node5-vm10 src]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
    
    [root@node5-vm10 src]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
    [root@node5-vm10 src]# cp /usr/local/src/fastdfs-6.06/conf/http.conf /etc/fdfs/
    [root@node5-vm10 src]# cp /usr/local/src/fastdfs-6.06/conf/mime.types /etc/fdfs/
    

    3.5 安装Nginx

    安装nginx的主要目的是做负载均衡及实现高可用。tracker集群环境下,需要在每个Tracker上安装Nginx, 如果只有一台tracker服务器,可以不配置Nginx

    Storage服务器安装Nginx:

    cd /usr/local/src
    
    #下载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/
    
    #添加fastdfs-nginx-module模块
    ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ 
    
    #编译安装
    make && make install 
    

    配置Nginx:

    vim /etc/fdfs/mod_fastdfs.conf
    #需要修改的内容如下
    tracker_server=172.17.0.115:22122  #tracker服务器IP和端口
    url_have_group_name=true
    base_path=/home/fastdfs/storage
    store_path0=/home/fastdfs/storage/base
    
    #配置nginx.config
    vim /usr/local/nginx/conf/nginx.conf
    #添加如下配置
    server {
        listen       8188;    ## 该端口为storage.conf中的http.server_port相同
        server_name  localhost;
        location ~/group[0-9]/ {
            ngx_fastdfs_module;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
        }
    }
    

    启动Nginx:

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

    3.6 配置FastDFS Tracker

    3.5.1 配置Tracker

    复制创建tracker.conf

    [root@node5-vm10 fastdfs-6.06]# cd /etc/fdfs
    [root@node5-vm10 fdfs]# ll
    total 32
    -rw-r--r--. 1 root root  1909 Apr  3 11:11 client.conf.sample
    -rw-r--r--. 1 root root 10246 Apr  3 11:11 storage.conf.sample
    -rw-r--r--. 1 root root   620 Apr  3 11:11 storage_ids.conf.sample
    -rw-r--r--. 1 root root  9138 Apr  3 11:11 tracker.conf.sample
    
    [root@node5-vm10 fdfs]# cp tracker.conf.sample tracker.conf
    

    修改配置文件:

    [root@node5-vm10 fdfs]# vim tracker.conf
    # HTTP port on this tracker server
    # 修改端口
    http.server_port = 8180   
    # the base path to store data and log files
    base_path =  /home/fastdfs/tracker
    

    注意文件夹要手工创建好:

    [root@node5-vm10 fdfs]# mkdir -p  /home/fastdfs/tracker
    

    3.5.2 启动与关闭

    使用以下任一命令启动Tracker服务:

    [root@node5-vm10 fdfs]# /etc/init.d/fdfs_trackerd start
    Reloading systemd:                                         [  OK  ]
    Starting fdfs_trackerd (via systemctl):                    [  OK  ]
    # 或
    [root@node5-vm10 fdfs]# service fdfs_trackerd start
    Starting fdfs_trackerd (via systemctl):                    [  OK  ]
    # 或
    [root@node5-vm10 fdfs]# systemctl start fdfs_trackerd
    

    查看 FastDFS Tracker 是否已成功启动:

    #初次成功启动后会在 /fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。
    [root@node5-vm10 fdfs]# cd /fastdfs/tracker/
    [root@node5-vm10 tracker]# ll
    total 0
    drwxr-xr-x. 2 root root 58 Apr  3 11:28 data
    drwxr-xr-x. 2 root root 25 Apr  3 11:28 logs
    
    [root@node5-vm10 tracker]# systemctl status fdfs_trackerd
    ● fdfs_trackerd.service - LSB: FastDFS tracker server
       Loaded: loaded (/etc/rc.d/init.d/fdfs_trackerd; bad; vendor preset: disabled)
       Active: active (running) since Fri 2020-04-03 11:28:11 CST; 1min 8s ago
         Docs: man:systemd-sysv-generator(8)
      Process: 26724 ExecStart=/etc/rc.d/init.d/fdfs_trackerd start (code=exited, status=0/SUCCESS)
       Memory: 4.4M
       CGroup: /system.slice/fdfs_trackerd.service
               └─26727 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
    
    Apr 03 11:28:09 node5-vm10.xxzx systemd[1]: Starting LSB: FastDFS tracker server...
    Apr 03 11:28:09 node5-vm10.xxzx fdfs_trackerd[26724]: Starting FastDFS tracker server:
    Apr 03 11:28:11 node5-vm10.xxzx systemd[1]: Started LSB: FastDFS tracker server.
    

    使用以下任一命令关闭Tracker服务

    service fdfs_trackerd stop
    或
    systemctl stop fdfs_trackerd
    或
    /etc/init.d/fdfs_trackerd stop
    

    设置开机启动:

    chkconfig fdfs_trackerd on
    或
    systemctl enable fdfs_trackerd.service
    或者:
    vim /etc/rc.d/rc.local
    /etc/init.d/fdfs_trackerd start 	#加入配置
    

    Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:

    ${base_path}
    |__data
    | |__storage_groups.dat:存储分组信息
    | |__storage_servers.dat:存储服务器列表
    |__logs
    | |__trackerd.log: tracker server 日志文件
    

    3.6 配置FastDFS Storage

    3.6.1 配置Storage

    进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf

    [root@node5-vm10 ~]# cd /etc/fdfs/
    [root@node5-vm10 fdfs]# cp storage.conf.sample storage.conf
    [root@node5-vm10 fdfs]# vim storage.conf
    

    修改以下配置信息,其他默认即可:

    # Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)  
    # 这里不是上传的文件存放的地址
    base_path =  /home/fastdfs/storage
    
    # 逐一配置 store_path_count 个路径,索引号基于 0。
    # 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
    store_path0 =  /home/fastdfs/storage/base
    
    # FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。 
    # 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
    subdir_count_per_path=256
    
    # tracker_server 的列表 ,会主动连接 tracker_server
    # 有多个 tracker server 时,每个 tracker server 写一行
    tracker_server = 172.17.0.115:22122
    
    #访问端口 默认8888
    http.server_port = 8188
    

    创建Storage基础数据目录,对应base_path目录

    # 对应base_path
    [root@node5-vm10 fdfs]# mkdir -p  /home/fastdfs/storage
         
    # 这是配置的store_path0路径,有多个要创建多个
    mkdir -p  /home/fastdfs/storage/base
    

    3.6.2 启动与关闭

    启动Storage前确保Tracker是启动的,可以用以下任一方式启动Storage:

    /etc/init.d/fdfs_storaged start
    或
    service fdfs_storaged start
    或
    systemctl start fdfs_storaged
    

    查看 Storage 是否成功启动:

    [root@node5-vm10 ~]# netstat -unltp|grep 23000
    tcp        0      0 0.0.0.0:23000           0.0.0.0:*      LISTEN   28737/fdfs_storaged 
    
    [root@node5-vm10 ~]# systemctl status fdfs_storaged
    ● fdfs_storaged.service - LSB: FastDFS storage server
       Loaded: loaded (/etc/rc.d/init.d/fdfs_storaged; bad; vendor preset: disabled)
       Active: active (running) since Fri 2020-04-03 11:59:31 CST; 39min ago
         Docs: man:systemd-sysv-generator(8)
      Process: 28716 ExecStop=/etc/rc.d/init.d/fdfs_storaged stop (code=exited, status=2)
      Process: 28734 ExecStart=/etc/rc.d/init.d/fdfs_storaged start (code=exited, status=0/SUCCESS)
       Memory: 66.9M
       CGroup: /system.slice/fdfs_storaged.service
               └─28737 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
    
    Apr 03 11:59:31 node5-vm10.xxzx systemd[1]: Starting LSB: FastDFS storage server...
    Apr 03 11:59:31 node5-vm10.xxzx systemd[1]: Started LSB: FastDFS storage server.
    Apr 03 11:59:31 node5-vm10.xxzx fdfs_storaged[28734]: Starting FastDFS storage server:
    

    使用以下任一命令关闭Storage:

    • service fdfs_storaged stop
    • systemctl stop fdfs_storaged
    • /etc/init.d/ fdfs_storaged stop

    查看Storage和Tracker是否在通信:

    [root@node5-vm10 ~]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
    [2020-04-03 12:41:17] DEBUG - base_path=/fastdfs/storage, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=1, 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 172.17.0.115:22122
    
    group count: 1
    
    Group 1:
    group name = group1
    disk total space = 196,011 MB
    disk free space = 29,774 MB
    ...
    

    使用以下任一命令设置 Storage 开机启动:

    • chkconfig fdfs_storaged on

    • systemctl enable fdfs_storaged.service

    • vim /etc/rc.d/rc.local
      加入配置:
      /etc/init.d/fdfs_storaged  start 
      

    Storage 目录:

    Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。

    在 store_path0/data 目录下,创建了N*N个子目录:

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

    3.7 文件测试

    修改客户端配置:

    [root@node5-vm10 ~]# cd /etc/fdfs
    [root@node5-vm10 fdfs]# cp client.conf.sample client.conf
    
    [root@node5-vm10 fdfs]# mkdir -p /home/fastdfs/client
    
    [root@node5-vm10 fdfs]# vim client.conf
    base_path = /home/fastdfs/client
    tracker_server = 172.17.0.115:22122
    http.tracker_server_port = 8180 
    

    上传测试:

    [root@node5-vm10 fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /mnt/test.txt
    group1/M00/00/00/rBEAc16Hf5iAPXaNAAAAGWIeu9w946.txt
    

    返回的文件ID由group、存储目录、二级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。上边示例中:

    • 组名:group1
    • 磁盘:M00
    • 存储目录:00
    • 二级子目录:00
    • fileid: rBEAc16Hf5iAPXaNAAAAGWIeu9w946
    • 文件后缀: .txt

    下载测试:

    经过Nginx服务配置后,我们可以通过以下路径下载文件:

    http://172.17.0.115:8188/group1/M00/00/00/rBEAc16Hf5iAPXaNAAAAGWIeu9w946.txt
    

    3.8 FastDFS命令

    • fdfs_upload_file:

      Usage: fdfs_upload_file [storage_ip:port][store_path_index]

      作用: 用于上传文件,用法为 fdfs_upload_file + 配置文件 + 文件

    • fdfs_download_file

      Usage: fdfs_download_file [local_filename][ ]

      用于下载文件,用法为 fdfs_download_file + 配置文件 + 文件

    • fdfs_file_info

      Usage: fdfs_file_info

      用于查看文件信息,用法为 fdfs_file_info + 配置文件 + 文件

    • fdfs_delete_file

      Usage: fdfs_delete_file

      用于删除文件,用法为 fdfs_delete_file + 配置文件 + 文件

    • fdfs_monitor

      Usage: fdfs_monitor [-h ][list|delete|set_trunk_server [storage_id]]

      用于查看集群信息,用法为 fdfs_monitor + 配置文件

      [root@node5-vm10 ~]# fdfs_monitor /etc/fdfs/storage.conf