Directorio de artículos
提示:以下是本篇文章正文内容,下面案例可供参考
1. Acerca de FastDFS
1. Composición interna de FastDFS
- FastDFS es un sistema de archivos distribuido de alto rendimiento.
- FastDFS está compuesto por el servidor Tracker (servidor de programación de seguimiento) y el servidor de almacenamiento (servidor de almacenamiento de archivos).
- El servidor de almacenamiento (servidor de almacenamiento de archivos) se compone de varios grupos
2. Explicación de términos
Servidor de seguimiento (servidor de programación de seguimiento)
Servidor de seguimiento (servidor de programación de seguimiento), la función es el equilibrio de carga y la programación, a través del servidor de seguimiento al cargar archivos, puede encontrar el servidor de almacenamiento para proporcionar servicios de carga de archivos de acuerdo con algunas estrategias, por lo que el rastreador El servidor se llama Para servidores de seguimiento o servidores de programación.
Servidor de almacenamiento (servidor de almacenamiento de archivos)
El servidor de almacenamiento (servidor de almacenamiento de archivos) se utiliza para el almacenamiento de archivos. Los archivos cargados por el cliente finalmente se almacenan en el servidor de almacenamiento. El servidor de almacenamiento no implementa su propio sistema de archivos, sino que utiliza el archivo del sistema operativo. sistema para administrar archivos, por lo que el almacenamiento se denomina servidor de almacenamiento.
grupo (grupo)
- Dado que el servidor Storage (servidor de almacenamiento de archivos) se utiliza para almacenar archivos, tiene una capacidad limitada, para solucionar este problema se propone la agrupación de expansión, por lo que se amplía el concepto de grupo.
- Cada grupo almacena algunos archivos y los archivos guardados en cada grupo son diferentes.
- Para garantizar la alta disponibilidad de los servicios de nodo en cada grupo, se permite la creación de clústeres de servidores de almacenamiento en el grupo. Cada grupo puede tener varios miembros. El contenido almacenado en los miembros del grupo es el mismo y el estado del grupo miembros es consistente No hay un concepto maestro-esclavo.
- Dado que los archivos se almacenan en los nodos de cada grupo, para facilitar las llamadas de acceso http, cada servidor de almacenamiento también está vinculado a un nginx.
- Todos los grupos se suman a un servidor de almacenamiento completo (servidor de almacenamiento de archivos).
3. Principio de funcionamiento Subir
- El servidor de almacenamiento (servidor de almacenamiento de archivos) informa regularmente el estado de cada nodo al servidor de seguimiento (servidor de programación de seguimiento), como: espacio restante en disco, estado de sincronización de archivos;
- Cuando el servidor Tracker (servidor de programación de seguimiento) recibe la solicitud de carga del cliente;
- El servidor de seguimiento (servidor de programación de seguimiento) consultará el servidor de almacenamiento disponible (servidor de almacenamiento de archivos);
- Devolver información como la IP y el puerto del servidor de almacenamiento disponible (servidor de almacenamiento de archivos) al usuario;
- El cliente carga el archivo en el servidor de almacenamiento disponible (servidor de almacenamiento de archivos) de acuerdo con la IP y el puerto devueltos;
- El servidor de almacenamiento (servidor de almacenamiento de archivos) genera la identificación del archivo (información de la ruta y nombre del archivo);
- Y escriba el archivo cargado en el disco del servidor de almacenamiento (servidor de almacenamiento de archivos);
- Devuelva la identificación del archivo generado (información de la ruta y nombre del archivo) al cliente;
- El cliente almacenará la identificación del archivo (información de ruta y nombre de archivo) para consulta y descarga;
4. Descarga del principio de funcionamiento
- El servidor de almacenamiento (servidor de almacenamiento de archivos) informa regularmente el estado de cada nodo al servidor de seguimiento (servidor de programación de seguimiento), como: espacio restante en disco, estado de sincronización de archivos;
- Cuando el servidor Tracker (servidor de programación de seguimiento) recibe la solicitud de descarga ciega del cliente;
- El servidor de seguimiento (servidor de programación de seguimiento) consultará el servidor de almacenamiento disponible (servidor de almacenamiento de archivos);
- Devolver información como la IP y el puerto del servidor de almacenamiento disponible (servidor de almacenamiento de archivos) al cliente;
- El cliente solicita el servidor de almacenamiento disponible (servidor de almacenamiento de archivos) de acuerdo con la identificación del archivo (información de la ruta y nombre del archivo);
- El servidor de almacenamiento (servidor de almacenamiento de archivos) consulta los archivos de acuerdo con la identificación del archivo (información de la ruta y nombre del archivo);
- El servidor de almacenamiento (servidor de almacenamiento de archivos) devuelve el archivo consultado al cliente para su descarga;
Dos, docker instalar FastDFS
1. Pasos de instalación
- Tire del espejo fastdfs
docker pull delron/fastdfs
- Crear un contenedor de servidor Tracker (servidor de programación de seguimiento)
提示:在指定虚拟机镜像之后,还需要添加tracker命令,这样镜像就会根据tracker命令启动tracker服务
docker run -d --name tracker --net=host -p 22122:22122 delron/fastdfs tracker
–net=host : Aplicar la red de la máquina virtual al contenedor, es decir, es consistente con la red del host
- Servidor de almacenamiento (servidor de almacenamiento de archivos), debe especificar la ip y el puerto del rastreador
提示:在指定虚拟机镜像之后,还需要添加storager命令,这样镜像就会根据storage命令启动storage服务
docker run -d --name storage --net=host -p 8888:8888 -p 23000:23000 -e TRACKER_SERVER=192.168.136.160:22122 -e GROUP_NAME=group1 delron/fastdfs storage
- GROUP_NAME=group1 : especifique que el servidor está en el grupo grupo 1 o agregue un nuevo grupo llamado grupo 1. Si desea agregar un nuevo grupo para la expansión de la capacidad, ejecute este comando nuevamente y cambie el nuevo nombre del grupo.
- –net=host : Aplicar la red de la máquina virtual al contenedor, es decir, es consistente con la red del host
2. Modificar la configuración de nginx
Nginx se ha integrado dentro del almacenamiento, y nginx aquí puede hacer que las imágenes sean accesibles en el navegador
- Ingrese al contenedor de almacenamiento
提示:进入Storage容器内【cd /etc/fdfs/ 】也有Storage和Tracker的配置
docker exec -it storage /bin/bash
- Edite el archivo [nginx.conf]
vi /usr/local/nginx/conf/nginx.conf
3. Si he realizado cambios en la configuración, debe reiniciarse
docker restart storage
3. Usar pasos
1. Importar coordenadas
<!--fastdfs文件存储-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.7</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
2. Agregar configuración
Agregar configuración en [application.yml]
fdfs:
so-timeout: 1500 #读取超时时间
connect-timeout: 600 #连接超时时间
thumb-image: #缩略图参数
width: 150
height: 150
tracker-list: 192.168.136.160:22122 #tracker服务器地址 可配置多个
web-server-url: http://192.168.136.160:8888 #访问路径 storage中nginx地址
3. Escritura de código
import com.github.tobato.fastdfs.domain.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.tanhua.server.AppServerApplication;
import org.apache.commons.io.FileUtils;
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.IOException;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppServerApplication.class)
public class FastDFSTest {
@Autowired
protected FastFileStorageClient storageClient;
@Autowired
private FdfsWebServer fdfsWebServer;
@Test
public void testUpload() {
String path = "D:\\IMAGE\\2e8e06bd-bfe3-4af3-9540-83eb20982656.jpg";
File file = new File(path);
try {
//上传图片
StorePath storePath = this.storageClient.uploadFile(FileUtils.openInputStream(file), file.length(), "jpg", null);
//拼接路径 可通过该路径访问上传的照片 http://192.168.136.160:8888/group1/M00/00/00/wKiIoGMB7PmAUPZZAAHMYGEwMhg147.jpg
String url = fdfsWebServer.getWebServerUrl() + "/" + storePath.getFullPath();
System.out.println(url);
} catch (IOException e) {
e.printStackTrace();
}
}
}