Nginx 逆生成 Mogilefs 分散ストレージ例の詳細な説明

Nginx 逆生成 Mogilefs 分散ストレージ例の詳細な説明

1. 分散ストレージシステムの概要

情報技術の継続的な発展により、利便性がもたらされる一方で、データ量の増大、情報間のつながりの複雑化、データアクセスの同時性の向上、I/O 要件の厳しさ、データタイプの複雑化など、情報技術の急速な発展を継続するために早急に解決しなければならない問題も生じています。分散ストレージ システムの出現により、上記の問題の大部分はほぼ解決されました。

分散ストレージ システムは、複数の独立したデバイスにデータを保存します。従来のネットワーク ストレージ システムでは、すべてのデータを集中ストレージ サーバーに保存します。ストレージ サーバーはシステム パフォーマンスのボトルネックとなり、信頼性とセキュリティの焦点となり、大規模なストレージ アプリケーションのニーズを満たすことができません。分散ストレージシステムは、スケーラブルなシステム構造を採用し、複数のストレージサーバーを使用してストレージ負荷を分散し、ロケーションサーバーを使用してストレージ情報を検索します。システムの信頼性、可用性、アクセス効率が向上するだけでなく、拡張も簡単です。

分散ストレージ システムは、インターフェイスの種類に基づいて、一般的な分散ストレージと専用の分散ストレージに分けられます。一般的な分散ストレージとは、ファイル システム インターフェイスが存在せず、API インターフェイスを介してアクセスする必要があることを意味します。専用の分散ストレージは分散ファイル システムとも呼ばれ、通常はファイル システム インターフェイスがあり、直接マウントできます。一般的な分散ストレージには mogilefs、fastdfs などが含まれ、特殊な分散ストレージ システムには moosefs などがあります。

2. モギレフス

MogileFS はオープンソースの分散ファイル ストレージ システムです。MogileFS は、大量の小さなファイルを保存する作業シナリオに適しています。これは、LiveJournal の子会社である Danga Interactive によって開発されました。このチームは、Memcached、MogileFS、Perlbal など、多くの有名なオープンソース プロジェクトを開発してきました。

1. Mogilefs アーキテクチャ図:

2. モグリーフを構成するコンポーネント:

1.トラッカー (mogilefsd): Mogliefs のコア コンポーネント。主な機能は、(レプリケーション) ノード ファイルのレプリケーション、(削除) ファイルの削除、(クエリ) メタデータ クエリ、(モニター) ヘルス モニタリング、(リーパー) ストレージ障害のリセットなどです。メタデータ サーバーと呼ばれることもありますが、メタデータは保存されません。代わりに、MySQL などのデータベースにメタデータを保存します。アーキテクチャの信頼性を確保するために、通常は複数のトラッカーが存在します。トラッカーは、メタデータ情報の処理のみを担当するサイドバイサイド プロキシとして考えることができます。

2. データベース: データベースは Mogliefs メタデータを保存するために使用され、トラッカーがデータを管理します。したがって、通常は HA が推奨されます。

3.mogstored (ストレージノード): 実際のファイルが保存される場所。通常、実際のファイルのコピーが少なくとも 2 つ保存されます。

3. トポロジー図の例

3 つのノードに Trackers と mogstored を同時にインストールし、そのうちの 1 つのノードを選択して MySQL をインストールします。実稼働環境では、MySQL を個別にデプロイし、マスター/スレーブ レプリケーションを実行するのが最適です。 Trackers と mogstored は、異なるノードに個別にデプロイすることもできますが、実際の運用環境に基づいて決定する必要があります。これは主に、MySQL マスター スレーブ レプリケーションではなく、mogilefs をデモンストレーションするためのものです。 Mogilefs をマウントできるようにしたい場合は、FUSE を使用して実現できます。

mogilefs に保存されるファイル URL は非常に特殊であることに注意してください(mogilefs ファイル名生成のプロセスについては後で説明します)。たとえば、画像を保存する場合、ファイル URL は 6060/0000/0000/0000/00000021.jpg のような形式になることがあります。これはあまりユーザーフレンドリーではありません。ユーザーには、image.hello.com/21.jpg のような直感的な URL が必要な場合があります。したがって、Mogilefs の代わりに Nginx が使用されることが多いです。

4. システム環境とインストール

Mogilefs は比較的古いですが、成熟した分散ストレージです。Centos7 では互換性の問題がある可能性があることを考慮して、ここでは Centos6 を使用してデモを行います。

オペレーティング システム: CentOS リリース 6.6

モギレフス: 2.46

nginx: 1.10

マイスク:5.1

IP 割り当て:

n1:192.168.29.111、n2:192.168.29.112、n3:192.168.29.113、n4:192.168.29.114

構造は上の図に示されています。

1. MySQL、mogilefsd、mogstoredをn1ノードにインストールし、n1をトラッカーおよびストレージノードとして構成します。

MySQL は yum を使用して直接インストールされます。

~]# yum インストール -y mysql mysql-server

Mogilefs の Trackers および Storage Node コンポーネントをインストールします。インストール時には、次の Perl 関連の依存パッケージを必ずインストールしてください。

perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm
perl-IO-stringy-2.110-1.2.el6.rfx.noarch.rpmperl-Net-Netmask-1.9015-8.el6.noarch.rpm
Perlbal-1.78-1.el6.noarch.rpmperl-Perlbal-1.78-1.el6.noarch.rpm
Perlbal-doc-1.78-1.el6.noarch.rpmperl-IO-AIO-3.71-2.el6.x86_64.rpm

Mogilefs をインストールする前に、上記の依存パッケージをインストールする必要があります。コンポーネントをインストールします。

yum インストール -y MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm MogileFS-Server-2.46-2.el6.noarch.rpm

MogileFS-Server-mogilefsd を設定します。

~]# vim /etc/mogilefs/mogilefsd.conf #Mogilfs Trackers のメイン設定ファイル
# デーモンモードを有効にしてバックグラウンドで動作し、syslog を使用する
daemonize = 1 #デーモンプロセスとして実行するかどうか。
# デーモンの pid を保存する場所 (init スクリプトと同じである必要があります)
pidfile = /var/run/mogilefsd/mogilefsd.pid #pidファイルパス# データベース接続情報
db_dsn = DBI:mysql:mogilefs:host=192.168.29.111 #データベースアドレス db_user = moguser #データベースユーザー名とパスワードを設定 db_pass = 123456
# mogilefs クライアント要求をリッスンする IP:PORT
listen = 0.0.0.0:7001 # リッスン アドレスとポート # 上記でポートを定義しない場合はオプションです。
conf_port = 7001 # デフォルトポート # デフォルトで開始するクエリワーカーの数。
query_jobs = 10 #クエリプロセスの数 #デフォルトで開始する削除ワーカーの数。
ジョブを削除する = 1 
# デフォルトで開始するレプリケートワーカーの数。
複製ジョブ = 5
# デフォルトで起動する Reaper ワーカーの数。
# (通常はこれを増やす必要はありません)
リーパージョブ = 1
# デフォルトで開始する fsck ワーカーの数。
# (fsck 時に大きな負荷が発生する可能性があります)
#fsck_ジョブ = 1
# 予約する最小容量(メガバイト単位)
# デフォルト: 100
# 最大ファイルサイズよりも大きいサイズに設定することを検討してください
# 通常はアップロードされます。
#最小空き容量 = 200
# ストレージノードが応答するまで待機する秒数。
# デフォルト: 2
# この値を低く保つと、ビジー状態のストレージノードはすぐに無視されます。
#ノードタイムアウト = 2
# ストレージ ノードへの接続を待機する秒数。
# デフォルト: 2
# この値を低く保つと、過負荷のノードがスキップされます。
#接続タイムアウト = 2
# レプリケーションにセカンダリノードのgetポートの使用を許可します。
# Apache または類似の GET 用の設定がある場合
#repl_use_get_port = 1

設定を変更した後、データベースにアクセスしてリモートで接続できる root ユーザーを作成するか、mogdbsetup を使用してデータベースを初期化します。

mysql> GRANT ALL ON mogilefs.* TO 'moguser'@'192.168.29.%' IDENTIFIED BY '123456'; # mogilefs データベースを管理するためのすべての権限を持ち、192.168.29.* のユーザーがリモートで接続できるようにするユーザー moguser を作成します。
mysql> 権限をフラッシュします。
mysql>終了
~]# mogdbsetup --dbhost=127.0.0.1 --dbuser=moguser --dbpass=123456

初期化が完了すると、作成された mogilefs ライブラリとその中のテーブルが MySQL で確認できます。

mogilefs を起動し、ポート 7001 がリスニング状態であることを確認します。

~]# サービス mogilefsd を開始
mogilefsd を起動しています [ OK ]
~]# ss -lnt

注:単一点障害と平均 I/O 負荷のリスクを排除するために、n2 ノードと n3 ノードの両方に Trackers サービスをインストールできます。

3. n1でストレージノードを構成する

ストレージ ノード構成ファイルのパスは /etc/mogilefs/mogstored.conf です。

~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000 #同時接続の最大数httplisten = 0.0.0.0:7500 #Mogilefs のデータ転送は http プロトコルを介して行われます。リスニング アドレスとポートは次のとおりです。mgmtlisten = 0.0.0.0:7501 #ヘルス モニタリング用のリスニング アドレスとポートdocroot = /mogliefs/mogdata #データ ストレージ パス。ディレクトリのグループと所有者は mogilefs である必要があります

データ ストレージ ディレクトリを作成し、グループと所有者を mogilefs に変更します。

~]# mkdir -pv /mogliefs/mogdata
~]# chown -R mogilefs.mogilefs /mogliefs/

mogstored を起動し、プロセスが正常に開始されているかどうか、およびポートがリッスンしているかどうかを確認します。

~]# サービス mogstored の開始
~]# ss -lnt #リスニングポートは7500と7501です

4. n1 の手順に従って、ノード n2 と n3 に Mogilefs をインストールし、n1 の設定ファイルを n2 と n3 にコピーします。

~]# scp /etc/mogilefs/*.conf [email protected]:/etc/mogilefs/
~]# scp /etc/mogilefs/*.conf [email protected]:/etc/mogilefs/

mogstored サービスを起動し、監視を確認します。

~]# サービス mogstored の開始
~]# ss -lnt #リスニングポートは7500と7501です

5. n1 で mogadm コマンドを使用して、すべてのノードをクラスターに統合します。

ストレージ ノードを追加して確認します。

1 ~]# mogadm ホスト 192.168.29.111 を追加します --ip=192.168.29.111 --port=7500 --status=alive
2 ~]# mogadm ホスト 192.168.29.112 を追加します --ip=192.168.29.112 --port=7500 --status=alive
3 ~]# mogadm ホスト 192.168.29.113 を追加します --ip=192.168.29.113 --port=7500 --status=alive
~]# mogadm チェック

mogilefs クラスター内のストレージを異なるデバイスとして認識させたい場合は、作成した /mogliefs/mogdata ディレクトリの下に dev* という名前のディレクトリを作成し、各ノードをストレージ デバイスとして使用できるようにする必要があります。 Mogilefs は冗長性を異なるデバイスに保存し、各ノードは異なるデバイスとして識別される必要があります。

n1、n2、n3 の /mogliefs/mogdata/ ディレクトリにそれぞれ dev1、dev2、dev3 ディレクトリを作成し、デバイスを Trackers に追加します。

1 ~]# mogadmデバイスを追加 192.168.29.111 1
2 ~]# mogadmデバイスを追加 192.168.29.112 2
3 ~]# mogadmデバイスを追加 192.168.29.113 3

6. ドメインとクラスを作成する

Mogilefs では、複数ノードでのファイルコピーの管理を容易にするため、通常はデバイス内のファイル単位ではなくクラス単位で管理します。コピーや削除などの操作はクラスを最小単位で行います。各クラスには多数のファイルを配置でき、クラスのサイズは固定されていません。

Mogilefs のストレージ空間では、すべてのデータ ファイルが同じ平面上にあるため、ファイルに同じ名前が付くことは許されず、Mogilefs の柔軟性に影響するため、ドメイン (名前空間) の概念が導入されています。ドメインにはクラスが含まれており、異なるドメインに同じファイル名が存在する可能性があります。

~]# mogadm domain add imgs #imgsという名前のドメインを作成する
~]# mogadm domain add text #textという名前のドメインを作成する
~]# mogadm domain list #ドメインリストを表示

クラスのプロパティをカスタマイズできます。形式は次のとおりです: mogadm class add <domain> <class> [opts]

~]# mogadm class add imgs png --mindevcount=3 --hashtype=MD5 #ドメイン imgs に png というクラスを定義し、3 つのコピーを異なるデバイスにコピーし、検証に MD5 を使用します~]# mogadm class add imgs jpg --mindevcount=3 --hashtype=MD5 #ドメイン imgs に jpg というクラスを定義し、3 つのコピーを異なるデバイスにコピーし、検証に MD5 を使用します~]# mogadm domain list

7. Mogilefsを使用してアップロードとダウンロードのテストを行う

Mogilefs は、保存されたデータを管理するための多くのコマンドを含む独自の API インターフェースと対話できます。たとえば、データをアップロードするコマンドは mogupload であり、データを表示するコマンドは mogfileinfo などです。

例: ファイル /test/123.png を Mogilefs クラスターにアップロードするテスト (ファイルは事前にローカルに準備されています):

~]# mogupload --trackers=192.168.29.111 --domain=imgs --class=png --key='/111.png' --file='/test/123.png' # IP 192.168.29.111 の Trackers 経由で 123.png ファイルをアップロードし、ドメインを imgs、クラスを png としてスペースに保存し、名前を 111.png に変更します
~]# mogfileinfo --trackers=192.168.29.111 --domain=imgs --class=png --key='/111.png' #ドメイン imgs およびクラス png 内のキー 111.png を持つファイルの保存状態を確認します。 

この時点で、Mogilefs 分散ストレージ クラスターは構築されていますが、クライアントがこれと通信できるようにするには、インターフェイス上でプログラミングする必要があり、非常に面倒です。幸いなことに、通信には Nginx をリバース プロキシとして使用できます。以下は、Nginx リバース Mogilefs の手順を示しています。

5.Nginx 反世代 Mogilefs

1. n2 と n3 の mogilefsd サービスを開き、3 つのノードすべてをトラッカーとして設定します (構成ファイルが n1 と同じであることを確認してください)。

~]# サービス mogilefsd を開始

2. n4ノードにNginxをコンパイルしてインストールする

依存パッケージをインストールします。

~]# yum インストール gcc gcc-c++ perl pcre-devel openssl openssl-devel

Nginx コンパイル インストール パッケージ nginx-1.10.3.tar.gz と Nginx_Mogilefs モジュール nginx_mogilefs_module-1.0.4.tar.gz をダウンロードして展開します。

~]# ls
nginx-1.10.3 nginx_mogilefs_module-1.0.4
nginx-1.10.3.tar.gz nginx_mogilefs_module-1.0.4.tar.gz
~]# cd nginx-1.10.3
./configure \
> --prefix=/usr \
> --sbin-path=/usr/sbin/nginx \
> --conf-path=/etc/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_flv_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/tmp/nginx/client/ \
> --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
> --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
> --http-scgi-temp-path=/var/tmp/nginx/scgi \
> --with-pcre \
> --デバッグあり\
> --add-module=../nginx_mogilefs_module-1.0.4/ #Mogilefs モジュールが配置されているパスを必ず追加してください。これは必須です。
~]# make と make install

nginx ユーザーを追加し、nginx を起動します。

~]# useradd -s /sbin/nologin -M nginx
~]# /usr/sbin/nginx

3. Nginxを設定する

単一トラッカーの例:

場所 /imgs/ {
   mogilefs_tracker 192.168.29.111:7001; #単一トラッカーの例 mogilefs_domain imgs; #ドメインの指定
   mogilefs_class png jpg; #クラスを指定

   mogilefs_pass { #送信関連の設定 proxy_pass $mogilefs_path;
    proxy_hide_header コンテンツタイプ;
    proxy_buffering をオフ;
   }
  }

複数のトラッカーの例:

nginx 構成の http 構成セクションにスケジューリング モジュールを追加します。

1 アップストリーム mogsvr {
2 サーバー 192.168.29.111:7001;
3 サーバー 192.168.29.112:7001;
4 サーバー 192.168.29.113:7001;
5 }

nginx 構成のサーバー構成セクションに以下を追加します。

場所 /imgs/ {
    mogilefs_tracker mogsvr;
   mogilefs_domain 画像;
   mogilefs_class png jpg;

   モギレフス_パス {
    proxy_pass $mogilefs_path;
    proxy_hide_header コンテンツタイプ;
    proxy_buffering をオフ;
   }
  }

nginx を再起動し、nginx 経由で以前にアップロードした画像にアクセスします。

要約:

ファイルをアップロードするときに、/usr/local/share/perl/5.8.4/Client.pm の 282 行目にエラー メッセージ MogileFS::Backend: could't connect to mogilefsdbackend at /usr/local/share/perl/5.8.4/Client.pm line 282 が発生しました。これは、mogilefsd サービスが MySQL に接続できないためです。両者間の接続を確認することで、エラーを見つけることができます。

さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。

以下もご興味があるかもしれません:
  • nginx FastDFS 分散ストレージモジュールのテスト方法
  • nginx を使用して分散電流制限を実装する方法
  • Nginx サーバーリバースプロキシ proxy_pass 設定方法の説明
  • 負荷分散を実現するために nginx をリバースプロキシとして使用する例
  • Nginx リバース プロキシ Websocket 構成例
  • Nginx 学習まとめ 5 (nginx リバース プロキシ)

<<:  vue3 のコンポーネントの互換性のない変更の詳細な説明

>>:  MySQL の従来のソート、カスタム ソート、中国語のピンイン文字によるソート

推薦する

SCSS スタイルのコードを 50% 削減する 14 の実践的な経験

序文Sass は CSS3 言語の拡張機能です。Sass を使用すると、より良いスタイルシートをより...

Vue で配列パラメータを渡すための get / delete メソッド

フロントエンドとバックエンドがやり取りする場合、get または delete を介してバックエンドに...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

Photoshop を使って Web ワイヤーフレームを作成する方法

この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...

テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加によく使用される MySQL の SQL 文の概要

この記事では、テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加を行う一般的な ...

Linux システムでの gcc コマンドの使用法の詳細な説明

目次1. 前処理2. コンパイル3. コンパイル4. リンク1. gccのインストール(Ubuntu...

MySql のクラッシュとサービスの起動失敗の解決策

私は長い間PHPに触れてきましたが、インストール環境は非常に不慣れです。多くの問題に遭遇しました。B...

Nodejsはgitee実装コードに自動的に同期するドキュメント同期ツールを作成します

本来の意図このツールを作った理由は、コンピューターを使用しているときにいつでも毎日の仕事や生活を記録...

MySQL デッドロックのトラブルシューティング プロセスの完全な記録

序文これまで遭遇したデータベースのデッドロックはすべて、バッチ更新中のロック順序の不一致が原因でした...

MySQL マスタースレーブレプリケーションでエラーをスキップする方法

1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法 mysql&...

kindとDockerを使用してローカルKubernetes環境を起動する

導入Kubernetes を使い始めるのに丸一日を費やしたことはありませんか?最近登場したいくつかの...

Ansible を使用した Nginx のバッチ デプロイのサンプル コード

1.1 nginxインストールパッケージとインストールスクリプトをクライアントにコピーし、スクリプト...

Dockerにおけるコンテナとイメージの違いについてお話ししましょう

鏡とは何ですか?イメージは、複数のイメージ レイヤー (UnionFS および AUFS ファイル ...

Dockerコンテナの自動終了を停止する方法の詳細な説明

この記事では、Docker コンテナとフロントエンド プロセスの関係と、コンテナを永続的に実行できる...

Dockerコンテナの入退出方法の詳細な説明

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...