記事ディレクトリ
提示:以下是本篇文章正文内容,下面案例可供参考
1.FastDFSについて
1. FastDFS の内部構成
- FastDFS は、高性能の分散ファイル システムです。
- FastDFS は Tracker サーバー (トラッキング スケジューリング サーバー) と Storage サーバー (ファイル ストレージ サーバー) で構成されます。
- ストレージサーバー(ファイルストレージサーバー)は複数のグループで構成されています
2. 用語解説
トラッカー サーバー (トラッキング スケジューリング サーバー)
トラッカー サーバー (トラッキング スケジューリング サーバー)、役割は負荷分散とスケジューリングです。ファイルをアップロードするときにトラッカー サーバーを介して、いくつかの戦略に従ってファイル アップロード サービスを提供するストレージ サーバーを見つけることができるので、トラッカーserver は、追跡サーバーまたはスケジューリング サーバー用に呼び出されます。
Storageサーバー(ファイルストレージサーバー)
Storageサーバー(ファイルストレージサーバー)は、ファイルストレージとして使用されます クライアントによってアップロードされたファイルは、最終的にStorageサーバーに格納されます Storageサーバーは独自のファイルシステムを実装せず、オペレーティングシステムファイルを使用しますファイルを管理するためのシステムであるため、ストレージはストレージサーバーと呼ばれます。
グループ(グループ)
- Storageサーバー(ファイルストレージサーバー)は、ファイルを格納するために使用されるため、容量が限られています.この問題を解決するために、拡張グループ化が提案され、グループの概念が拡張されます.
- 各グループにはいくつかのファイルが保存され、各グループに保存されるファイルは異なります。
- 各グループ内のノード サービスの高可用性を確保するために、グループ内にストレージ サーバー クラスターを構築することができます.各グループは複数のメンバーを持つことができます.グループ メンバーに格納されているコンテンツは同じであり、グループのステータスメンバーは一貫しており、マスター/スレーブの概念はありません。
- ファイルは各グループのノードに保存されるため、http アクセス呼び出しを容易にするために、各ストレージ サーバーも nginx にバインドされます。
- すべてのグループを合計すると、完全なストレージ サーバー (ファイル ストレージ サーバー) になります。
3. 動作原理 アップロード
- Storage サーバー (ファイル ストレージ サーバー) は定期的に各ノードのステータスを Tracker サーバー (トラッキング スケジューリング サーバー) に報告します。
- Tracker サーバー (トラッキング スケジューリング サーバー) がクライアントからアップロード要求を受信したとき。
- トラッカー サーバー (トラッキング スケジューリング サーバー) は、利用可能なストレージ サーバー (ファイル ストレージ サーバー) を照会します。
- 使用可能なストレージ サーバー (ファイル ストレージ サーバー) の IP やポートなどの情報をユーザーに返します。
- クライアントは、返された IP とポートに従って、使用可能なストレージ サーバー (ファイル ストレージ サーバー) にファイルをアップロードします。
- ストレージ サーバー (ファイル ストレージ サーバー) は、ファイル ID (パス情報とファイル名) を生成します。
- アップロードされたファイルを Storage サーバー (ファイルストレージサーバー) のディスクに書き込みます。
- 生成されたファイル ID (パス情報とファイル名) をクライアントに返します。
- クライアントは、クエリとダウンロードのためにファイル ID (パス情報とファイル名) を保存します。
4.動作原理のダウンロード
- Storage サーバー (ファイル ストレージ サーバー) は定期的に各ノードのステータスを Tracker サーバー (トラッキング スケジューリング サーバー) に報告します。
- Tracker サーバー (トラッキング スケジューリング サーバー) がクライアントからブラインド ダウンロード要求を受信したとき。
- トラッカー サーバー (トラッキング スケジューリング サーバー) は、利用可能なストレージ サーバー (ファイル ストレージ サーバー) を照会します。
- 使用可能なストレージ サーバー (ファイル ストレージ サーバー) の IP やポートなどの情報をクライアントに返します。
- クライアントは、ファイル ID (パス情報とファイル名) に従って、使用可能なストレージ サーバー (ファイル ストレージ サーバー) を要求します。
- ストレージ サーバー (ファイル ストレージ サーバー) は、ファイル ID (パス情報とファイル名) に従ってファイルをクエリします。
- ストレージ サーバー (ファイル ストレージ サーバー) は、照会されたファイルをダウンロードのためにクライアントに返します。
2、docker で FastDFS をインストール
1. インストール手順
- fastdfs ミラーをプルする
docker pull delron/fastdfs
- Tracker サーバー (トラッキング スケジューリング サーバー) コンテナーを作成する
提示:在指定虚拟机镜像之后,还需要添加tracker命令,这样镜像就会根据tracker命令启动tracker服务
docker run -d --name tracker --net=host -p 22122:22122 delron/fastdfs tracker
–net=host : 仮想マシンのネットワークをコンテナーに適用します。つまり、ホスト ネットワークと一致します。
- ストレージ サーバー (ファイル ストレージ サーバー)、トラッカーの IP とポートを指定する必要があります
提示:在指定虚拟机镜像之后,还需要添加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 : サーバーがグループ group1 に属していることを指定するか、group1 という名前の新しいグループを追加します。容量拡張のために新しいグループを追加する場合は、このコマンドを再度実行して、新しいグループ名を変更します。
- –net=host : 仮想マシンのネットワークをコンテナーに適用します。つまり、ホスト ネットワークと一致します。
2.nginx の設定を変更する
Nginxはストレージ内に統合されており、ここのnginxはブラウザで写真にアクセスできるようにします
- ストレージコンテナに入る
提示:进入Storage容器内【cd /etc/fdfs/ 】也有Storage和Tracker的配置
docker exec -it storage /bin/bash
- ファイル[nginx.conf]ファイルを編集します
vi /usr/local/nginx/conf/nginx.conf
3. 構成を変更した場合は、再起動する必要があります
docker restart storage
3.ステップを使用する
1. 座標のインポート
<!--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.構成を追加する
[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. コードの書き方
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();
}
}
}