• Centos7 单节点安装 FastDFS + FastDHT服务


    Centos7 单节点安装 FastDFS + FastDHT服务

    1、安装gcc(编译时需要)

    FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc

     yum install -y gcc gcc-c++

    2、安装libevent(运行时需求)

    若安装了桌面图形界面,就不需要安装;FastDFS依赖libevent库;

     yum -y install libevent libevent-devel

    3、安装libfastcommon 并优化tcp

      libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

    (1)下载

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

    (2)切换到目录

    cd /usr/local/libfastcommon

    (3)编译安装

    ./make.sh           #编译

    ./make.sh install   #安装

    安装后的截图:

     

    (4)优化一下内核

    vim /etc/sysctl.conf

    net.ipv4.tcp_syncookies  = 1
    
    net.ipv4.tcp_tw_reuse = 1
    
    net.ipv4.tcp_tw_recycle =  1
    
    net.ipv4.tcp_fin_timeout = 30

    sysctl -p

     4、安装FastDFS

    (1)上传 FastDFS_v5.08.tar.gz 到 centos 上;

     (2)将 FastDFS_v5.08.tar.gz 解压至/usr/local/下

     tar xzvf FastDFS_v5.08.tar.gz -C /usr/local/

     (3)切换目录到: /usr/local/FastDFS/ 下,编译和安装;

     cd /usr/local/FastDFS/

    ./make.sh && ./make.sh install  #编译之后接着进行安装

    安装后的截图:

     

    (4)安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下;

    cp /usr/local/FastDFS/conf/* /etc/fdfs/

     

    5、配置和启动tracker

    (1)切换目录到: /etc/fdfs/ 目录下;

     (2)拷贝一份新的tracker配置文件

     cp tracker.conf.sample tracker.conf

     (3)修改tracker.conf 配置文件 

    vim tracker.conf

    base_path=/fastdfs/fdfs_tracker/
    
    port=22122  #侦听端口
    
    http.server_port=80  #配置http端口

    (4)创建 /fastdfs/fdfs_tracker/ 目录

     mkdir -p /fastdfs/fdfs_tracker/

     (5)启动tracker,运行如下命令:

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

     注意:在 /fastdfs/fdfs_tracker/ 目录下生成两个目录, 一个是数据,一个是日志;

    6、配置和启动storage

     (1)切换目录到: /etc/fdfs/ 目录下;

     (2)拷贝一份新的storage配置文件

     cp storage.conf.sample storage.conf

     (3)修改storage.conf ;  

     vim storage.conf

    group_name=group1
    
    base_path=/fastdfs/fdfs_storage 
    
    store_path_count=1   # 1个存储目录
    
    #store存放文件的位置(store_path)
    
    store_path0=/fastdfs/fdfs_storage/fdfs_storage_0   #一个目录对应一块硬盘
    
    #如果有多个挂载磁盘则定义多个store_path,如下
    
    #store_path1=/fastdfs/fdfs_storage/fdfs_storage_1
    
    #store_path2=/fastdfs/fdfs_storage/fdfs_storage_2
    
    #配置tracker服务器:IP
    
    tracker_server=192.168.1.245:22122
    
    #如果有多个则配置多个tracker
    
    #tracker_server=192.168.101.4:22122
    
    #侦听端口
    
    port=23000
    
    #配置http端口
    
    http.server_port=8888

      (4)创建 /fastdfs/fdfs_storage/fdfs_storage_0目录

      mkdir -p /fastdfs/fdfs_storage/fdfs_storage_0

     (5)启动storage, 运行命令如下:

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

    ls /fastdfs/fdfs_storage/fdfs_storage_0

     显示目录如下:

     

    7、使用FastDFS自带工具测试

    (1)切换目录到 /etc/fdfs/ 目录下;

     (2)拷贝一份新的client配置文件

     cp client.conf.sample client.conf

     (3)修改client.conf ; 

     vim client.conf,

    base_path=/fastdfs/fdfs_client
    
    http.tracker_server_port=80
    
    tracker_server=192.168.1.245:22122
    
    #与tracker配置的http.server_port端口一致,保存路径生成的URL就是80端口访问
    
    #注意:若tracker有多个,可以配置多个,如下:
    
    #tracker_server=......
    
    #tracker_server=......

    (4)拷贝一张图片 fdfs_test.png 到Centos服务器上的 /tmp 目录下;

     (5)进行测试,运行如下:(运行测试程序,读取/etc/fdfs/client.conf 文件,上传/tmp目录下的fdfs_test.png文件)

     /usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/fdfs_test.png

     

    以上图中的文件地址:

    http://192.168.1.245/group1/M00/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png

    对应storage服务器上的

    /fastdfs/fdfs_storage/fdfs_storage_0/data/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png文件;

     注:由于现在还没有和nginx整合无法使用http下载。

     (6)防火墙开启相应的端口

    firewall-cmd --zone=public --add-port=80/tcp --permanent

    firewall-cmd --zone=public --add-port=8080/tcp --permanent

    firewall-cmd --zone=public --add-port=22122/tcp –permanent

    firewall-cmd --zone=public --add-port=23000/tcp –permanent

    firewall-cmd --zone=public --add-port={80/tcp,8080/tcp,22122/tcp,23000/tcp} --permanent  # 一样的

    firewall-cmd --reload

    firewall-cmd --list-all

     8、FastDFS 和nginx整合

      8.1 在tracker上安装 nginx

      在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker可以不配置nginx。

      一个tracker对应多个storage,通过nginx对storage负载均衡;

      8.2 在storage 上安装nginx

      (1)上传 fastdfs-nginx-module.tar.gz 到Centos服务器上;

     (2)解压 fastdfs-nginx-module.tar.gz 到 /usr/local目录下;

     tar -xzf fastdfs-nginx-module.tar.gz -C /usr/local/

     (3)切换目录到: /usr/local/fastdfs-nginx-module/src/ 目录下

     cd /usr/local/fastdfs-nginx-module/src/

     (4)修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/

    默认就都是/usr路径了,所以此处不用更改。

     (5)将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下

     cp mod_fastdfs.conf /etc/fdfs/

     (6)并修改 /etc/fdfs/mod_fastdfs.conf 的内容;

     vi /etc/fdfs/mod_fastdfs.conf

    base_path=/fastdfs/fdfs_nginx
    
    tracker_server=192.168.1.245:22122
    
    #tracker_server=192.168.172.20:22122 #(多个tracker配置多行)
    
    #tracker_server=tracker:22122
    
    url_have_group_name=true        #url中包含group名称
    
    store_path_count=1
    
    #指定文件存储路径(上面配置的store路径)
    
    store_path0=/fastdfs/fdfs_storage/fdfs_storage_0

    (7)将libfdfsclient.so拷贝至/usr/lib下(默认就在,不用修改)

     cp /usr/lib64/libfdfsclient.so /usr/lib/

     (8)创建目录

     mkdir -p /var/temp/nginx/client

    mkdir -p /fastdfs/fdfs_nginx

    8.3 Nginx的安装

     (1)上传 nginx-1.10.2.tar.gz 到Centos服务器上;

     (2)解压 nginx-1.10.2.tar.gz 到 /usr/local目录下;

     tar -zxvf nginx-1.10.2.tar.gz -C /usr/local/src

     (3)安装nginx的依赖库

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

     (4)进入nginx解压的目录下:

     cd /usr/local/src/nginx-1.10.2/

     (5)加入模块命令配置

    ./configure

    --prefix=/usr/local/nginx

    --pid-path=/var/run/nginx/nginx.pid

    --lock-path=/var/lock/nginx.lock

    --error-log-path=/var/log/nginx/error.log

    --http-log-path=/var/log/nginx/access.log

    --with-http_gzip_static_module

    --http-client-body-temp-path=/var/temp/nginx/client

    --http-proxy-temp-path=/var/temp/nginx/proxy

    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi

    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi

    --http-scgi-temp-path=/var/temp/nginx/scgi

    --add-module=/usr/local/fastdfs-nginx-module/src

     

    注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录;

     (6)编译并安装

     make && make install

     安装成功后查看生成的目录,如下所示:

    ls /usr/local/nginx/

     

    删除解压包:

    rm -rf /usr/local/src/nginx-1.10.2/

     (7)拷贝配置文件到 /etc/fdfs 下;

     cd /usr/local/FastDFS/conf

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

     (8)修改nginx配置文件

     mkdir -p /usr/local/nginx/logs # 创建logs目录

    cd /usr/local/nginx/conf/

     vim nginx.conf

    ##-----------------------------------------
    
    user  nobody;
    
    worker_processes  2;
    
     
    
    pid  /var/run/nginx/nginx.pid;
    
     
    
    worker_rlimit_nofile 65535;
    
     
    
    events {
    
        worker_connections  65535;
    
    }
    
    http {
    
        include       mime.types;
    
        default_type  application/octet-stream;
    
        log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
    
                   '$status $body_bytes_sent "$http_referer" '
    
                   '"$http_user_agent" $http_x_forwarded_for';
    
     
    
        access_log  /var/log/nginx/access.log  main;
    
        error_log  /var/log/nginx/error.log  error;
    
     
    
        server_names_hash_bucket_size 128;
    
        client_header_buffer_size 32k;
    
        large_client_header_buffers 4 32k;
    
        client_max_body_size 8m;
    
     
    
        sendfile        on;
    
        tcp_nopush      on;
    
        tcp_nodelay     on;
    
        keepalive_timeout  65;
    
     
    
        fastcgi_connect_timeout 300;
    
        fastcgi_send_timeout 300;
    
        fastcgi_read_timeout 300;
    
        fastcgi_buffer_size 64k;
    
        fastcgi_buffers 4 64k;
    
        fastcgi_busy_buffers_size 128k;
    
        fastcgi_temp_file_write_size 128k;
    
     
    
        gzip on;
    
        gzip_min_length 1k;
    
        gzip_buffers 4 16k;
    
        gzip_http_version 1.0;
    
        gzip_comp_level 2;
    
        gzip_types text/plain application/x-javascript text/css application/xml;
    
        gzip_vary on;
    
     
    
        server {
    
            listen       80;
    
            server_name  192.168.1.245;
    
            location / {
    
                root   html;
    
                index  index.html index.htm;
    
            }
    
     
    
            location /group1/M00/ {
    
                root /fastdfs/fdfs_storage/fdfs_storage_0;
    
                ngx_fastdfs_module;
    
            }
    
     
    
            error_page   500 502 503 504  /50x.html;
    
            location = /50x.html {
    
                root   html;
    
            }
    
        }
    
    }
    
     
    
     
    
    ##-----------------------------------------

     说明:

    (a.) server_name指定本机ip;

    (b.) location /group1/M00/:

    group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,

    对应store_path0=/home/fdfs_storage,如果FastDFS定义store_path1,这里就是M01

    -----------------------------------------

    (9)配置打开文件数大小

     vim /etc/security/limits.conf

     # End of file
    
    *               soft    nofile          100000
    
    *               hard    nofile          100000
    
    *               soft    nproc           100000
    
    *               hard    nproc           100000

    ulimit -n 100000   #即时生效

      (10)nginx的启动

     cd /usr/local/nginx/sbin/

    ./nginx

     查询nginx进程

      

    (11) fastdfs 和 nginx 服务的开机自启动:

     chmod +x /etc/rc.local

     #start fastdfs
    
    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
    
    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
    
    /usr/local/nginx/sbin/nginx

    exit 0

    9、在浏览器中访问上传到fastDFS的图片

    因为Centos系统有防火墙,需要先开放相应的端口,才可以在浏览器中访问;

     http://192.168.1.245/group1/M00/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png

     

    10、整合FastDHT服务

    (1)简介:

    由于FastDFS本身不能对重复上传的文件进行去重,而FastDHT可以做到去重。FastDHT是一个高性能的分布式哈希系统,它是基于键值对存储的,而且它需要依赖于Berkeley DB作为数据存储的媒介,同时需要依赖于libfastcommon。

    (2)下载FastDHT_v1.23.tar.gz,下载地址:

    https://code.google.com/archive/p/fastdht/downloads

    FastDHT:FastDHT_v1.23.tar.gz

    (3)下载Berkeley DB,下载地址:

    http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html 

    Berkeley DB:db-18.1.25.tar.gz

    (4)安装Berkeley DB,将db-18.1.25.tar.gz上传到/usr/local/src目录下。

    (5)解压安装包

    tar -xzf db-18.1.25.tar.gz -C /usr/local/src/

    (6)进入build_unix目录,必须是这个目录

    cd /usr/local/src/db-18.1.25/build_unix

    (7)执行命令(一定要是进入上面的目录后,使用相对路径执行命令):

    ../dist/configure --prefix=/usr/local/db-18.1.25

    make  &&  make install

    rm -rf /usr/local/src/db-18.1.25/

    ls /usr/local/db-18.1.25/

    (8)DB安装完毕,会在/usr/local目录下生成目录db-18.1.25

     (9)安装FastDHT,将FastDHT_v1.23.tar.gz拷贝到/usr/local目录下,解压:

    cd /usr/local

    tar -xzf FastDHT_v1.23.tar.gz

    mv FastDHT fastdht

     (10)进入fastdht目录,修改make.sh文件,修改:

    CFLAGS=’-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-18.1.25/include/ -L/usr/local/db-18.1.25/lib/

    注:标红部分为要加入的内容。

    (11)进入fastdht目录,编译安装:

    编译前,一定要确认是否已经安装了libevent、libevent-devel 和libfastcommon依赖安装包。

    yum -y install libevent libevent-devel

    libfastcommon  # 编译安装

     cd /usr/local/fastdht/

    ./make.sh

    ./make.sh install

     注:依赖包,一般在安装FastDFS的时候就安装了,但libevent-devel这个依赖包在大部分博客文章中未提到需要安装,如果不安装这个包,编译百分百过不去,是个大坑。

     安装成功后fastdht被安装在/etc/fdht目录下,生成3个配置文件

    cd /etc/fdht/  && ls

     

    (12)配置FastDHT,创建fastdht目录:

    mkdir -p /fastdfs/fastdht

    (13)修改/etc/fdht/目录下的配置文件fdht_client.conf,依次修改如下内容:

    vim /etc/fdht/fdht_client.conf

    base_path=/fastdfs/fastdht  #(该目录必须是已经存在的)
    
    keep_alive=1
    
    #include /etc/fdht/fdht_servers.conf   ##(本行前有#表示打开,如果想关闭此选项,则应该为##开头)

    (14)修改/etc/fdht/目录下的配置文件fdht_servers.conf,依次修改如下内容:

    vim /etc/fdht/fdht_servers.conf

    group_count = 1
    
    group0 = 192.168.1.245:11411

    (15)修改/etc/fdht/目录下的fdhtd.conf文件,依次修改如下内容:

    vim /etc/fdht/fdhtd.conf

    port=11411
    
    bash_path= /fastdfs/fastdht #(该目录必须是已经存在的,前面已经创建过了)
    
    #include /etc/fdht/fdht_servers.conf  ##(本行前有#表示打开,如果想关闭此选项,则应该为##开头)

    (16)配置/etc/fdfs/目录下的storage.conf文件,依次修改如下内容:

    vim /etc/fdfs/storage.conf

    #是否检测上传文件已经存在。如果已经存在,则建立一个索引链接以节省磁盘空间
    
    check_file_duplicate=1
    
    #当上个参数设定为1时 , 在FastDHT中的命名空间
    
    key_namespace=FastDFS
    
    #长连接配置选项,如果为0则为短连接 1为长连接
    
    keep_alive=1
    
    #此处特别需要注意配置,## 开头才是注释
    
    #include /etc/fdht/fdht_servers.conf

    (17)执行如下命令:

    cp /usr/local/db-18.1.25/lib/libdb-18.so /usr/lib/    # 库文件

    cp /usr/local/db-18.1.25/lib/libdb-18.so /usr/lib64/  # 库文件

    #开放端口11411

    firewall-cmd --zone=public --add-port=11411/tcp --permanent

    firewall-cmd --reload

    firewall-cmd --list-all

    (18)启动FastDHT:

    fdhtd /etc/fdht/fdhtd.conf restart

    启动报错(未加载库文件):

    解决办法:

    ldconfig  # 重新加载

    ldd /usr/local/bin/fdhtd

    #重新启动服务,成功。

    fdhtd /etc/fdht/fdhtd.conf restart

    (20)重启一下fdfs_trackerd和fdfs_storaged服务,便于后面的测试:

    如果启动服务报错(这是个大坑,能查到的资料有限):

     

    解决办法:

    因为是库文件受到损坏导致的,所以需要把库文件删除后再重新安装一遍。

    rm -rf /usr/lib64/libfastcommon.so

    rm -rf /usr/lib/libfastcommon.so

    rm -rf /usr/local/lib/libfastcommon.so.1

    rm -rf /usr/local/libfastcommon

    然后重新解压安装一次libfastcommon依赖包,再重启服务就不报错了。

    (21)测试多次上传同一个文件,通过客户端命令测试上传:

    cd /tmp

    echo “This is a test” > /tmp/fast-test

    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /tmp/fast-test #这条命令才会去重

    注:/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/fast-test #这条命令是不会去重的。

    (22)上传成功后返回路径,查看storage存储对应存储路径,发现返回的为一个软链接,之后每次重复上传的fast-test都是返回一个指向第一次上传的文件的软链接。也就保证了文件只保存了一份。

    需要说明的是,FastDFS不会返回原始文件的索引,返回的全部都是软链接,当所有的软链接都被删除的时候,原始文件也会从FastDFS中被删除。

     (23)  fastdfs 、fdhtd和 nginx 服务的开机自启动:

    chmod +x /etc/rc.local

    #start fastdfs
    
    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
    
    /usr/local/bin/fdhtd   /etc/fdht/fdhtd.conf   restart
    
    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
    
    /usr/local/nginx/sbin/nginx
    
     
    exit 0

    至此,搭建配置、验证完毕。

  • 相关阅读:
    编译不通过:提示XXXX不是类或命名空间名 的解决办法
    nginx应用总结(2)--突破高并发的性能优化
    nginx应用总结(1)--基础认识和应用配置
    springboot内置tomcat验证授权回调页面域名
    MySQL实现类似Oracle中的nextval和currval
    Notepad++中删除连续的任意n行
    Spring Boot系列二 Spring @Async异步线程池用法总结
    Spring线程池配置
    Spring异步方法注解 @Async
    异步任务spring @Async注解源码解析
  • 原文地址:https://www.cnblogs.com/eos666/p/9830630.html
Copyright © 2020-2023  润新知