• 分布式存储FastDFS搭建


    一、FastDFS分布式系统架构

    FastDFS:是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相册网站、视频网站等。

    FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。和现有的类Google FS分布式文件系统相比,FastDFS的架构和设计理念有其独到之处,主要体现在轻量级、分组方式和对等结构三个方面。

    FastDFS架构图

    FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

    img

    FastDFS模块介绍
    (1) tracker server:跟踪服务器,用来调度来自客户端的请求,且在内存中记录所有存储组和存储服务器的信息状态。
    (2) storage server:存储服务器,用来存储文件(data)和文件属性(metadata)。
    (3) client:客户端,业务请求发起方,通过专用接口基于TCP协议与tracker server和storage server进行交互。
    (4) group:组,也可称为卷,同组内上的文件是完全相同的。
    (5) 文件标识:包括两部分,组名(group)和文件名(含路径)
    (6) 文件相关属性:键值对(Key Value Pair)方式
    (7) 文件名:与原文件名并不相同。由storage server根据特定信息生成,并且可逆,文件名包含:源存储服务器的IP地址、文件创建时间戳、文件大小、随机数和文件扩展名等。

    二、前期准备

    2.1、主机规划

    IP 描述 分组
    192.168.80.7 跟踪服务器1&分布式存储服务器1&web负载均衡服务器 group1
    192.168.80.17 跟踪服务器2&分布式存储服务器2&web负载均衡服务器 group2
    192.168.80.27 跟踪服务器3&分布式存储服务器3&web负载均衡服务器 group3

    2.2、关闭防火墙

    # 停止
    systemctl stop firewalld.service
    # 禁用
    systemctl disable firewalld.service
    

    2.3、关闭SELinux

    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
    

    2.4、设置时间同步

    # 设置时区
    timedatectl set-timezone Asia/Shanghai
    
    # 同步时间
    yum install -y ntpdate
    ntpdate time1.aliyun.com
    

    三、部署FastDFS

    3.1、安装libfastcommon

    #安装依赖包
    yum install -y make cmake gcc gcc-c++
    
    #创建软件包存放目录
    mkdir -pv /usr/local/soft/package
    cd /usr/local/soft/package
    
    #下载libfastcommon
    wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
    
    #解压并安装
    tar -xf V1.0.43.tar.gz
    cd libfastcommon-1.0.43
    ./make.sh
    ./make.sh install
    

    3.2、安装FastDFS

    #下载安装包
    cd /usr/local/soft/package
    wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
    
    #解压并安装
    tar -xf V6.06.tar.gz
    cd fastdfs-6.06
    ./make.sh
    ./make.sh install
    

    3.3、配置跟踪器Tracker

    (1) 复制配置文件

    cd /etc/fdfs
    cp tracker.conf.sample tracker.conf
    

    (2) 修改配置文件

    vim /etc/fdfs/tracker.conf
    #注意以下项目的修改
    disabled=false           //启用配置文件
    port=22122               //tracker 的端口号,一般采用 22122 这个默认端口
    base_path = /usr/local/soft/fastdfs/tracker	//tracker 的数据文件和日志目录
    store_lookup=2           //上传文件采取组选择方式,0.轮巡、1.指定组、2.选择最大空闲空间的组
    

    (3) 创建数据目录

    mkdir -p /usr/local/soft/fastdfs/tracker
    

    (4) 启动tracker服务

    /etc/init.d/fdfs_trackerd start
    

    (5) 设置tracker服务开机启动

    chkconfig fdfs_trackerd on
    

    3.4、配置FastDFS存储服务

    (1) 复制配置文件

    cd /etc/fdfs
    cp storage.conf.sample storage.conf
    

    (2) 修改配置文件

    vim /etc/fdfs/storage.conf
    #注意以下项目的修改
    disabled=false           //启用配置文件
    group_name = group1		//组名(按主机规划里的修改各台主机的配置)
    base_path = /usr/local/soft/fastdfs/storage		//设置storage的数据和日志目录
    store_path_count = 1	//存储路径个数,需要和 store_path 个数匹配
    store_path0=/usr/local/soft/fastdfs/storage     //存储路径
    tracker_server=192.168.80.7:22122     //tracker 服务器的 IP 地址和端口
    tracker_server=192.168.80.17:22122    //多个 tracker 直接添加多条配置
    tracker_server=192.168.80.27:22122    //多个 tracker 直接添加多条配置
    http.server_port=8088                 //设置 http 端口号
    

    (3) 创建数据目录

    mkdir -p /usr/local/soft/fastdfs/storage
    

    (4) 启动storage服务

    /etc/init.d/fdfs_storaged start
    

    (5) 设置storage服务开机启动

    chkconfig fdfs_storaged on
    

    (6) 查看集群信息

    #所有storage节点都启动之后,可以在任一storage节点上使用如下命令查看集群信息
    /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
    

    3.5、配置客户端服务

    (1) 复制配置文件

    cd /etc/fdfs
    cp client.conf.sample client.conf
    

    (2) 修改配置文件

    vim /etc/fdfs/client.conf
    #注意以下项目的修改
    base_path = /usr/local/soft/fastdfs/client	//设置client的数据和日志目录
    tracker_server=192.168.80.7:22122     //tracker服务器的IP地址和端口
    tracker_server=192.168.80.17:22122    //多个 tracker 直接添加多条配置
    tracker_server=192.168.80.27:22122    //多个 tracker 直接添加多条配置
    

    (3) 创建数据目录

    mkdir -p /usr/local/soft/fastdfs/client
    

    (4) 测试上传

    #新建一个文件
    touch /usr/local/soft/package/a.txt
    
    #使用FastDFS上传命令,将测试文件上传到FastDFS存储里
    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/soft/package/a.txt 
    ##如能返回以下文件ID号,说明上传成功
    group1/M00/00/00/wKhQB2B2giWABJqWAAAAAAAAAAA166.txt
    
    #删除
    /usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKhQB2B2giWABJqWAAAAAAAAAAA166.txt
    

    3.6、安装fastdfs-nginx-module

    此部分安装在各个存储节点上,需要通过nginx安装。

    (1) 安装依赖包

    yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
    

    (2) 安装nginx和fastdfs-nginx-module

    #下载安装包
    cd /usr/local/soft/package
    wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
    wget http://nginx.org/download/nginx-1.18.0.tar.gz
    
    #解压
    tar -xf V1.22.tar.gz
    tar -xf nginx-1.18.0.tar.gz
    
    #新建nginx用户
    useradd -r -s /sbin/nologin nginx
    
    #将fastdfs-nginx-module拷贝至nginx目录
    mkdir /usr/local/soft/package/nginx-1.18.0/add_module
    cp -r fastdfs-nginx-module-1.22 nginx-1.18.0/add_module/fastdfs-nginx-module
    
    #编译nginx
    cd nginx-1.18.0
    ./configure 
    --user=nginx 
    --group=nginx 
    --prefix=/usr/local/soft/nginx 
    --with-http_ssl_module 
    --with-http_stub_status_module 
    --with-stream 
    --add-module=/usr/local/soft/package/nginx-1.18.0/add_module/fastdfs-nginx-module/src/
    
    #安装nginx
    make && make install
    
    #复制fastdfs-nginx-module源码中的配置文件到/etc/fdfs目录,并修改
    cp /usr/local/soft/package/nginx-1.18.0/add_module/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
    vim /etc/fdfs/mod_fastdfs.conf
    ##注意修改以下内容
    tracker_server=192.168.80.7:22122	//tracker 服务器的 IP 地址和端口
    tracker_server=192.168.80.17:22122	//多个 tracker 直接添加多条配置
    tracker_server=192.168.80.27:22122	//多个 tracker 直接添加多条配置	
    group_name=group1	//组名(按主机规划里的修改各台主机的配置)
    url_have_group_name = true
    store_path0=/usr/local/soft/fastdfs/storage
    group_count = 3
    
    [group1]
    group_name=group1
    storage_server_port=23000
    store_path_count=1
    store_path0=/usr/local/soft/fastdfs/storage
    
    [group2]
    group_name=group2
    storage_server_port=23000
    store_path_count=1
    store_path0=/usr/local/soft/fastdfs/storage
    
    [group3]
    group_name=group3
    storage_server_port=23000
    store_path_count=1
    store_path0=/usr/local/soft/fastdfs/storage
    
    #复制FastDFS的部分配置文件到/etc/fdfs目录
    cp /usr/local/soft/package/fastdfs-6.06/conf/http.conf /etc/fdfs
    cp /usr/local/soft/package/fastdfs-6.06/conf/mime.types /etc/fdfs
    

    (3) 修改nginx配置

    cd /usr/local/soft/nginx/conf
    vim nginx.conf
    #可参考以下配置
    user nginx;
    worker_processes  2;
    
    error_log  /usr/local/soft/nginx/logs/error.log;
    pid /usr/local/soft/nginx/logs/nginx.pid;
    worker_rlimit_nofile 65535;
    
    events
    {
        use epoll;
        multi_accept on;
        worker_connections 65530;
    }
    
    http {
    
        include       mime.types;
        default_type  application/octet-stream;
    
    
        log_format main
                    'remote_addr:"$remote_addr"|'
                    'remote_user:"$remote_user"|'
                    'time_local:[$time_local]|'
                    'request:[$request]|'
                    'status:"$status"|'
                    'body_bytes_sent:"$body_bytes_sent"|' 
                    'http_referer:"$http_referer"|'
                    'http_user_agent:"$http_user_agent"|'
                    'request_time:"$request_time"|'
                    'request_body:"$request_body"|'
                    'http_host:"$http_host"|'
                    'request_length:"$request_length"|'
                    'upstream_status:"$upstream_status"|'
                    'upstream_addr:"$upstream_addr"|'
                    'upstream_response_time:"$upstream_response_time"'
                    ;
    
        map $time_iso8601 $logdate {
          '~^(?<ymd>d{4}-d{2}-d{2})' $ymd;
          default    'date-not-found';
        }
    
        access_log  logs/access-$logdate.log  main;
        charset utf-8;
        server_tokens off;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 40s;
        client_header_timeout 10;
        client_body_timeout 10;
        client_header_buffer_size 4k;
        large_client_header_buffers 4 32k;
        server_names_hash_bucket_size 128;
        client_max_body_size 100m;
        send_timeout 10;
        reset_timedout_connection on;
    
        open_file_cache max=102400 inactive=20s;
        open_file_cache_min_uses 1;
        open_file_cache_valid 30s;
        open_log_file_cache max=10;    
    
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 128k;      
        fastcgi_buffers 256 128k;
        fastcgi_busy_buffers_size 256k;    
        fastcgi_temp_file_write_size 256k;
        fastcgi_intercept_errors on; 
    
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
    
        proxy_buffering on;
        proxy_buffer_size 128k;        
        proxy_buffers 256 128k;
        proxy_busy_buffers_size 256k;    
        proxy_temp_file_write_size 256k; 
    
        gzip  on;
        gzip_min_length     256;
        gzip_buffers        4 16k;
        gzip_http_version   1.1;
        gzip_vary on;
        gzip_comp_level 5;
        gzip_disable "MSIE [1-6].";
        gzip_proxied any;
        gzip_types
            application/atom+xml
            application/javascript
            application/json
            application/ld+json
            application/manifest+json
            application/rss+xml
            application/vnd.geo+json
            application/vnd.ms-fontobject
            application/x-font-ttf
            application/x-web-app-manifest+json
            application/xhtml+xml
            application/xml
            font/opentype
            image/bmp
            image/svg+xml
            image/x-icon
            text/cache-manifest
            text/css
            text/plain
            text/vcard
            text/vnd.rim.location.xloc
            text/vtt
            text/x-component
            text/x-cross-domain-policy;
    
    
    ######################################
    #fastdfs
        server {
            listen       8088;    ## 该端口为storage.conf中的http.server_port相同
            server_name  localhost;
            location ~/group[0-9]/ {
                ngx_fastdfs_module;
            }  
        access_log /usr/local/soft/nginx/logs/storge.log;
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
            } 
    
       }
    
    }
    

    (4) 启动nginx

    #启动
    /usr/local/soft/nginx/sbin/nginx
    #停止
    /usr/local/soft/nginx/sbin/nginx -s stop
    #重载
    /usr/local/soft/nginx/sbin/nginx -s reload
    

    (5) 测试

    #上传一张照片至服务器,如a.png
    
    #使用FastDFS上传命令,将图片上传到FastDFS存储里
    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/soft/package/a.png
    ##如能返回以下文件ID号,说明上传成功
    group1/M00/00/00/wKhQB2B2nayAdY7zAAAUBwdbV-o889.png
    
    #然后通过浏览器访问图片url
    http://192.168.80.7:8088/group1/M00/00/00/wKhQB2B2nayAdY7zAAAUBwdbV-o889.png
    

    3.7、安装Nginx负载均衡

    此部分安装在各个跟踪节点上,即tracker节点上,主要为了提供http访问的反向代理、负载均衡以及缓存服务,如果跟踪节点与存储节点安装在一台服务器上,刚在3.6的基础上配置nginx即可。

    以下为跟踪节点单独配置时的步骤:

    (1) 安装依赖包

    yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
    

    (2) 安装nginx

    #下载安装包
    cd /usr/local/soft/package
    wget http://nginx.org/download/nginx-1.18.0.tar.gz
    
    #解压
    tar -xf nginx-1.18.0.tar.gz
    
    #新建nginx用户
    useradd -r -s /sbin/nologin nginx
    
    #编译nginx
    ./configure 
    --user=nginx 
    --group=nginx 
    --prefix=/usr/local/soft/nginx 
    --with-http_ssl_module 
    --with-http_stub_status_module 
    --with-stream 
    
    #安装nginx
    make && make install
    

    (3) 配置nginx

    cd /usr/local/soft/nginx/conf
    vim nginx.conf
    #部分配置省略,以下为负载均衡配置,配置在http{}中
    upstream fdfs_group1 {
        server 192.168.10.202:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
     
    upstream fdfs_group2 {
        server 192.168.10.203:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
     
    upstream fdfs_group3 {
        server 192.168.10.204:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
    
    server{
        listen 8000;
        server_name localhost;
     
         access_log  /usr/local/soft/nginx/logs/lb_access.log main;
         error_log   /usr/local/soft/nginx/logs/storge.log/lb_error.log;
     
        location /group1/M00 {
           proxy_pass http://fdfs_group1;
         }
     
        location /group2/M00 {
           proxy_pass http://fdfs_group2;
         }
     
        location /group3/M00 {
           proxy_pass http://fdfs_group3;
         }
    

    (4) 启动nginx

    #启动
    /usr/local/soft/nginx/sbin/nginx
    #停止
    /usr/local/soft/nginx/sbin/nginx -s stop
    #重载
    /usr/local/soft/nginx/sbin/nginx -s reload
    
  • 相关阅读:
    leetcode刷题-26-删除有序数组重复项
    leetcode刷题-27-移除元素
    leetcode刷题-54-螺旋矩阵
    leetcode刷题-70-爬楼梯
    leetcode刷题-442-数组中重复的数据
    leetcode刷题-945-使数组唯一的最小增量
    leetcode刷题-11-盛最多水的容器
    random.choice函数
    Rating prediction and Ranking prediction
    Dev-c++在windows环境下无法debug(调试)的解决方案
  • 原文地址:https://www.cnblogs.com/hovin/p/14830633.html
Copyright © 2020-2023  润新知