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はフィールドからカンマ区切りの値を取り出して新しいフィールドを形成します

推薦する

HTML テーブル境界コントロールの詳細な説明

上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...

HTML コードの書き方に関する提案のまとめ

リソースファイルのプロトコルを省略する画像、メディアファイル、スタイル、スクリプトの URL では、...

Vueは視覚的なドラッグページエディタを実装します

目次ドラッグアンドドロップの実装ドラッグイベントドラッグして開始リリースゾーンでの移動境界処理、角度...

Nginx サーバーの https 設定方法の例

Linux: Linux バージョン 3.10.0-123.9.3.el7.x86_64 ngin...

Django がローカル MySQL データベースに接続する手順 (pycharm)

ステップ1:setting.pyでデータベースを変更する # データベースを構成する DATABAS...

選択にスタイルを追加するための純粋な CSS (スクリプトなし) 実装

通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...

Linux コマンドで .sql ファイルをエクスポートおよびインポートする方法

この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...

MySQL の冗長インデックスと重複インデックスの詳細な説明

MySQL では、同じ列に複数のインデックスを作成できます。意図的であるかどうかにかかわらず、MyS...

RR および RC 分離レベルでのインデックスとロックのテスト スクリプトのサンプル コード

基本概念現在の読み取りとスナップショットの読み取りMVCC では、読み取り操作はスナップショット読み...

CSSプリコンパイル言語とその違いの詳細な説明

1. 何ですか マークアップ言語として、CSSは比較的シンプルな構文とユーザーに対する要件が低いが、...

VMware ESXi サーバー仮想化クラスター

目次まとめ環境とツールの準備サーバー仮想化のインストール VMware ESXi仮想マシンのオペレー...

JavaScript 操作要素の例

操作要素の詳細については、前回の記事を参照してください。JavaScript WebAPI、DOM、...

Vueの最初のプログラムを書くための勉強ノート

目次1. HTMLを書く、最初のVueプログラムビューテンプレートとデータに注意してください決定ルー...

モバイル開発におけるHTML5開発の現状を深く理解する

「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...

フロントエンドの上級者向けコースでは、JavaScript のストレージ機能の使い方を学習します。

目次序文背景実施計画の考え方js ストレージ機能ソリューション設計やっと要約する序文どの SaaS ...