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 をご愛顧いただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: vue3 のコンポーネントの互換性のない変更の詳細な説明
>>: MySQL の従来のソート、カスタム ソート、中国語のピンイン文字によるソート
以前、会社で小さな機能に取り組んでいたとき、特定の状況でデータがいくつあるかを数えてから問題を修正し...
まず、画像を見てみましょう。今日はこのエフェクトを作成します。 実は、何でもないんです。Web ペー...
タイトルの通り、ページを修正すると以下のような状況が発生する可能性があります。現在、古いページを改修...
この記事では、jQueryでカルーセルチャートを実装するための具体的なコードを参考までに共有します。...
背景日本語を学び始めた当初は、日本語の50音を覚えるのは簡単ではなく、特にカタカナを覚えるのは困難で...
これは非常にシンプルな純粋な CSS3 の白い雲の浮遊する背景効果です。浮かぶ白い雲の特殊効果は、C...
目次1. 静的実装方法: 2. 第2のシミュレーション動的方法3. 3番目の動的データ方式4. 動的...
序文MySQL スロー クエリ ログは、日常業務でよく遭遇する機能です。MySQL スロー クエリ ...
この記事では、オブジェクト パラメータをインスタンス化して MySQL でデータをクエリする方法を紹...
この記事では、プラグインを使用して画像の比例カットを実現するVueの具体的なコードを参考までに共有し...
多くの場合、画像をコンテナのサイズに合わせて調整する必要があります。 1. imgタグ方式幅と高さを...
高さ:100% が機能しないのはなぜですか?この知識は不人気ではありませんが、使用する際には混乱する...
この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...
マーキー要素を使用すると、単純なフォント(画像など)のスライドやその他の効果を実現できます。コードを...
MySQL の機能: MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレー...