01-はじめに
GitHub: happyfish100 (YuQing) · GitHub
FastDFSは、ファイル ストレージ、同期、アクセス (アップロードとダウンロード) を主な機能とする高性能分散ファイル システムであり、ファイル ベースのネットワーク サイト (画像共有やビデオ共有) に特に適して。
FastDFS は2 つの役割で構成されます。
-
トラッカー(トラッカー スケジューリング サーバー) : スケジューリングとファイル アクセスの負荷分散
-
ストレージ(メモリ ストレージ サーバー) : ファイル管理 (ストレージ、同期、アクセス インターフェイス) とファイル メタデータは、オンライン サービスに影響を与えずに水平拡張をサポートします。
ストレージ サーバーは、ボリューム/グループを通じて編成および管理されます。異なるボリュームは異なるファイルを管理し、1 つのボリュームは 1 つ以上のストレージ サーバーを管理し、これらのストレージ サーバーは相互にバックアップします。
ストレージ容量=すべてのボリューム容量の合計
ファイルはクラスター内でマークされています=ボリューム名+ファイル名
構造図:
02-環境構築(単体機)
fastdfsをインストールする前に環境を準備する
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
インストールを開始する
#1. インストール パッケージをダウンロードします。必要なバージョンに応じてダウンロードできます (公式 Web サイトが利用可能です)。まず libfastcommon をインストールしてから、fastdfs をインストールします
# libfastcommon ダウンロード アドレス
https://github.com/happyfish100/libfastcommon
#fastdfsダウンロードアドレス
https://github.com/happyfish100/fastdfs
#2. libfastcommon 圧縮パッケージをアップロードして解凍する
libfastcommon.zipを解凍します
#3. 解凍したファイルのディレクトリに移動し、make.sh ファイルがあることを確認し、ファイルを実行してインストールします。
cd libfastcommon/
./make.sh && ./make.sh インストール
#4. fastdfs 圧縮パッケージをアップロードして解凍する
fastdfs.zipを解凍します
#5. 解凍したファイルのディレクトリに移動し、make.sh ファイルがあることを確認し、ファイルを実行してインストールします
cd fastdfs/
./make.sh && ./make.sh インストール
#6. インストール完了後、/usr/bin ディレクトリに fdfs で始まるファイルがあるか確認してください このディレクトリに実行ファイルがあると、環境変数の設定が不要になるというメリットがあります
/usr/bin/ -name 'fdfs*' を見つけます
例えば:
/usr/bin/fdfs_upload_appender
/usr/bin/fdfs_append_file
/usr/bin/fdfs_appender_test1
/usr/bin/fdfs_download_file
/usr/bin/fdfs_test
/usr/bin/fdfs_delete_file
/usr/bin/fdfs_test1
/usr/bin/fdfs_crc32
/usr/bin/fdfs_upload_file
/usr/bin/fdfs_storated
/usr/bin/fdfs_trackerd
/usr/bin/fdfs_appender_test
/usr/bin/fdfs_file_info
/usr/bin/fdfs_monitor
#7. 設定ファイルを変更し、/etc/fdfs ディレクトリに入り、次の 3 つのファイルの名前を変更します。名前が .conf で終わる場合は、名前を変更する必要はなく、この手順をスキップできます。
cd /etc/fdfs
client.conf.sample storage.conf.sample tracker.conf.sample
mv client.conf.sample client.conf
mv storage.conf.sample storage.conf
mv tracker.conf.サンプル tracker.conf
#8. 設定ファイルを変更する
# tracker.conf 設定ファイル を変更する
base_path=/data/tracker #データの保存場所、独自のパスを入力します (新しいディレクトリを自分で作成できます)
#storage.conf 構成ファイルを変更する
base_path=/data/storage #データの保存場所、独自のパスを入力します (新しいディレクトリを自分で作成できます)
store_path0=/data/storage #データの保存場所に応じて同じ
tracker_server=192.168.209.121:22122 #トラッカー サービスのアドレスとポートを指定します
#9. サービスを開始します。次の起動コマンドは任意のディレクトリで実行できます。
fdfs_trackerd /etc/fdfs/tracker.conf start #start tracker
fdfs_storage /etc/fdfs/storage.conf start #ストレージの開始
#10. テスト
# client.conf 設定ファイルを変更する
base_path=/storage #ストレージの場所、ストレージの場所はそれ自体で新しいディレクトリを作成できます
tracker_server=192.168.0.197:22122 #トラッカー サービスのアドレスとポートを指定します
#ファイルをアップロードする
fdfs_upload_file /etc/fdfs/client.conf /root/1.png
#ダウンロードファイル
fdfs_download_file /etc/fdfs/client.conf アップロードされたファイル名 ダウンロード ディレクトリ
03-Java 統合 Fastdfs
1.依存関係を追加する
Maven Factory ライブラリで見つけることも、 Fastdfs の作成者である github で fastdfs-client-javaプロジェクトを見つけて、ローカルにダウンロードしてパッケージ化することもできます。
<依存関係>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<バージョン>1.27.2</バージョン>
</依存関係>
注: Maven リモート ファクトリ ライブラリにダウンロードされた依存関係でバージョン競合エラーが報告された場合は、プロジェクト パッケージを自分で手動でダウンロードする必要があります
2. 構成
fdfs.so-timeout=1501
fdfs.connect-timeout=601
fdfs.tracker-list=101.42.151.107:22122
3. テスト
@SpringBootTest(クラス = FastdfsApplication.class)
@RunWith(SpringRunner.class)
パブリック クラス テスト {
@Autowired
プライベート FastFileStorageClient fastFileStorageClient;
/**
*@説明: ダウンロード
*@日付:2022/8/23 20:27
**/
@org.junit.Test
public void test1() が IOException をスローする {
byte[] group1s = fastFileStorageClient.downloadFile("group1", "M00/00/00/CgAQBGMDiZWAZSSPAAAKYireMTk031.gif", new DownloadByteArray());
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\86041\\Desktop\\f\\fastdfs\\fastdfs_springboot\\src\\main\\resources\\1.gif");
fileOutputStream.write(group1s);
}
/**
*@説明: アップロード
*@日付:2022/8/23 20:29
**/
@org.junit.Test
public void test2() は FileNotFoundException をスローします {
ファイル file = new File("F:\\picture\\donde\\geju.jpg");
FileInputStream fileInputStream = 新しい FileInputStream(ファイル);
StorePath jpg = fastFileStorageClient.uploadFile(fileInputStream, file.length(), "jpg", null);
System.out.println(jpg.getGroup());//グループ名
System.out.println(jpg.getPath());// 保存場所
}
}
04-FastDF と Nginx の統合
#1. nginx と fastdfs-nginx-module 、fastdfs-nginx-module のダウンロード アドレスをアップロードする
https://github.com/happyfish100/fastdfs-nginx-module
#2. fastdfs-nginx-module の設定ファイルを解凍して変更する
fastdfs-nginx-module.zipを解凍します
vi /usr/fastdfs-nginx-module/src/config
#次のように変更します
if テスト -n "${ngx_module_link}"; それから
ngx_module_type=HTTP
ngx_module_name=$ngx_addon_name
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
ngx_module_libs="-lfastcommon -lfdfsclient"
ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
ngx_module_deps=
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
。自動/モジュール
それ以外
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
#3. nginxの解凍ディレクトリに入り、fastdfs-nginx-moduleとともにconfigureを実行する
cd /usr/nginx-1.11.1/
./configure --add-module=/usr/fastdfs-nginx-module/src/ --prefix=/usr/nginx
#独自の fastdfs-nginx-module パスを指定し、nginx をインストールするパスを指定します
#4. nginx インストール コマンドを実行します (解凍された nginx ディレクトリで実行されます) (ここで間違いやすいので、エラーがある場合は fastdfs- nginx-module を置き換えてください)
メイク&&メイクインストール
#5. fastdfs-nginx-module の mod_fastdfs.conf 設定ファイルを /etc/fdfs ディレクトリにコピーします
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
#6. fastdfs の conf ディレクトリにある http.conf および mime.types ファイルを /etc/fdfs ディレクトリにコピーします
cp fastdfs-5.11/conf/http.conf /etc/fdfs
cp fastdfs-5.11/conf/mime.types /etc/fdfs
#7. nginxのnginx.conf設定ファイルを変更する
vi /usr/local/nginx/conf/nginx.conf
#nginx のリスニング ポートを変更します。これは storage.conf の http.server_port と同じです。
#場所を変更し、前の場所をコメントアウトして、次の場所を追加します
サーバー {
8888 を聞いてください。
サーバー名 ローカルホスト;
場所 ~/グループ[0-9]/ {
ngx_fastdfs_module;
}
}
#8. /etc/fdfs/mod_fastdfs.conf 設定ファイルを変更する
vi /etc/fdfs/mod_fastdfs.conf
# 以下の内容を修正します
tracker_server=192.168.128.141:22122 #独自のトラッカー サービスのアドレスとポートを指定します
url_have_group_name = true #グループ名でのアクセスを許可するかどうかを true に設定します
group_name=group1 #グループ名、デフォルトはgroup1、変更する必要はありません
store_path0=/data/fastdfs/storage/store #独自のファイル ディレクトリを指定します
#9. nginxサービスを開始する
./nginx -c /usr/local/nginx/conf/nginx.conf
#10. FastDFS サービスを開始する
fdfs_trackerd /etc/fdfs/tracker.conf 開始
fdfs_storated /etc/fdfs/storage.conf start
注: fastdfs_v5.0 および fastdfs-nginx-module_v1.16 のインストールは 正常ですが、バージョン 1.20 のインストールではエラーが報告されます: error: request member 'path' in non-struct or Union
05-Fastdfs は盗難防止リンクを開きます
5.1. http.conf ファイルを変更する
vim /etc/fdfs/http.conf
5.2. fastdfs サービスと nginx サービスを順番に再起動します
# トラッカーを再起動しますfdfs_trackerd /etc/fdfs/tracker.conf 再起動# ストレージを再起動しますfdfs_storated /etc/fdfs/storage.conf 再起動# nginxを再起動します./nginx -s リロード
5.3. Java設定の変更
#ファイルサーバーfdf:so-タイムアウト: 1501接続タイムアウト: 601トラッカーリスト: 43.143.227.xxx:22122http:anti_steal_token: true秘密キー: FastDFS1234567890ウェブサーバーの URL: http://43.143.227.xxx:80
5.4. トークンメソッドの開発と取得
/*** サーバーにアクセスするためのトークンを取得し、アドレスに接続します** @param filepath ファイルパス group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg* @param httpSecretKey 秘密鍵* @return リターン トークン (例: token=078d370098b03e9020b82c829c205e1f&ts=1508141521)*/public static String getToken(String filepath, String httpSecretKey){// UNIX 秒//タイムスタンプの単位は秒ですint ts = (int)(System.currentTimeMillis() / 1000);// トークン文字列トークン = "null";試す {token = ProtoCommon.getToken(getFilename(filepath), ts, httpSecretKey);} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (MyException e) {e.printStackTrace();}StringBuilder sb = 新しい StringBuilder();sb.append("token=").append(トークン);sb.append("&ts=").append(ts);sb.toString()を返します;}
5.5. ファイルのアップロード(フィルタ)、アクセステスト
06 - 統合 FastDHT (ファイル重複排除)
重量除去の原理:
FastDFS自体はファイルの重複排除処理メカニズムをサポートしています ( fdfd_crc32 は MD5より効率的です) が、ファイルハッシュのインデックス ストレージとしてFastDHTを必要とします。FastDHT は、同じ作成者によるオープン ソースのキーと値のデータベースです。
FastDFSのストレージサーバーは、ファイルがアップロードされるたびにハッシュ値を計算し、 FastDHTサーバーから検索・比較し、戻りがなければハッシュを書き込んでファイルを保存し、戻りがあれば、新しいファイルリンクが確立された場合 (ソフトウェア connect ln -s ) 、ファイルを保存しないでください。
環境構築
#1. BerkeleyDB をインストールし、サーバーにアップロードして解凍し、ダウンロード アドレス: http://download.oracle.com/berkeley-db/db-6.0.30.tar.gz
tar -zxvf db-6.0.30.tar.gz
#2. 解凍したディレクトリ db-4.7.25/build_unix/ に移動し、configure コマンドを実行します。
cd db-6.0.30/build_unix/
../dist/configure --prefix=/usr/ db-6.0.30
#3. makeを実行する
メイク&&メイクインストール
#4. FastDHT をインストールし、サーバーにアップロードして解凍します ダウンロード アドレス: GitHub - happyfish100/fastdht: FastDHT は、キー値ペアに基づいた高性能分散ハッシュ テーブル (DHT) であり、次のような大量のキー値ペアを保存できます。ファイル名マッピング、セッションデータ、およびユーザー関連データ。
fastdht-master.zipを解凍します
#5. 解凍したディレクトリに入り、make.sh を変更します。青色の部分はコンテンツを追加し、インストールしたディレクトリに従って BerkeleyDB の保存場所を記入します。
cd 高速dht/
vi make.sh
CFLAGS='$CFLAGS -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/ db-6.0.30 /include/ -L/usr/ db-6.0.30 /lib/ '
if [ "$DEBUG_FLAG" = "1" ]; それから
CFLAGS="$CFLAGS -g -O -DDEBUG_FLAG"
それ以外
CFLAGS="$CFLAGS -O3"
#5. makeを実行し、インストール完了後、/usr/local/bin/ディレクトリにfdht実行ファイルが生成されます。
./make.sh && ./make.sh インストール
#6. インストール完了後、/etc ディレクトリに fdht フォルダを生成し、変更します。
ls /etc/fdht/
fdht_client.conf fdhtd.conf fdht_servers.conf
#最初にリソースを保存するディレクトリを作成します
mkdir fastdht
#fdht_client.conf を変更する
Base_path=/data/fastdht
キープアライブ=1
#include /etc/fdht/fdht_servers.conf (ここに #、##close、#open を追加する必要があります)
#fdht_servers.conf を変更する
group_count = 1 #fastdht 番号
group0 = 192.168.145.150:11411 #fastdht サーバーのアドレスとポート
#fdhtd.confを変更する
ポート=11411
bash_path=/data/fastdht
#include /etc/fdht/fdht_servers.conf
#7. /etc/fdfs/storage.conf を変更する
check_file_duplicate=1
key_namespace=FastDFS
キープアライブ=1
#include /etc/fdht/fdht_servers.conf
#8. libdb.so を /usr/lib ディレクトリにコピーする
cp /usr/db-6.0.30/lib/libdb-6.0.so /usr/lib/
cp /usr/db-6.0.30/lib/libdb-6.0.so /usr/lib64/
#9. 起動、fdhtd と fastdfs をそれぞれ起動
/usr/local/bin/fdhtd /etc/fdht/fdhtd.conf start
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf 開始
/usr/bin/fdfs_storage /etc/fdfs/storage.conf start
#10. テスト
同じファイルをアップロードすると、元のファイルのコピーが 1 つだけ保持され、同じファイルのアップロードがショートカットになることがわかります。
07-fastdfs分散ファイルシステムクラスタ環境構築
ビルド手順:
(1) マシンを4台用意する(テスト用のみ)
トラッカー:2セット(192.168.80.145、192.168.80.146)
ストレージ: 3 ユニット、2 つのグループに分割 (192.168.80.147、192.168.80.148、192.168.80.149)
注: fastdfs、nginx、fastdht は 5 台のマシンのサービスにインストールされており、すべてのマシンのファイアウォールをオフにする必要があります
(2) トラッカーの設定 ( トラッカー 2 つ)
#1. /etc/fdfs/ と入力し、tracker.conf を変更します
base_path=/home/fastdfs/tracker (パスが存在することを確認し、存在しない場合は最初に作成します)
#負荷分散戦略: 0: ローテーション トレーニング、各グループが 1 回アップロード、1: 指定されたグループのアップロード、2: 負荷分散、ファイルをアップロードするための最大の空き容量を持つグループを選択
#store_lookup=1 の場合、store_group はグループ名を指定する必要があります
ストアルックアップ=2
#2. nginx を入力し、nginx.conf を変更する
アップストリーム fastdfs_group1_server {
サーバー192.168.80.147:8888;
サーバー192.168.80.148:8888;
}
アップストリーム fastdfs_group2_server {
サーバー192.168.80.149:8888;
}
サーバ{
8888 を聞いてください。
サーバー名 ローカルホスト;
場所 ~ /group1/M0[0-9] {
proxy_pass http://fastdfs_group1_server;
}
場所 ~ /group2/M0[0-9] {
proxy_pass http://fastdfs_group2_server;
}
}
(3) ストレージの構成(ストレージ3台)
#1. /etc/fdfs/ と入力し、storage.conf を変更します。
a)、グループ1(192.168.80.147,192.168.80.148):
構成:
tracker_server=192.168.80.145:22122 (トラッカーの構成)
tracker_server=192.168.80.146:22122
グループ名=グループ1
base_path=/data/fastdfs/storage (パスが存在することを確認し、存在しない場合は最初に作成します)
store_path0=/data/fastdfs/storage (パスが存在することを確認し、存在しない場合は最初に作成します)
b)、グループ2(192.168.80.149):
構成:
tracker_server=192.168.80.145:22122 (トラッカーの構成)
tracker_server=192.168.80.146:22122
グループ名=グループ2
base_path=/data/fastdfs/storage (パスが存在することを確認し、存在しない場合は最初に作成します)
store_path0=/data/fastdfs/storage (パスが存在することを確認し、存在しない場合は最初に作成します)
注: グループ名を除いて、残りは同じです
#2. /etc/fdfs/ と入力し、mod_fastdfs.conf を変更します
設定ファイル:
base_path=/home/fastdfs/mod_fastdfs #ログ ディレクトリを保存します
tracker_server=192.168.80.145:22122 #tracker サーバーの IP アドレスとポート番号
tracker_server=192.168.80.146:22122
group_name=group1 # 現在のサーバーのグループ名 (147 148 group1,149 group2)
url_have_group_name=true #ファイルURLにグループ名が含まれているかどうか
store_path0=/home/fastdfs/storage #ストレージ パス
group_count = 2 #グループ数を設定します
#3. 最後に 2 つのグループの具体的な情報を追加します: (グループの数だけ入力します)
[グループ1]
グループ名=グループ1
ストレージサーバーポート=23000
ストアパス数=1
store_path0=/home/fastdfs/storage
[グループ2]
グループ名=グループ2
ストレージサーバーポート=23000
ストアパス数=1
store_path0=/home/fastdfs/storage
#4. nginx を入力し、nginx.conf を変更する
サーバ{
listen 8888; #storage 構成、http.server_post=8888 構成情報があり、一貫性がある必要があります
サーバー名 ローカルホスト;
場所 ~ /group[1-9]/M0[0-9] {
ngx_fastdfs_module;
}
}
(4) クラスタ情報の表示
#3 つのストレージ サーバーの中から client.conf を変更するサーバーを検索します
#1. /etc/fdfs/ と入力し、client.conf を変更します。
Base_path = /data/fastdfs/client
tracker_server = 192.168.80.145:22122 (複数のトラッカーで構成された複数のトラッカー マシンがあります)
トラッカーサーバー = 192.168.80.146:22122
#2. fdfs_monitorコマンドを実行してクラスタ情報を取得する
fdfs_monitor /etc/fdfs/client.conf
(5) テスト
#いずれかのマシンで client.conf を変更し、アップロードを実行します
#client.confを変更する