FastDFS、FastDHTを使用したLinux環境のインストール詳細説明

01-はじめに

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:22122
  http:
    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を変更する

継続的に更新されます!

おすすめ

転載: blog.csdn.net/weixin_51689532/article/details/130680314