sistema de almacenamiento de archivos distribuido (fastdfs)

1, un sistema de almacenamiento de archivos distribuido

Sube imágenes, debido a los más de un servidor, por lo que no puede encontrar una imagen en la que el servidor lo anterior, entonces usted necesita un servidor de archivos de imagen de gestión.

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-gnnnI9Sn-1585211003406) (activos / 1584107074588.png)]

FastDFS es un servidor de archivos.

2, FastDFS

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-kqxVUROV-1585211003408) (activos / 1584855017183.png)]

1 soporta la carga -> nos dan una vía de retorno

2 Soporte Descargas -> Descargar utilizando la ruta

Los archivos pequeños del sistema de almacenamiento de archivos distribuido :

Documento G es menor que un pequeño archivo, el archivo se puede dividir sin

Necesidad de dividir archivos de gran tamaño.

FastDFS es un sistema de almacenamiento de archivos distribuido consta de dos partes.

1 rastreador (tracker)

2 de almacenamiento (memoria)

Si desea ampliar la capacidad de FastDFS, muy conveniente, el grupo añadió directamente en la línea

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-KvsPRBdO-1585211003425) (activos / 1584107517026.png)]

3, FastDFS a la acumulación

3.1, creado en los contenedores FastDFS servidor

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-s7sigUDQ-1585211003426) (activos / 1584846243919.png)]

3.1.1 Preparar un rastreador

docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh

3.1.2 Preparar un almacenamiento

1 direcciones públicas: Al desarrollar, utilizar la red pública

2 privados dirección: servicio en línea, el uso de la red privada

docker run -d --name storage --net=host -e TRACKER_IP=服务器公网:22122 -e GROUP_NAME=g1 morunchang/fastdfs sh storage.sh

Puede utilizar docker logs 容器名称los comandos para ver el buque está operando con éxito.

En el mismo grupo de almacenamiento de archivos se copian.

Situado en diferentes grupos puede usar el equilibrio de carga.

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-cFrePqTe-1585211003427) (activos / 1584108715256.png)]

3.2, las dependencias del proyecto complemento

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-b43sjZka-1585211003429) (activos / 1584873611084.png)]

<!--spring boot项目导入的依赖-->
<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.26.7</version>
</dependency>
<!--测试类依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

3.3, el perfil yml

fdfs:
  tracker-list:            #TrackerList参数,支持多个
  - 192.168.1.105:22122
  - 192.168.1.106:22122 

3.4 Prueba fastdfs operación

package com.zxm.test;

import com.github.tobato.fastdfs.domain.fdfs.StorageNode;
import com.github.tobato.fastdfs.domain.fdfs.StorageNodeInfo;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadFileWriter;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.github.tobato.fastdfs.service.TrackerClient;
import com.zxm.utils.FastdfsUtil;
import lombok.SneakyThrows;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.util.HashSet;

@SpringBootTest
@RunWith(SpringRunner.class)
public class FileUploadTest {

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    @Autowired
    private TrackerClient trackerClient;

    /**
     * 文件的上传
     */
    @SneakyThrows
    @Test
    public void updateLoadTest(){
        // 也可以上传视频。只需要填入视频路径,然后将fileExtName换为视频的后缀就行。
        File file = new File("C:/Users/86131/Pictures/Saved Pictures/1.jpg");
        String path = fastFileStorageClient.uploadFile(
                new FileInputStream(file),
                file.length(),
                "jpg",
                new HashSet<>(0)).getFullPath();
        System.out.println(path);
    }

    /**
     * 文件的下载
     */
    @Test
    public void testDownload(){
        String path = "C:/Users/86131/Desktop/临时文件夹/d2.jpg";
        fastFileStorageClient.downloadFile("g1","M00/00/00/rBHR8l5h-T6AQTubAApSuL6VXKQ831.jpg", new DownloadFileWriter(path));
    }
    /**
     * 文件的删除
     * 删除之后,还可以访问,但是不能下载了。
     */
    @Test
    public void testDelete(){
        String fullPath = "g1/M00/00/00/rBHR8l5nSzeAS0pmAAVS7KokxMQ062.jpg";
        String groupName = FastdfsUtil.parseGroup(fullPath);
        System.out.println(groupName);
        String path = fullPath.replaceFirst(groupName+"/", "");
        System.out.println(path);
        fastFileStorageClient.deleteFile(groupName,path);
        System.out.println("删除完成");
//        或者直接使用下述方法就可删除。
//        fastFileStorageClient.deleteFile("g1","M00/00/00/rBHR8l5nSzeAS0pmAAVS7KokxMQ062.jpg");
    }

    @Test
    public void trackerTest(){
        /**
         * 文件下载时候用到。
         * fetchStorage对象中包含组名,storage的服务器ip,端口
         */
        StorageNodeInfo fetchStorage = trackerClient.getFetchStorage("g1", "M00/00/00/rBHR8l5nSzeAS0pmAAVS7KokxMQ062.jpg");
        /**
         * 文件上传时候用到
         * 得到当前注册到tracker上面的storege
         * 不同组可以使用负载均衡。
         */
        StorageNode storeStorage = trackerClient.getStoreStorage();
    }

}

3.5, el fastDFS aplicación controlador

package com.zxm.controller;

import com.github.tobato.fastdfs.service.FastFileStorageClient;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * 负责文件上传的控制器
 */
@RestController
@RequestMapping("/admin/file")
public class FileController {
    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    // http://47.94.225.69:8080  fastDFS自定义地址配置。
    // 此处使用@Value注解从yml配置文件中注入。
    @Value("${resources.url}")
    private String serverAddress; 

    /**
     * 上传一个图片
     * @param file
     * @return
     */
    @SneakyThrows
    @PostMapping("/upload/element")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file){
        // 开始上传文件
        String fullPath = fastFileStorageClient.uploadFile(
                file.getInputStream(),
                file.getSize(),
                "jpg",
                null).getFullPath();
        return ResponseEntity.ok(serverAddress+"/"+fullPath);
    }
}
# fastdfs的自定义地址配置
resources:
  url: http://47.94.225.69:8080

4, fastdfs Análisis Principio

4.1, el proceso de carga de archivos fastDFS

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-55GwGQnp-1585211003431) (activos / 1584875740800.png)]

rastreador también tiene el efecto de equilibrio de carga, la selección de una operación de una pluralidad de almacenamiento.

4.2, el proceso de descarga de archivos fastDFS

[Volcar imagen no pasa la cadena, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-TA857ey2-1585211003434) (activos / 1584876101834.png)]

5, la combinación FastDFS y Nginx

5.1, para hacer seguimiento de la carga de equilibrio

Para llevar a cantidades más altas de concurrencia, racimo rastreador se puede hacer. Necesidad de utilizar el equilibrio de carga nginx.

5.2, el papel de nginx fastdfs-nginx-módulo plug-in

FastDFS servidor Tracker, almacenamiento de servidor de archivos en un servidor de almacenamiento de almacenamiento, Almacenamiento, sino entre el mismo grupo necesidad de entrar en la copia del archivo, el problema de retardo de sincronización

Asumir servidor de Tracker para cargar archivos en el servidor de almacenamiento de 11, después de una exitosa ID de carga de archivos ha sido devuelto al cliente. En este almacenamiento FastDFS puntuales mecanismo de clúster sincronizar el archivo con el mismo conjunto de almacenamiento de servidor de almacenamiento de 12, si el archivo no se ha completado la copia del cliente si el identificador de archivo en el archivo toma 12 Servidor de almacenamiento, no podrá acceder al archivo de error. (Servidor de almacenamiento 11 y Servidor de almacenamiento 12 es el mismo grupo de almacenamiento)

Sin embargo, entre los grupos de almacenamiento Storage Server necesitan tener acceso a la misma copia de archivos, el problema de retardo de sincronización

Asumir servidor de Tracker para cargar archivos en el servidor de almacenamiento de 11, después de una exitosa ID de carga de archivos ha sido devuelto al cliente. En este almacenamiento FastDFS puntuales mecanismo de clúster sincronizar el archivo con el mismo conjunto de almacenamiento de servidor de almacenamiento de 12, si el archivo no se ha completado la copia del cliente si el identificador de archivo en el archivo toma 12 Servidor de almacenamiento, no podrá acceder al archivo de error. (Servidor de almacenamiento 11 y Servidor de almacenamiento 12 es el mismo grupo de almacenamiento)

Las conexiones fastdfs-nginx-módulo puede ser redirigido a un archivo cuando la carga de archivos del servidor de origen (servidor de almacenamiento 11) tome el archivo , el cliente de copia de archivos evitar debido al retraso causado por errores inalcanzables.

Publicado 29 artículos originales · ganado elogios 0 · Vistas 2248

Supongo que te gusta

Origin blog.csdn.net/rootDream/article/details/105121617
Recomendado
Clasificación