ストレージ概念
1. ブロックストレージの実装方法
ブロックストレージは、物理的なハードディスクのように動作し、ホストに直接接続されます。主にホストの直接ストレージ領域やデータベースアプリケーションのストレージとして使用されます。
1. ディスク+LVS: 単一サーバーのハードディスクによる純粋なストレージ
2. DAS(DEL MDシリーズ): 直結ストレージ
3. SAN ストレージ: FC接続経由
2. ファイルストレージの実装方法
ファイルストレージは、より低レベルのブロックストレージとは異なり、アプリケーション層に位置します。一般的にNAS(ネットワーク接続ストレージ)を指します。
1. NAS(nfs): TCP/IP接続経由、遅延が比較的大きく、パフォーマンスに限界があり、単一障害点となる可能性
3. オブジェクトストレージの説明
オブジェクトストレージは、ブロックストレージの高速性とファイルストレージの共有機能を兼ね備え、よりインテリジェントです。独自のCPU、メモリ、ネットワーク、ディスクを持ち、ブロックストレージやファイルストレージよりも上位層に位置します。クラウドサービスプロバイダーは、ユーザーファイルのアップロード、ダウンロード、読み取りのためのREST APIを提供し、アプリケーションとの統合を容易にします。
GlusterFSの概要
1. GlusterFSの特徴
大きなファイル(例:OpenStackのイメージやビデオ)の保存に適しています。小さなファイルの場合、パフォーマンスが低下する可能性があります。
2. GlusterFSのインストール
環境:172.16.1.211、172.16.1.213
両サーバーで以下のコマンドを実行します。注意してコマンドの順序を守ってください。
# yum install centos-release-gluster
# yum install glusterfs-server
# systemctl start glusterd
3. トラスト関係の確立
片方のサーバーで以下を実行します。
[root@SH_T_ansiblecli_01 ~]# gluster peer probe 172.16.1.213 #他方のサーバーのIPを指定
[root@SH_T_ansiblecli_01 ~]# gluster peer status
4. 「test-volume」という名前の分散ボリュームの作成
172.16.1.211でディレクトリを作成します。
# mkdir /data/exp1 -p
172.16.1.213でディレクトリを作成します。
# mkdir /data/exp2 -p
任意のサーバーで以下を実行します。
# gluster volume create test-volume 172.16.1.211:/data/exp1 172.16.1.213:/data/exp2
# gluster volume create test-volume 172.16.1.211:/data/exp1 172.16.1.213:/data/exp2 force
# gluster volume info #論理ボリューム情報の確認
# gluster volume start test-volume #論理ボリュームの起動
5. 「rd1-volume」という名前のレプリカボリュームの作成
172.16.1.211でディレクトリを作成します。
# mkdir /data/rd1-exp3 -p
172.16.1.213でディレクトリを作成します。
# mkdir /data/rd1-exp4 -p
任意のサーバーで以下を実行します。
# gluster volume create rd1-volume replica 2 transport tcp 172.16.1.211:/data/rd1-exp3 172.16.1.213:/data/rd1-exp4 force
# gluster volume info rd1-volume #論理ボリューム情報の確認
# gluster volume start rd1-volume #論理ボリュームの起動
6. 「rd0-volume」という名前のストライプボリュームの作成
172.16.1.211でディレクトリを作成します。
# mkdir /data/rd0-exp1 -p
172.16.1.213でディレクトリを作成します。
# mkdir /data/rd0-exp2 -p
任意のサーバーで以下を実行します。
# gluster volume create rd0-volume stripe 2 transport tcp 172.16.1.211:/data/rd0-exp1 172.16.1.213:/data/rd0-exp2 force
# gluster volume info rd0-volume #論理ボリューム情報の確認
# gluster volume start rd0-volume #論理ボリュームの起動
7. 生産環境での推奨:分散レプリカボリューム
4台のサーバーが必要:server1、server2、server3、server4
# gluster volume create test1-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
8. GlusterFS論理ボリュームのマウント
# yum install glusterfs-fuse #Glusterクライアントのインストール
# mkdir /mnt/g1 /mnt/g2 /mnt/g3 #3つのマウントポイントの作成
# mount -t glusterfs 172.16.1.211:/test-volume /mnt/g1 #分散ボリュームをg1ディレクトリにマウント
# mount -t glusterfs 172.16.1.211:/rd1-volume /mnt/g2
# mount -t glusterfs 172.16.1.211:/rd0-volume /mnt/g3
9. ディスククォータの設定
# gluster volume quota test-volume enable #test-volumeボリュームのクォータを有効化
# gluster volume quota test-volume limit-usage /data 10GB #dataディレクトリの10GBクォータ設定
# gluster volume quota test-volume list #test-volumeボリュームのクォータ状況確認
10. 論理ボリュームの拡張
# mkdir /data/exp9 #新しいディスクのシミュレーション作成
# gluster volume add-brick test-volume 172.16.1.211:/data/exp9 force
#新しく作成した"/data/exp9"ディスクを"test-volume"論理ボリュームに追加
# gluster volume rebalance test-volume start #論理ボリュームの内容を再バランス。このコマンドを実行しないと、新しく追加されたディスクにはデータが書き込まれません
# gluster volume info test-volume #追加確認
# gluster volume status test-volume #ディスク状態確認
11. 論理ボリュームの縮小
この操作は注意が必要で、データ損失の可能性があります。
# gluster volume remove-brick test-volume 172.16.1.211:/data/exp9 force
#"/data/exp9"ディスクを"test-volume"論理ボリュームから削除
FastDFSの概要
1. FastDFSの特徴
1. 純粋なC言語実装
2. 専用のAPI経由でのみアクセス可能
3. 高パフォーマンス、高拡張性
4. 一般的に4KBから500MBまでのファイルストレージに使用
2. FastDFSのアップロードプロセス
FastDFSは、upload、download、append、deleteなどの基本的なファイルアクセスインターフェースを提供し、クライアントライブラリの形式でユーザーに提供します。
Storage Serverは定期的にTracker Serverに自身のストレージ情報を送信します。Tracker Serverクラスターに複数のTracker Serverがある場合、各Tracker間の関係は対等であり、クライアントは任意のTrackerを選択してアップロードできます。
Trackerがクライアントからのファイルアップロードリクエストを受け取ると、ファイルに保存できるグループを割り当てます。グループが選択されると、グループ内のどのstorage serverをクライアントに割り当てるかを決定します。storage serverが割り当てられると、クライアントはstorageにファイル書き込みリクエストを送信し、storageはファイルにデータストレージディレクトリを割り当てます。その後、ファイルにfileidを割り当て、これらの情報に基づいてファイル名を生成して保存します。ファイル名の形式は以下の通りです:
3. FastDFSのインストールとデプロイ
公式サイト:https://github.com/happyfish100
2台のサーバーをデプロイ:172.16.1.211、172.16.1.213
1. ライブラリパッケージのインストール
# git clone https://github.com/happyfish100/libfastcommon.git
# cd libfastcommon/
# ./make.sh
# ./make.sh install #事前にgcc、makeなどをインストールしておく必要があります
2. FastDFSのインストール
# git clone https://github.com/happyfish100/fastdfs.git
# cd fastdfs
# ./make.sh
# ./make.sh install
3. ファイル保存ディレクトリの作成:
# mkdir -p /data/fdfs_storage
# mkdir -p /data/fdfs_tracker
4. 設定ファイルの変更
両サーバーで以下の操作を実行します。
# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
# cp tracker.conf.sample tracker.conf
# vim tracker.conf #トラッカーサーバーの設定
base_path=/data/fdfs_tracker #トラッカーデータ保存パス
# vim storage.conf
base_path=/data/fdfs_storage/base
store_path0=/data/fdfs_storage/store
tracker_server=172.16.1.211:22122 #トラッカーサーバーのIPを指定(2台ある場合は両方設定)
tracker_server=172.16.1.213:22122
# mkdir /data/fdfs_storage/base
# mkdir /data/fdfs_storage/store
5. FastDFSサービスの起動
# systemctl start fdfs_trackerd
# systemctl start fdfs_storaged
6. FastDFSクライアントの設定
# cd /etc/fdfs/
# cp client.conf.sample client.conf
# mkdir /data/fdfs_storage/tmp
# vim client.conf
base_path=/data/fdfs_storage/tmp #ログ保存ディレクトリ
tracker_server=172.16.1.211:22122
tracker_server=172.16.1.213:22122
7. クライアント経由での接続とファイルアップロード
# fdfs_upload_file /etc/fdfs/client.conf /etc/passwd #/etc/passwdファイルをFastDFSサーバーにアップロード
# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBAB01mCyc-AJ9pnAAAFfnXniCQ5694871 #アップロードしたファイルをダウンロード
# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBAB01mCyc-AJ9pnAAAFfnXniCQ5694871 #ファイル情報の確認
# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBAB1VmCz8qABQC4AAAABncc3SA670.txt #アップロードしたファイルの削除
# fdfs_monitor /etc/fdfs/client.conf #FastDFSの状態を監視
8. Nginx経由でのFastDFSアクセス
# tar -zxvf nginx-1.10.2.tar.gz
# cd nginx-1.10.2
# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
# ./configure --prefix=/usr/local/nginx-fastdfs --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=./fastdfs-nginx-module/src/
# make && make install
# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# cd /root/fastdfs/conf/ #FastDFSインストールパッケージフォルダに移動
# cp anti-steal.jpg http.conf mime.types /etc/fdfs/
# cd /usr/local/nginx-fastdfs/
# vim conf/nginx.conf 設定ファイルのserverセクションに追加
location /group1/M00 {
root /data/fdfs_storage/store;
ngx_fastdfs_module;
}
# vim /etc/fdfs/mod_fastdfs.conf #クライアント設定ファイルを修正
tracker_server=172.16.1.211:22122
tracker_server=172.16.1.213:22122
url_have_group_name = true #URLにグループ情報を含めるかどうか
store_path0=/data/fdfs_storage/store
Nginxを起動するとURL経由でアクセスできます:
# curl 172.16.1.211/group1/M00/00/00/rBAB01mC7OqAKx6RAAAFfnXniCQ1855579
注:本番環境では、Nginxリバースプロキシを使用し、各グループのノードにNginx-fastdfsをインストールすることを推奨します。