[2019-03-26 07:05:22] DEBUG - base_path=/fastdfs/storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, 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 192.168.1.39:22122
group count: 1
Group 1:
group name = group1
disk total space = 17394 MB
disk free space = 2634 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
telnet 192.168.1.39 22122 出现下面情况说明可用
[C:\~]$ telnet 192.168.1.39 22122
Connecting to 192.168.1.39:22122...
Connection established.
To escape to local shell, press Ctrl+Alt+].
开启一个客户端上传文件和下载文件
docker run -it --name fdfs_sh --net=host season/fastdfs sh
退出这个容器,这里退出就相当于关闭容器了,后面要cp一个配置文件进去
docker cp storage.conf fdfs_sh:/fdfs_conf/ 这个storage.conf 就是之前配置tracker_server ip的那个
docker start fdfs_sh
docker exec -it fdfs_sh bah
cd fdfs_conf
echo hello world>hello.txt
fdfs_upload_file storage.conf hello.txt
执行后返回 group1/M00/00/00/wKgBJ1yZ1F2AC9xEAAAADFmwwCQ382.txt 这就是正确咯!(#^.^#)
退出容器返回主机,cd /opt/docker/data/fastdfs/store_path (这个目录在上面配置的)
cd data ( data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中)
cat 00/00/wKgBJ1yZ1F2AC9xEAAAADFmwwCQ382.txt 返回结果的红色部分
[root@vmware39 data]# cat 00/00/wKgBJ1yZ1F2AC9xEAAAADFmwwCQ382.txt
hello world
[root@vmware39 data]# pwd
/opt/docker/data/fastdfs/store_path/data
下载图片
开始我是直接用http访问,http://192.168.1.39:9999/group1/M00/00/00/wKgBJ1yZ1F2AC9xEAAAADFmwwCQ382.txt 发现访问不了呐。
原来早在4.05的时候,就remove embed HTTP support
Version 4.05 2012-12-30
* client/fdfs_upload_file.c can specify storage ip port and store path index
* add connection pool
* client load storage ids config
* common/ini_file_reader.c does NOT call chdir
* keep the mtime of file same
* use g_current_time instead of call time function
* remove embed HTTP support
HTTP请求不能访问文件的原因(摘抄来的)
我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.128.131,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.128.131,如果复制没有完成,客户端就用这个ID在192.168.128.131取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。
下面就是docker安装nginx
docker run -it -d --name nginx -p 8080:80 nginx
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/config/nginx (/opt/docker/config/nginx在本机创建好)
docker run -p 8080:80 --name nginx -v /opt/webroot:/www -v /opt/docker/config/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker/logs/nginx:/wwwlogs -d nginx
下载 fastdfs的nginx访问扩展模块,我主要是对docker里面的nginx进行平滑升级,直接安装没事成功(#^.^#)
本机 git clone https://github.com/happyfish100/fastdfs-nginx-module.git
本机 wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar -xvf nginx-1.9.9.tar.gz
复制本机nginx和fastdfs-nginx-module到docker容器
docker cp ./nginx-1.9.9 nginx:/root
docker cp ./fastdfs-nginx-module nginx:/root
docker exec -it nginx bash
走到这里发现这个nginx没有集成fastdfs-nginx-module 在docker里面弄好麻烦,折腾后放弃,改成本机安装nginx吧
本机安装nginx这里就不写了。直接进入添加module步骤
需要先安装libfastcommon 否则会出现fatal error: logger.h: No such file or directory
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
./make.sh
./make.sh install
先停掉nginx /usr/local/nginx/sbin/ngix -s stop
./configure --add-module=/root/fastdfs-nginx-module/src
make (也可以先安装下面报错的部分)
此处会报错
ngx_http_fastdfs_module.c:6:0:
/root/fastdfs-nginx-module/src/common.c:26:33: fatal error: fastdfs/fdfs_define.h: No such file or directory
vim /root/fastdfs-nginx-module/src/config 在两处添加/usr/include/fastcommon