fastdfs+nginxクラスタ構築の実装

fastdfs+nginxクラスタ構築の実装

1. fastdfs の紹介

1. fastdfsとは何か

  • Fastdfs は軽量のオープンソース分散ファイルシステムです。
  • Fastdfs は主に大容量のファイルストレージと高同時アクセスの問題を解決し、ファイルアクセス時の負荷分散を実現します。
  • Fastdfs はソフトウェア RAID を実装しており、ストレージに安価な IDE ハードディスクを使用し、ストレージ サーバーのオンライン拡張をサポートします。同じ内容のファイルのコピーを 1 つだけ保存できるため、ディスク領域を節約できます。
  • Fastdfs はクライアント API 経由でのみアクセスでき、POSIX アクセス メソッドはサポートされていません。
  • Fastdfs は、リソース ファイル (画像、ドキュメント、オーディオ、ビデオなど) を保存する大規模および中規模の Web サイトに特に適しています。

2.fastdfsフレームワーク図

著者(YuQing)はフレームワーク図を次のように示しています。

で:

トラッカー サーバー:トラッキング サーバーは主にスケジューリング作業を実行し、アクセスの負荷分散の役割を果たします。ストレージ サーバーのステータスを記録し、クライアントとストレージ サーバーを接続するハブとして機能します。
ストレージサーバー: ストレージサーバー、ファイルとメタデータはストレージサーバーに保存されます
グループ:グループ。ボリュームとも呼ばれます。同じグループ内のサーバー上のファイルは、まったく同じファイル識別子を持ちます。これは、グループ名とファイル名(パスを含む)の2つの部分で構成されます。
メタデータ:ファイル関連の属性。幅=1024、高さ=768 などのキーと値のペア形式

3. ファイルのアップロードプロセス

(1)クライアントは追加のパラメータなしでトラッカーにアップロード先のストレージを要求します。
(2)トラッカーは利用可能なストレージを返す。
(3)クライアントはストレージと直接通信してファイルのアップロードを完了します。

4. ファイルのダウンロードプロセス

(1)クライアントはトラッカーにダウンロードしたファイルの保存を要求し、パラメータはファイル識別子(グループ名とファイル名)である。
(2)トラッカーは利用可能なストレージを返す。
(3)クライアントはストレージと直接通信してファイルのダウンロードを完了します。

5. 同期メカニズム

(1)同一グループ内のストレージサーバはピアであり、ファイルのアップロード、削除等の操作はどのストレージサーバでも実行できる。
(2)ファイル同期は、プッシュ方式、つまりソースサーバがターゲットサーバに同期する方式を使用して、同じグループ内のストレージサーバ間でのみ実行されます。
(3)同期する必要があるのはソースデータのみであり、バックアップデータは再度同期する必要はありません。そうしないとループが形成されます。
(4)上記の2番目のルールには例外があります。新しいストレージサーバーが追加されると、既存のストレージサーバーは既存のすべてのデータ(ソースデータとバックアップデータを含む)を新しいサーバーに同期します。

6. トラッカーサーバーのディレクトリ構造

(1)データ

storage_groups.dat: ストレージグループ情報

storage_servers.dat: ストレージ サーバー リスト

(2)ログ

trackerd.log: トラッカーサーバーのログファイル

7. ストレージサーバーのディレクトリ構造

1) データ

.data_init_flag: 現在のストレージ サーバーの初期化情報

storage_stat.dat: 現在のストレージ サーバーの統計

同期: データ同期に関連するファイルを保存します

binlog.index: 現在の binlog ファイルのインデックス番号

binlog.###: 更新操作の記録(ログ)を保存します

${ip_addr}_${port}.mark: 同期の完了ステータスを保存します

(2)ログ

              storaged.log: ストレージ サーバーのログ ファイル

上記の理論的参照:

ChinaUnix フォーラム: http://bbs.chinaunix.net/forum-240-1.html

GitHub ダウンロードアドレス: https://github.com/happyfish100

2. fastdfsのインストールとテスト

1. ダウンロード

ダウンロードが必要: libfastcommon fastdfs (2.0 より前のバージョンでは libevent に依存する必要があります)

2. インストール

(1)libfastcommonをインストールする

$ tar xzvf libfastcommon-1.0.38.tar.gz
$ cd libfastcommon-1.0.38
ビルド
$ sudo ./make.sh インストール

(2)fastdfsをインストールする

$ tar xzvf fastdfs-5.11.tar.gz
$ cd fastdfs-5.11
ビルド
$ sudo ./make.sh インストール

3. 構成

クラスタ構築トポロジ図(ハードディスク不足のため、192.168.31.4 と 192.168.31.14 は現在利用できません。容量拡張後に追加されます)

(1)トラッカーの設定(192.168.31.95/192.168.31.99)

$cd /etc/fdfs/

ディレクトリファイルは次のとおりです。

次に、次のように実行します。

$ sudo su
#cp トラッカー.conf.サンプル トラッカー.conf 

tracker.conf ファイルを設定します。

vim トラッカー.conf

変更: base_path=/home/fastdfs/tracker (注: このディレクトリは開始前に存在している必要があります。存在しない場合はエラーが報告され、パスが見つからないため、新しいトラッカー ディレクトリを手動で作成する必要があります)

起動する:

/etc/init.d/fdfs_trackerd 開始

(2)ストレージを構成する(192.168.31.2/192.168.31.12)

$ cd /etc/fdfs
$ sudo su
#cp ストレージ.conf.サンプルストレージ.conf

改訂:

グループ名 = グループ1 (192.168.31.2) または グループ2 (192.168.31.12)

ベースパス=/home/fastdfs/ストレージ

store_path0=/home/fastdfs/ストレージ

変更: トラッカー サービスの IP とポート:

tracker_server=192.168.31.95:22122 (注: ここで 31.2 tracker_server は 31.95 を構成し、31.12 tracker_server は 31.99 を構成します)

起動する:

/etc/init.d/fdfs_storaged 開始

fastdfsの対応する構成情報を表示します

# fdfs_monitor /etc/fdfs/storage.conf

次の情報が存在する場合、成功とみなされます。

アップロードをテストし、192.168.31.99 トラッカーマシンを fdfs_client として選択します。

$ cd /etc/fdfs

$ sudo su

# cp client.conf.sample クライアント.conf

# vim クライアント.conf

改訂:

ベースパス = /home/fastdfs

トラッカーサーバー=192.168.31.99:22122

net.png ファイルのアップロードをテストします。

fdfs_upload_file /etc/fdfs/client.conf net.png

3. nginxの設定

インストールする必要があるもの:

fastdfs-nginx-module-1.20 プラグインに似たもの

nginx-1.14.2.tar.gz

nginx をインストールするには、以下をインストールする必要があります。

openssl zlib pcre

astdfs-nginx-module を nginx に挿入します (configure および make&make install nginx を実行する必要があります)

./configure --add-module=../../fastdfs-nginx-module/src/

エラーが報告されます: fastdfs-nginx-module-1.20/src/config ファイルを変更する必要があります

ngx_addon_name=ngx_http_fastdfs_module

テスト -n "${ngx_module_link}" の場合、
  ngx_module_type=HTTP
  ngx_module_name=$ngx_addon_name
  ngx_module_incs="/usr/local/include"
  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\"'"
  .auto/モジュール
それ以外
  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/local/include"
  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\"'"
フィ

変更後:

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

ngx_addon_name=ngx_http_fastdfs_module

テスト -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\"'"
  .auto/モジュール
それ以外
  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\"'"
フィ

その後、再設定してmake && make install

次に、cp mod_fastdfs.conf /etc/fdfs/ を実行し、mod_fastdfs.conf ファイルを変更します。

$ cd fastdfs-nginx-module-1.20/src
$ cp mod_fastdfs.conf /etc/fdfs/

mod_fastdfs.conf を変更する

トラッカーサーバー=192.168.31.99:22122
store_path0=/home/fastdfs/ストレージ
グループ名=グループ1

[グループ1]
グループ名=グループ1
ストレージサーバーポート=23000
ストアパス数=1
store_path0=/home/fastdfs/ストレージ


[グループ2]
グループ名=グループ2
ストレージサーバーポート=23000
ストアパス数=1
store_path0=/home/fastdfs/ストレージ

fastdfs-5.11/conf/

$ cp http.conf /etc/fdfs/
$ cp mime.types /etc/fdfs/

変更: http.conf

トークンチェック失敗

nginx.confを変更する

/usr/local/nginx/sbin をコピーします
vim ../conf/nginx.conf

ポート番号8888は/etc/fdfs/storage.confのhttp.server_port=8888に対応します。

写真をアップロード

http://192.168.31.12:8888/group1/M00/00/00/wKgfDFzxVTyAM4suABWWvfB6x_k962.png

fastdfs+nginx クラスター構築の実装に関するこの記事はこれで終わりです。fastdfs+nginx クラスター構築の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx+FastDFSでイメージサーバーを構築

<<:  MySQLを水平から垂直に、垂直から水平に変換する方法

>>:  MySQLはフィールドからカンマ区切りの値を取り出して新しいフィールドを形成します

推薦する

MySQL自動シャットダウン問題への対処の実践記録

最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...

CSS3 パッケージ化後にプレフィックスプラグインを自動的に追加する方法の詳細な説明: autoprefixer

vue-cli で構築されたプロジェクト スキャフォールディングでは、すでに autoprefix...

uniappのグローバル変数実装の詳細な説明

序文この記事では、uniapp グローバル変数の実装方法をいくつかまとめています。詳細な知識は、uV...

図を使ってWeb2.0とは何かを説明する

最近はWeb2.0という言葉をよく耳にしますが、Web2.0とは何でしょうか? Web 1.0 とど...

MySQL8インストーラーバージョングラフィックチュートリアル

インストール必要な書類は下部に記載されていますステップ1 mysql-installer-web-c...

docker ログが取得できない問題の解決方法

毎日サービスをチェックしているときに、portainer からコンテナ ログを確認しようとしたところ...

HTMLのマーキータグは、シームレスなスクロールマーキー効果を実現します。

<marquee> タグはペアで表示されるタグです。最初のタグ <marquee...

ubuntu18.04 での qt5.12.8 のインストールと環境設定に関する詳細なチュートリアル

環境システム: Ubuntu 18.04ソフトウェア: qt5.12.8 1. インストールパッケー...

外部ファイル(js/vbs/css)をインポートするときに文字化けを回避する方法

ページ内にはjs、cssなどの外部ファイルが導入されており、外部ファイルのエンコードが現在のページフ...

Vue-Routerのインストールプロセスと原理の詳細

目次1. フロントエンドルーティングの実装原則2. vue-Routerの基本的な使い方2.1. イ...

MySQL データベースを手動および自動でバックアップする 8 つの方法

MySQL は人気のオープンソースデータベース管理システムとして多くのユーザーが利用しています。デー...

MySql 8.0.11 のインストール プロセスと Navicat とのリンク時に発生する問題の概要

私のシステムとソフトウェアのバージョンは次のとおりです。システム環境: win7、64ビットMySQ...

JavaScript ベースで年・月・日の 3 階層連携を実現

この記事では、年、月、日の3段階のリンクを実現するためのJavaScriptの具体的なコードを参考ま...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

Linux 型バージョン メモリ ディスク クエリ コマンド紹介

1. まず、Linux システムのバージョン内容について概要を説明します。 1. カーネルバージョン...