Skip to content

1. 安装并启动

go-fastdfs为了高可用,限制了一个IP只能对应一个服务(能不能在一台机器部置多个服务端?);我们可以使用Docker安装的方式,同时指定容器的IP的方式,来启动多个 go-fastdfs 服务

启动两个 go-fastdfs 服务,内网IP设置分别设置为 10.88.0.310.88.0.5

$ docker run --name fastdfs1 --network bridge --ip 10.88.0.3 -d -v /opt/fastdfs_data1:/data -p 10001:8080 -e GO_FASTDFS_DIR=/data sjqzhang/go-fastdfs
$ docker run --name fastdfs2 --network bridge --ip 10.88.0.5 -d -v /opt/fastdfs_data2:/data -p 10002:8080 -e GO_FASTDFS_DIR=/data sjqzhang/go-fastdfs

如果不需要外部访问,可以不映射端口

$ docker run --name fastdfs1 --network bridge --ip 10.88.0.3 -d -v /opt/fastdfs_data1:/data -e GO_FASTDFS_DIR=/data sjqzhang/go-fastdfs
$ docker run --name fastdfs2 --network bridge --ip 10.88.0.5 -d -v /opt/fastdfs_data2:/data -e GO_FASTDFS_DIR=/data sjqzhang/go-fastdfs

2. 修改配置并重启

10.88.0.3 修改配置,配置文件 /opt/fastdfs_data1/conf/cfg.json,主要修改的参数:

"PeerID": "集群内唯一,请使用0-9的单字符,默认自动生成",
"peer_id": "3",
"本主机地址": "本机http地址,默认自动生成(注意端口必须与addr中的端口一致),必段为内网,自动生成不为内网请自行修改,下同",
"host": "http://10.88.0.3:8080",
"集群": "集群列表,注意为了高可用,IP必须不能是同一个,同一不会自动备份,且不能为127.0.0.1,且必须为内网IP,默认自动生成",
"peers": ["http://10.88.0.3:8080","http://10.88.0.5:8080"],

10.88.0.5 修改配置,配置文件 /opt/fastdfs_data2/conf/cfg.json,主要修改的参数:

"PeerID": "集群内唯一,请使用0-9的单字符,默认自动生成",
"peer_id": "5",
"本主机地址": "本机http地址,默认自动生成(注意端口必须与addr中的端口一致),必段为内网,自动生成不为内网请自行修改,下同",
"host": "http://10.88.0.5:8080",
"集群": "集群列表,注意为了高可用,IP必须不能是同一个,同一不会自动备份,且不能为127.0.0.1,且必须为内网IP,默认自动生成",
"peers": ["http://10.88.0.3:8080","http://10.88.0.5:8080"],

重启

$ docker restart fastdfs1 fastdfs2

3. 本地测试

浏览器打开 http://10.88.0.3:8080,选择文件上传,例如 demo-subpackages.b42a3adb.zip

上传返回结果:

{
  "data": {
    "domain": "http://10.88.0.3:8080",
    "md5": "b42a3adbf89bd645d94a2d5834720843",
    "mtime": 1597546859,
    "path": "/group1/default/20200816/11/00/4/demo-subpackages.b42a3adb.zip",
    "retcode": 0,
    "retmsg": "",
    "scene": "default",
    "scenes": "default",
    "size": 242389,
    "src": "/group1/default/20200816/11/00/4/demo-subpackages.b42a3adb.zip",
    "url": "http://10.88.0.3:8080/group1/default/20200816/11/00/4/demo-subpackages.b42a3adb.zip"
  },
  "message": "",
  "status": "ok"
}

测试 http://10.88.0.3:8080/group1/default/20200816/11/00/4/demo-subpackages.b42a3adb.ziphttp://10.88.0.5:8080/group1/default/20200816/11/00/4/demo-subpackages.b42a3adb.zip下载没问题即可。

4. nginx 单集群配置

修改nginx配置,根据需要设置好server_name和其他配置,例如映射到域名 file.izqy.top

worker_processes  1;
events {
        worker_connections  1024;
}
http {
        include       mime.types;
        default_type  application/html;
        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;
        sendfile        on;
        keepalive_timeout  65;
        client_max_body_size 0; 
        proxy_redirect ~/big/upload/(.*) /big/upload/$1;  #继点续传一定要设置(注意)
        upstream go-fastdfs {
                server 10.88.0.3:8080;
                server 10.88.0.5:8080;
                ip_hash;     #notice:very important(注意)
        }
        server {
                listen       80;
                server_name  localhost file.izqy.top;
                location / {
                    proxy_set_header Host $host; #notice:very important(注意)
                    proxy_set_header X-Real-IP $remote_addr; #notice:very important(注意)
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #notice:very important(注意)
                    proxy_pass http://go-fastdfs;
                }

        }
}

重启nginx后,访问 http://file.izqy.top测试上传了下载,检查上传的文件是否同时保存到 /opt/fastdfs_data1/files/default/opt/fastdfs_data2/files/default中。