[FastDFS]インタビュアー:ファイルの大規模な分散ストレージを実現するにはどうすればよいですか? (フルコンバット)

著者は、正確なタイミングタスクと遅延キュー処理機能を備えた、同時性の高いシナリオで、シンプルで安定したスケーラブルな遅延[メッセージキュー](https://cloud.tencent.com/product/cmq?from=10680)フレームワークを個人的に開発しました。半年以上のオープンソース以来、それは十数以上の中小企業に正確なタイミングスケジューリングソリューションを提供することに成功し、生産環境のテストに耐えてきました。より多くの子供たちの靴に利益をもたらすために、オープンソースフレームワークのアドレスが与えられました:

https://github.com/sunshinelyz/mykit-delay

PS:スターソースコードへようこそ。素晴らしいコードを作成することもできます。

前に書く

「[** [FastDFS]の友人は、CentOS 8サーバーでFastDFS環境を構築すると、常にエラーが報告されると言っていましたか? **](https://mp.weixin.qq.com/s?__biz=Mzg3MzE1NTIzNA==&mid=2247487776&idx=1&sn=f2e97296f36c52d94c8dfa3f0f1292c1&chksm=cee50eedf99287fbac48600cfd56ad0401a407838790e403174720f05ce38826c31bbc09aa68&token=1639059128&lang=zh_CN&scene=21#wechat_redirect)」の記事では、CentOS8サーバーでFastDFS環境をセットアップする方法について詳しく説明しています。実稼働環境では、ファイルの大規模な分散ストレージを実現するために、FastDFSの高可用性を実現する必要があることがよくあります。では、FastDFSの高可用性を実現するにはどうすればよいでしょうか。現在、CentOS8サーバーに基づいてFastDFSの高可用性クラスター環境を構築しています。

サーバーバージョン

サーバーのコマンドラインで次のコマンドを入力して、サーバーのカーネルバージョンを表示します。

[ root@localhost lib]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911(Core)

ご覧のとおり、クラスター内の各サーバーのカーネルバージョンはリリース8.1.1911(コア)です。

サーバー計画

ここでは、合計6台のサーバーを計画します。つまり、2台のトラッカーサーバー、4台のストレージサーバーのうち、2台のストレージサーバーがグループ1、2台のストレージサーバーがグループ2です。詳細は以下の通りです。

tranker1:192.168.175.101

tracker2:192.168.175.102

storage1:192.168.175.103 group1

storage2:192.168.175.104 group1

storage3:192.168.175.105 group2

storage4:192.168.175.106 group2

環境への準備

FastDFSをダウンロード

各サーバーで次のコマンドを実行して、FastDFSをダウンロードします。

[ root@localhost source]# wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
[ root@localhost source]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
[ root@localhost source]# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz

インストール環境の依存関係

各サーバーで次のコマンドを実行して、FastDFSが依存する環境をインストールします。

[ root@localhost dest]# yum install gcc gcc-c++[root@localhost dest]# yum install libtool zlib zlib-devel openssl openssl-devel
[ root@localhost dest]# yum -y install pcre pcre-devel libevent libevent-devel perl unzip net-tools wget

FastDFSをインストール

**libfastcommon **をインストールします###

各サーバーで次のコマンドを順番に実行します。

(1)libfastcommonの圧縮パッケージを解凍します

[ root@localhost source]# tar -zxvf V1.0.43.tar.gz

(2)コンパイルしてインストールするコンパイルしてインストールする

[ root@localhost source]# cd libfastcommon-1.0.43/[root@localhost libfastcommon-1.0.43]# ./make.sh &&./make.sh install

(3)実行結果を確認して、インストールが成功したかどうかを確認します。

[ root@localhost libfastcommon-1.0.43]# ls /usr/lib64|grep libfastcommon
libfastcommon.so

[ root@localhost libfastcommon-1.0.43]# ls /usr/lib|grep libfastcommon
libfastcommon.so

fastdfsをインストールします

各サーバーで次のコマンドを順番に実行します。

(1)fastdfsを解凍します

[ root@localhost source]# tar -zxvf V6.06.tar.gz

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

[ root@localhost source]# cd fastdfs-6.06/[root@localhost fastdfs-6.06]# ./make.sh &&./make.sh install

(3)fastdfsが正常にインストールされているかどうかを確認します

[ root@localhost fastdfs-6.06]# ls /usr/bin|grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_regenerate_filename
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file

トラッカーサービスのインストールと展開

トラッカー構成ファイルをコピー

2つのトラッカーサーバーで、次のコマンドを順番に実行します。

[ root@localhost fastdfs-6.06]# cd /etc/fdfs/[root@localhost fdfs]# cp client.conf.sample client.conf
[ root@localhost fdfs]# cp tracker.conf.sample tracker.conf

**注:storage.confファイルを生成する必要はありません。これら2つのトラッカーはストレージとして使用されません。 ****

**Nginx **をインストールします###

2つのトラッカーサーバーで、次のコマンドを順番に実行します。

注:fastdfs-nginx-moduleをトラッカーにインストールする必要はありません

(1)Nginxを解凍します

[ root@localhost source]# tar -zxvf nginx-1.17.8.tar.gz

(2)nginx構成、http_stub_status_moduleモジュール

[ root@localhost fdfs]# cd /usr/local/source/nginx-1.17.8/[root@localhost nginx-1.17.8]# ./configure --prefix=/usr/local/soft/nginx --with-http_stub_status_module 

(3)Nginxをコンパイルしてインストールします

[ root@localhost nginx-1.17.8]# make && make install

(4)インストールが成功したかどうかを確認します

[ root@localhost nginx-1.17.8]# ls /usr/local/soft/| grep nginx
nginx

(5)指定したコンパイルパラメータが機能するかどうかを確認します

[ root@localhost fdfs]# /usr/local/soft/nginx/sbin/nginx -V
nginx version: nginx/1.17.8
built by gcc 8.3.120190507(Red Hat 8.3.1-4)(GCC) 
configure arguments:--prefix=/usr/local/soft/nginx --with-http_stub_status_module 

**FastDFS **を構成して開始します###

2つのトラッカーで、FastDFSを構成して開始します。

(1)トラッカーサービスに必要なディレクトリを作成します

[ root@localhost fdfs]# mkdir /data/fastdfs
[ root@localhost fdfs]# mkdir /data/fastdfs/tracker
[ root@localhost fdfs]# chmod 777/data/fastdfs/tracker

(2)トラッカーサービスを構成し、tracker.confファイルを変更します

[ root@localhost fdfs]# vi /etc/fdfs/tracker.conf

base_pathの値を上記で作成したディレクトリに変更するだけです

 base_path =/data/fastdfs/tracker

(3)トラッカーサービスを開始する

[ root@localhost fdfs]# /etc/init.d/fdfs_trackerd start

(4)トラッカーサービスが正常に開始されているかどうかを確認します

[ root@localhost fdfs]# ps auxfww | grep fdfs
root      150670.00.012320964 pts/0    S+15:140:00||           \_ grep --color=auto fdfs
root      150260.00.1901605940?        Sl   15:130:00/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

注:fdfs_trackerdが表示されている場合は、トラッカーサービスが正常に開始されたことを意味します。

(5)トラッカーサービスがポート22122にバインドされているかどうかを確認します

[ root@localhost dest]# netstat -anp | grep 22122
tcp        000.0.0.0:221220.0.0.0:*               LISTEN      15026/fdfs_trackerd 

注:ポート22122は、以下に示すように/etc/fdfs/tracker.confで定義されています。

# the tracker server port
port =22122

**client.conf **を構成します###

両方のトラッカーで、client.confを構成し、fastdfsクライアントが使用する構成ファイルを構成します。

(1)client.confを構成します

[ root@localhost fdfs]# vi /etc/fdfs/client.conf

次の2つの構成で使用されるトラッカーディレクトリとサーバーアドレスポート

base_path =/data/fastdfs/tracker
tracker_server =192.168.175.101:22122
tracker_server =192.168.175.102:22122

注:2つのトラッカーのclient.conf構成は同じです

(2)クライアントの構成から、クライアントはtracker_serverの情報を知るだけでよいことがわかります。トラッカーサーバーの役割も[負荷分散](https://cloud.tencent.com/product/clb?from=10680)とスケジューリングです

(3)ストレージサーバーの役割は[ファイルストレージ](https://cloud.tencent.com/product/cfs?from=10680)であり、クライアントによってアップロードされたファイルは最終的にストレージサービスに保存されます

テストファイル

client.confを使用して、テストするファイルをアップロードします。

(1)タッカーからファイルをアップロードする

[ root@0268c2dc2bf6 ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/a.txt                    group1/M00/00/00/rBEABF5aTEeAXHF4AAAABHf4XZU792.txt

返されるgroup1はgroup1であることに注意してください。このtxtファイルは、group1の下の2台のマシンにあります。

[ root@d5d19e99e782 docker_tmp]# ls /data/fastdfs/storage/data/00/00
rBEABF5aTEeAXHF4AAAABHf4XZU792.txt

[ root@f201111d0698 docker_tmp]# ls /data/fastdfs/storage/data/00/00
rBEABF5aTEeAXHF4AAAABHf4XZU792.txt

(2)グループアップロードファイルを指定する

特定のグループにアップロードしたい場合はどうすればよいですか?例:group2へのアップロードを指定します

[ root@0268c2dc2bf6 ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/a.txt 192.168.175.105:23000
group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

注:group2のいずれかのIPとポートを指定するだけです。

(3)効果を見る

[ root@494ac47d63f8 fdfs]# ls /data/fastdfs/storage/data/00/00
rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

[ root@59fa1efff362 fdfs]# ls /data/fastdfs/storage/data/00/00
rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

ストレージサービスのインストールと展開

デフォルトの構成ファイルを生成します

4つのストレージの場合:fastdfsを開始するためのデフォルトの構成ファイルを生成します。

[ root@localhost fastdfs-6.06]# cd /etc/fdfs/[root@localhost fdfs]# cp storage.conf.sample storage.conf
[ root@localhost fdfs]# cp client.conf.sample client.conf

注:トラッカーサービスがストレージで実行されなくなったため、tracker.confを生成する必要はありません。

**Nginx **をインストールします###

4つのストレージ:nginxとfastdfs-nginx-moduleをインストールします

(1)nginxを解凍します

[ root@localhost source]# tar -zxvf nginx-1.17.8.tar.gz

(2)fastdfs-nginx-moduleを解凍します

[ root@localhost source]# tar -zxvf V1.22.tar.gz

(3)構成ファイルを変更し、/ usr / localを/ usrに置き換えます。

[ root@localhost source]# cd fastdfs-nginx-module-1.22/[root@localhost fastdfs-nginx-module-1.22]# cd src
[ root@localhost src]# vi config

(4)Nginx構成、fastdfs-nginx-moduleおよびhttp_stub_status_moduleモジュールを追加します

[ root@localhost fdfs]# cd /usr/local/source/nginx-1.17.8/[root@localhost nginx-1.17.8]# ./configure --prefix=/usr/local/soft/nginx --with-http_stub_status_module --add-module=/usr/local/source/fastdfs-nginx-module-1.22/src/

(5)nginxをコンパイルしてインストールします

[ root@localhost nginx-1.17.8]# make && make install

(6)インストールが成功したかどうかを確認します

[ root@localhost nginx-1.17.8]# ls /usr/local/soft/| grep nginx
nginx

(7)指定したコンパイルパラメータが機能するかどうかを確認します

[ root@localhost fdfs]# /usr/local/soft/nginx/sbin/nginx -V
nginx version: nginx/1.17.8
built by gcc 8.3.120190507(Red Hat 8.3.1-4)(GCC) 
configure arguments:--prefix=/usr/local/soft/nginx --with-http_stub_status_module --add-module=/usr/local/source/fastdfs-nginx-module-1.22/src/

ストレージサービスを構成して開始します

4つのストレージの場合:ストレージサービスを構成して開始します

(1)ストレージサービスに必要なディレクトリを作成します

[ root@localhost fdfs]# mkdir /data/fastdfs/storage
[ root@localhost fdfs]# chmod 777/data/fastdfs/storage/

(2)ストレージサービスを構成する

ストレージ構成ファイルを編集します。

[ root@localhost fdfs]# vi /etc/fdfs/storage.conf

各構成アイテムには次のものが含まれます。

group_name = group1
# ベースを構成する_パスは上で作成されたストレージディレクトリです
base_path =/data/fastdfs/storage
# store_パス:ストレージが配置されているディレクトリ。複数設定できます。0から開始するように注意してください。
store_path0 =/data/fastdfs/storage
# tracker_サーバーのIPとポート
tracker_server =192.168.175.101:22122
tracker_server =192.168.175.102:22122 
# httpサービスのポートを指定します
http.server_port =80

構成の違い:

192.168.175.103 group_name = group1
192.168.175.104 group_name = group1
192.168.175.105 group_name = group2
192.168.175.106 group_name = group2

(3)ストレージサービスを開始します

[ root@localhost fdfs]# /etc/init.d/fdfs_storaged start
fdfsの開始_storaged(via systemctl):                   [決定する]

(4)ストレージサービスが正常に開始されているかどうかを確認します

[ root@localhost fdfs]# ps auxfww | grep fdfs
root      156300.00.012320972 pts/0    S+15:460:00||           \_ grep --color=auto fdfs
root      150260.00.11556966964?        Sl   15:130:00/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root      155732.71.715073666292?        Sl   15:450:02/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

注:ストレージサービスが正常に開始されたことを示すfdfs_storagedを参照してください

(5)ストレージサービスがポートにバインドされているかどうかを確認します:23000

[ root@localhost fdfs]# netstat -anp | grep 23000
tcp        000.0.0.0:230000.0.0.0:*               LISTEN      15573/fdfs_storaged 

注:23000ポートは、構成ファイル/etc/fdfs/storage.confで次のように定義されています。

# the storage server port
port =23000

**fastdfs-nginx-module ** ###を構成します

4つのストレージサーバーの場合:fastdfs-nginx-moduleを構成します

(1)構成ファイルを生成する

[ root@localhost nginx-1.17.8]# cp /usr/local/source/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

(2)構成ファイルを編集する

[ root@localhost nginx-1.17.8]# vi /etc/fdfs/mod_fastdfs.conf

次の項目を構成します

group_name=group1
connect_timeout=10
tracker_server=192.168.175.101:22122
tracker_server=192.168.175.102:22122
url_have_group_name =true
store_path0=/data/fastdfs/storage
group_count =2[group1]

group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

[ group2]

group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

説明:最上位のgroup_name:マシンがgroup1に属している場合、値はgroup1です。マシンがgroup2に属している場合、値はgroup2です。

説明:url_have_group_name = true。 注:このアイテムをお見逃しなく。nginxが異常に動作する原因になります

(3)Webアクセスに使用される他の2つの構成ファイルをfdfs構成ディレクトリーにコピーします。

[ root@d5d19e99e782 /]# cp /usr/local/source/fastdfs-6.06/conf/http.conf /etc/fdfs/[root@d5d19e99e782 /]# cp /usr/local/source/fastdfs-6.06/conf/mime.types /etc/fdfs/

**Nginx ** ###を構成します

4つのストレージサーバーの場合:nginxを構成します

nginxの構成ファイルを編集します。

[ root@localhost conf]# vi /usr/local/soft/nginx/conf/nginx.conf

サーバーリッスン80のサーバー構成では、

位置を追加する

location ~/group([0-9]){
 root  /data/fastdfs/storage/data;
 ngx_fastdfs_module;}

**nginx ** ###を開始します

(1)Nginxを起動します

[ root@localhost storage]# /usr/local/soft/nginx/sbin/nginx

(2)nginxが正常に起動したかどうかを確認します

[ root@localhost storage]# ps auxfww | grep nginx
root      245900.00.012320980 pts/0    S+16:440:00||           \_ grep --color=auto nginx
root      245680.00.041044428?        Ss   16:440:00  \_ nginx: master process /usr/local/soft/nginx/sbin/nginx
nobody    245690.00.1745164940?        S    16:440:00      \_ nginx: worker process

トラッカーサービスを構成する

トラッカーサービスを構成する

注:この手順は、4つのストレージサーバーが構成されるのを待ってから続行します。アップストリームの負荷分散にn = Nginxを使用する理由:バックエンドの複数のグループに1つのアドレスからアクセスできます

(1)ファイルのアップロードが完了したら、ブラウザーから各ストレージのNginxにアクセスします。

例えば:

http://192.168.175.103/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt
http://192.168.175.104/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt
http://192.168.175.105/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt
http://192.168.175.106/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

注:各ストレージサーバーのIPアドレスの後に、アップロード時に返されるアドレスが続きます。注:各マシンが配置されているグループにのみアクセスできます。

(2)nginx.confを構成します

[ root@0268c2dc2bf6 ~]# vi /usr/local/soft/nginx/conf/nginx.conf

コンテンツ:

バックエンドストレージにアップストリームを追加します。

upstream fdfs_group1 {
    server 192.168.175.103:80 weight=1  max_fails=2 fail_timeout=30s;
    server 192.168.175.104:80 weight=1  max_fails=2 fail_timeout=30s;}

 upstream fdfs_group2 {
    server 192.168.175.105:80 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.175.106:80 weight=1 max_fails=2 fail_timeout=30s;}

グループでURLを処理する

location /group1 {
 proxy_next_upstream http_502 http_504 error timeout invalid_header;
 proxy_pass http://fdfs_group1;
 expires 30d;}
 
 location /group2 {
  proxy_next_upstream http_502 http_504 error timeout invalid_header;
  proxy_pass http://fdfs_group2;
  expires 30d;}

(3)テストを再開します

[ root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx -s stop
[ root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx

ブラウザでアクセスします。

http://192.168.175.101/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt
http://192.168.175.101/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

Recommended Posts

[FastDFS]インタビュアー:ファイルの大規模な分散ストレージを実現するにはどうすればよいですか? (フルコンバット)