fastDFS入门

文章接着上一篇文章:fastDFS介绍(https://www.jianshu.com/p/d7e687967209)

3 fastDFS入门

3.1fastDFS安装与配置
3.1.1使用docker简易搭建FastDFS

启动docker:
systemctl start docker
另两篇文章的安装 https://blog.csdn.net/lizhihaooo/article/details/79261388 普通安装https://my.oschina.net/u/1867229/blog/829572
1、FastDFS镜像:
docker pull morunchang/fastdfs

2、创建tracker:
docker run -d --name tracker -v /home/fastdfs_docker/fdfs/tracker:/data/fast_data --privileged=true --net=host morunchang/fastdfs sh tracker.sh
执行如下命令查看tracker是否运行起来
docker container ls

如果想停止tracker服务,可以执行如下命令
docker container stop tracker

停止后,重新运行tracker,可以执行如下命令
docker container start tracker

3、创建storage:
docker run -d --name storage -v /home/fastdfs_docker/fdfs/storage_data:/data/fast_data --privileged=true --net=host -e TRACKER_IP=172.17.107:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

4、验证是否安装上了
docker container ls --all

image.png
3.1.2linux小常识

修改.conf文件的时候,突然关闭了

方法1、此时你可以恢复文件:

vim -r nginx.conf

恢复以后把.swap文件删掉,在打开时就不会用提示良,注意.swap文件是个隐藏文件。可用:la查看。以.开头的是隐藏文件。

方法2、ls -a 查询隐藏文件


将后缀名为.swp的文件删除

rm -f .nginx.conf.swp

再次编辑文件不在出现提示警告!
拷贝文件到docker  https://blog.csdn.net/qq_28822933/article/details/83857357

修改文件

修改文件 vim 文件名  
i  是进入修改模式
: 输入命令
wq 保存  q 退出 !q强制退出
3.1.3Tracker配置

fastDFS的配置文件目录 :/etc/fdfs
主要的配置文件:/etc/fdfs/tracker.conf (tracker配置文件 );storage.conf(storage配置文件)

运行命令进入容器
docker exec -it tracker /bin/bash
进入/etc/fdfs

image.png

查看tracker.conf
cat tracker.conf

image.png

tracker.conf配置内容如下:
端口:port=22122
存储策略:store_lookup=
取值范围:0(轮询向storage存储文件)、1(指定具体的group)、2负载均衡,选择空闲的storage存储
指定具体的group:store_group= 如果store_lookup设置为1则这里必须指定一个具体的group。
tracker 基础目录:base_path=/home/fastdfs,tracker在运行时会向此目录存储storage的管理数据。

3.1.4storage配置
image.png

image.png

image.png

storage.conf配置 内容如下:
组名:group_name=
端口:port=
向tracker心跳间隔(秒):heart_beat_interval=30
storage基础目录:base_path=/home/fastdfs
磁盘存储目录,可定义多个store_path:
store_path0=/home/fastdfs/fdfs_storage 此目录下存储上传的文件,在/home/fastdfs/fdfs_storage/data下
store_path1=...

上报tracker的地址:tracker_server=192.168.101.64:22122
如果有多个tracker则配置多个tracker,比如:
tracker_server=192.168.101.64:22122
tracker_server=192.168.101.65:22122
....

3.2 文件上传下载测试

3.2.1搭建环境

这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在:
https://github.com/happyfish100/fastdfs-client-java,参考此工程编写测试用例。

1)创建maven工程
pom.xml

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java -->
        <dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>
  1. 配置 文件
    在classpath:config下创建fastdfs-client.properties文件
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.tracker_servers = 192.168.85.129:22122(配置的地址)
3.2.2 文件上传
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestFastDFS {

    //上传文件
    @Test
    public void testUpload(){

        try {
            //加载fastdfs-client.properties配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            //定义TrackerClient,用于请求TrackerServer
            TrackerClient trackerClient = new TrackerClient();
            //连接tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            //获取Stroage
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建stroageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //向stroage服务器上传文件
            //本地文件的路径
            String filePath = "F:/壁纸/003.jpg";
            //上传成功后拿到文件Id
            String fileId = storageClient1.upload_file1(filePath, "jpg", null);
            System.out.println(fileId);
            //group1/M00/00/00/wKhVgVw-qbmAXdpRAAp2uCv_JwU096.jpg

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
3.2.3 文件查询
    //查询文件
    @Test
    public void testQueryFile() throws IOException, MyException {
        ClientGlobal.initByProperties("config/fastdfs-client.properties");
        TrackerClient tracker = new TrackerClient();
        TrackerServer trackerServer = tracker.getConnection();
        StorageServer storageServer = null;
        StorageClient storageClient = new StorageClient(trackerServer,storageServer);

        FileInfo fileInfo = storageClient.query_file_info("group1",
                "M00/00/00/wKhVgVw-qbmAXdpRAAp2uCv_JwU096.jpg");
        System.out.println(fileInfo);
    }
3.2.4 文件下载
 //下载文件
    @Test
    public void testDownload(){
        try {
            //加载fastdfs-client.properties配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            //定义TrackerClient,用于请求TrackerServer
            TrackerClient trackerClient = new TrackerClient();
            //连接tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            //获取Stroage
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建stroageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //下载文件
            //文件id
            String fileId = "group1/M00/00/00/wKhVgVw-qbmAXdpRAAp2uCv_JwU096.jpg";
            byte[] bytes = storageClient1.download_file1(fileId);
            //使用输出流保存文件
            FileOutputStream fileOutputStream = new FileOutputStream(new File("F:/003.jpg"));
            fileOutputStream.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
3.3.2 配置Nginx图片服务虚拟机主机

图片服务虚拟主机的作用是负载均衡,将图片请求转发到storage server上。
1、通过图片服务虚拟主机请求图片流程图


image.png

3、在nginx图片代理服务上配置图片服务器虚拟主机

#图片服务
        upstream img_server_pool{
        #server 192.168.101.64:80 weight=10;
        server 192.168.0.133:8888 weight=10;
        }
#服务
    server {
        listen 8888;
        server_name img.xuecheng.com;
        #个人中心
        location /group1 {
        proxy_pass http://img_server_pool;
        }
    }
3.3.3 图片服务器

因为要走外网的dns所以要记得设置host让它走本地

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容