CentOS7 搭建 godfs 集群

使用 go-fastdfs 快速部署私有分布式存储集群服务器

部署

godfs

集群部署时由于 peer_id 仅为 0~9 的单字符,集群服务器不建议过多,按照官方建议使用3台服务器即可。

  1. 在服务器上创建部署文件夹

    shell
    1
    2
    mkdir -p /data/go-fastdfs
    cd /data/go-fastdfs
  2. 下载最新的 fileserver

    curl
    1
    curl -o /data/go-fastdfs/fileserver https://github.com/sjqzhang/go-fastdfs/releases/download/v1.3.9/fileserver
  3. 先启动一次,自动创建配置文件

    shell
    1
    2
    chmod 755 fileserver
    ./fileserver
  4. 修改配置文件

    shell
    1
    vim conf/cfg.json

    配置文件有中文注释,参考注释即可。

    需修改的地方有:

    • peers:添加集群中其他 godfs 的 IP 与端口
    • group:修改 group 名为与项目更贴近的名字或者更有辨识度的名字
    • default_scene:场景名可以修改为项目名,也可以保持默认
    • enable_merge_small_file:修改为 true,运行合并小文件

      生产环境推荐:

    • enable_web_upload: 修改为 false,禁用 web 上传文件

    • show_dir:修改为 false,禁用目录显示
    • auto_repair:修改为 false,关闭自动修复功能
    • enable_distinct_file:修改为 false,关闭去重功能,减少系统 I/O 支出
  5. 添加 systemd 脚本

    shell
    1
    vim /usr/lib/systemd/system/godfs.service

    内容如下:

    /usr/lib/systemd/system/godfs.service
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [Unit]
    Description=gofastdfs service
    After=syslog.target network.target

    [Service]
    WorkingDirectory=/data/go-fastdfs
    ExecStart=/data/go-fastdfs/fileserver
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    Restart=always

    [Install]
    WantedBy=multi-user.target

    保存后重载配置文件

    shell
    1
    systemctl daemon-reload
  6. 启动 godfs

    shell
    1
    2
    systemctl start godfs
    systemctl enable godfs
  7. 开放防火墙端口中 godfs 对应的端口

    shell
    1
    2
    firewall-cmd --zone=public --permanent --add-port=20000/tcp
    firewall-cmd --reload

Nginx

Nginx 仅安装一台,或者每台服务器上均部署,然后在再上面部署一层 Keepalived 提供高可用架构。

  1. 添加 Nginx 源

    shell
    1
    rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  2. 安装 Nginx

    shell
    1
    yum -y install nginx
  3. 启动 Nginx

    shell
    1
    2
    systemctl start nginx
    systemctl enable nginx
  4. 添加 godfs.conf 配置文件

    shell
    1
    vim /etc/nginx/conf.d/godfs.conf

    内容如下,其中 filserver 为修改后的 group

    /etc/nginx/conf.d/godfs.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    upstream godfs-group1 {
    server 172.16.123.131:20000;
    server 172.16.123.156:20000;
    server 172.16.123.160:20000;
    ip_hash;
    }

    server {
    listen 8080;

    server_name _;

    # 允许内网访问的 IP 段
    allow 172.16.0.0/16;
    deny all;

    proxy_redirect ~/(\w+)/big/upload/(.*) /$1/big/upload/$2; #继点续传一定要设置(注意)
    client_max_body_size 64M;
    keepalive_timeout 65;

    if ( $request_uri ~ /godfs/fileserver ) {
    # 注意group会随组的前缀改变而改变
    rewrite ^/godfs/(.*)$ /$1 last;
    }

    location ~ /fileserver(\d) {
    client_max_body_size 0;
    #统一在url前增加godfs,以便统一出入口。
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://godfs-group$1;
    }
    location ~ /godfs/upload {
    client_max_body_size 0;
    #这是一个横向扩展配置,前期可能只有一个集群group1,当group1满后,只需将上传指向group2,
    #也就是将rewrite , proxy_pass 中的group1改为group2即可。
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    rewrite ^/godfs/upload /filerserver1/upload break;
    proxy_pass http://godfs-group1;
    }
    location ~ /godfs/big/upload {
    client_max_body_size 0;
    #以上上类似。
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    rewrite ^/godfs/upload /fileserver1/big/upload break;
    proxy_pass http://godfs-group1;
    }
    }

    保存后重载 nginx 配置文件

    shell
    1
    2
    nginx -t
    nginx -s reload

测试

web 上传

  1. 浏览器打开 http://172.16.123.131:8080/godfs/fileserver1/
  2. 选择文件上传
  3. 在每个 godfs 节点服务器的 files 文件夹中查看返回值的 path 文件是否存在。也可以使用命令 tree files 查看整个文件目录的结构。

API 上传

  1. 通过 postman 或者其他工具进行 POST 请求

  2. POST 请求 http://172.16.123.131:8080/godfs/fileserver1/upload

参考文章:

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...