1. 要約
先日投稿しました “ LizardFS による分散ファイルシステムの構築(RC 版 3.13 RPM パッケージ編)” の記事に一部誤りがありましたので修正版を投稿します。
2. はじめに
先日、LicardFS Inc. の Mark Mulrainey とディスカッションしてた際、私の lizard-uraft パッケージの解釈に誤りがある事が発覚しましたので、この修正版をアップしました。
誤りの内容ですが、先日の記事のセクション 4 で、
マスタフェイルオーバー機構の提供については商用版のみのようで...
と説明しましたが、LizardFS 3.12 以前についてはこの通りですが、LizardFS 3.13 以降については、商用ライセンスが無くても lizardfs-uraft パッケージによって利用できるようになりました。
マスターサーバーの構成要件は、Vote 形式や、Master / Shadow の主副関係維持のため、3 台以上の構成が必要となります。
(“LizardFS による分散ファイルシステムの構築(GA 版 3.12 yum インストール編)” については、この件による修正はありません。)
また、彼によると
We expect to have it released as an official version within the 1st quarter of next year.
と、来年の第一四半期には 3.13 を公式バージョンとしてリリースする予定との事です。
プロダクトの重要な要素をオープンソース化した事について、同じ OSS コミッターとしてリスペクトを感じます。
アドバイスくれた LizardFS Inc. の Mark Mulrainey に改めて感謝します。
以降では再度、LizardFS(RC 版 3.13 RPM パッケージ)の構築例と、uRaft パッケージによるフェイルオーバーテストを投稿します。
3. LizardFS 構築環境
- RHEL 7 系
- LizardFS 3.13.0-rc1
4. LizardFS 設計
- LizardFS マスターサーバー x 3
- mfs-master1
- mfs-master2
- mfs-master3
- LizardFS チャンクサーバー x 2
- mfs-chunk1
- mfs-chunk2
- LizardFS クライアント x 2
- mfs-client1
- mfs-client2
LizardFS パッケージ一覧
lizardfs-3.13.0-0el7.src.rpm
lizardfs-debuginfo-3.13.0-0el7.x86_64.rpm
lizardfs-adm-3.13.0-0el7.x86_64.rpm
lizardfs-lib-client-3.13.0-0el7.x86_64.rpm
lizardfs-cgi-3.13.0-0el7.x86_64.rpm
lizardfs-master-3.13.0-0el7.x86_64.rpm
lizardfs-cgiserv-3.13.0-0el7.x86_64.rpm
lizardfs-metalogger-3.13.0-0el7.x86_64.rpm
lizardfs-chunkserver-3.13.0-0el7.x86_64.rpm
lizardfs-nfs-ganesha-3.13.0-0el7.x86_64.rpm
lizardfs-client-3.13.0-0el7.x86_64.rpm
lizardfs-uraft-3.13.0-0el7.x86_64.rpm
lizardfs-client3-3.13.0-0el7.x86_64.rpm
5. LizardFS マスターサーバー
5-1. LizardFS ダウンロード
LizardFS ダウンロードページ
@ mfs-master1, 2, 3
$ sudo mkdir /usr/local/src/lizardfs
$ sudo cd /usr/local/src/lizardfs
$ sudo wget https://lizardfs.com/wp-content/uploads/2018/07/lizardfs-bundle-CentOS-7.5.1804.tar
5-2. LizardFS インストール
@ mfs-master1, 2, 3
$ sudo tar -xvf lizardfs-bundle-CentOS-7.5.1804.tar
$ sudo cd lizardfs-bundle-CentOS-7.5.1804
$ sudo yum -y localinstall lizardfs-master-3.13.0-0el7.x86_64.rpm lizardfs-uraft-3.13.0-0el7.x86_64.rpm lizardfs-adm-3.13.0-0el7.x86_64.rpm
5-3. hosts ファイル設定
@ mfs-master1, 2, 3
$ sudo vim /etc/hosts
10.0.0.9 mfs-cluster
10.0.0.1 mfs-master1
10.0.0.2 mfs-master2
10.0.0.3 mfs-master3
10.0.0.4 mfs-chunk1
10.0.0.5 mfs-chunk2
10.0.0.6 mfs-client1
10.0.0.7 mfs-client2
5-4. metadata.mfs 設定
@ mfs-master1, 2, 3
$ sudo cd /var/lib/mfs
$ sudo cp -a metadata.mfs.empty metadata.mfs
5-5. mfsmaster.cfg 設定
@ mfs-master1, 2, 3
$ sudo cd /etc/mfs
$ sudo cp -a mfsmaster.cfg.dist mfsmaster.cfg
$ sudo vim /etc/mfs/mfsmaster.cfg
PERSONALITY = ha-cluster-managed
ADMIN_PASSWORD = パスワード
# VIP アドレスまたは VIP ホスト名
MASTER_HOST = mfs-cluster
5-6. lizardfs.cfg 設定
@ mfs-master1, 2, 3
$ sudo cd /etc/mfs
$ sudo cp -a lizardfs-uraft.cfg.dist lizardfs-uraft.cfg
$ sudo vim /etc/mfs/lizardfs-uraft.cfg
@ mfs-master1
URAFT_PORT = 9427
URAFT_STATUS_PORT = 9428
URAFT_NODE_ADDRESS = 10.0.0.1
URAFT_NODE_ADDRESS = 10.0.0.2
URAFT_NODE_ADDRESS = 10.0.0.3
URAFT_ID = 0
LOCAL_MASTER_ADDRESS = localhost
LOCAL_MASTER_MATOCL_PORT = 9421
ELECTION_TIMEOUT_MIN = 400
ELECTION_TIMEOUT_MAX = 600
HEARTBEAT_PERIOD = 20
LOCAL_MASTER_CHECK_PERIOD = 250
URAFT_FLOATING_IP = 10.0.0.9
URAFT_FLOATING_NETMASK = 255.255.255.0
URAFT_FLOATING_IFACE = eth0
@ mfs-master2
URAFT_PORT = 9427
URAFT_STATUS_PORT = 9428
URAFT_NODE_ADDRESS = 10.0.0.1
URAFT_NODE_ADDRESS = 10.0.0.2
URAFT_NODE_ADDRESS = 10.0.0.3
URAFT_ID = 1
LOCAL_MASTER_ADDRESS = localhost
LOCAL_MASTER_MATOCL_PORT = 9421
ELECTION_TIMEOUT_MIN = 400
ELECTION_TIMEOUT_MAX = 600
HEARTBEAT_PERIOD = 20
LOCAL_MASTER_CHECK_PERIOD = 250
URAFT_FLOATING_IP = 10.0.0.9
URAFT_FLOATING_NETMASK = 255.255.255.0
URAFT_FLOATING_IFACE = eth0
@ mfs-master3
URAFT_PORT = 9427
URAFT_STATUS_PORT = 9428
URAFT_NODE_ADDRESS = 10.0.0.1
URAFT_NODE_ADDRESS = 10.0.0.2
URAFT_NODE_ADDRESS = 10.0.0.3
URAFT_ID = 2
LOCAL_MASTER_ADDRESS = localhost
LOCAL_MASTER_MATOCL_PORT = 9421
ELECTION_TIMEOUT_MIN = 400
ELECTION_TIMEOUT_MAX = 600
HEARTBEAT_PERIOD = 20
LOCAL_MASTER_CHECK_PERIOD = 250
URAFT_FLOATING_IP = 10.0.0.9
URAFT_FLOATING_NETMASK = 255.255.255.0
URAFT_FLOATING_IFACE = eth0
5-7. mfsgoals.cfg 設定
@ mfs-master1, 2, 3
$ sudo cd /etc/mfs/
$ sudo cp -a mfsgoals.cfg.dist mfsgoals.cfg
$ sudo vim mfsgoals.cfg
2 2 : _ _
5-8. 他の cfg ファイル設定
@ mfs-master1, 2, 3
$ sudo cd /etc/mfs
$ sudo cp -a globaliolimits.cfg.dist globaliolimits.cfg
$ sudo cp -a mfsexports.cfg.dist mfsexports.cfg
$ sudo cp -a mfstopology.cfg.dist mfstopology.cfg
globaliolimits.cfg lizardfs-uraft.cfg.dist mfsgoals.cfg mfsmaster.cfg.dist
globaliolimits.cfg.dist mfsexports.cfg mfsgoals.cfg.dist mfstopology.cfg
lizardfs-uraft.cfg mfsexports.cfg.dist mfsmaster.cfg mfstopology.cfg.dist
5-9. カーネル設定
@ mfs-master1, 2, 3
$ sudo echo 1 > /proc/sys/net/ipv4/conf/all/arp_accept
6. Lizardfs チャンクサーバー
6-1. Lizardfs ダウンロード
LizardFS ダウンロードページ
@ mfs-chunk1, 2
$ sudo mkdir /usr/local/src/lizardfs
$ sudo cd /usr/local/src/lizardfs
$ sudo wget https://lizardfs.com/wp-content/uploads/2018/07/lizardfs-bundle-CentOS-7.5.1804.tar
6-2. Lizardfs インストール
@ mfs-chunk 1, 2
$ sudo tar -xvf lizardfs-bundle-CentOS-7.5.1804.tar
$ sudo cd lizardfs-bundle-CentOS-7.5.1804
$ sudo yum -y localinstall lizardfs-master-3.13.0-0el7.x86_64.rpm lizardfs-uraft-3.13.0-0el7.x86_64.rpm lizardfs-adm-3.13.0-0el7.x86_64.rpm
6-3. hosts ファイル設定
@ mfs-chunk 1, 2
$ sudo vim /etc/hosts
10.0.0.9 mfs-cluster
10.0.0.1 mfs-master1
10.0.0.2 mfs-master2
10.0.0.3 mfs-master3
10.0.0.4 mfs-chunk1
10.0.0.5 mfs-chunk2
10.0.0.6 mfs-client1
10.0.0.7 mfs-client2
6-4. mfschunkserver.cfg 設定
@ mfs-chunk 1, 2
$ sudo cd /etc/mfs/
$ sudo cp -a mfschunkserver.cfg.dist mfschunkserver.cfg
$ sudo vim mfschunkserver.cfg
# ホスト名または IP アドレス
MASTER_HOST = mfs-cluster
6-5. mfshdd.cfg 設定
@ mfs-chunk 1, 2
$ sudo mkdir /mnt/mfs
$ sudo chown -R mfs:mfs /mnt/mfs
$ sudo cd /etc/mfs/
$ sudo cp -a mfshdd.cfg.dist mfshdd.cfg
$ sudo vim mfshdd.cfg
/mnt/mfs
7. LizardFS クライアント
7-1. LizardFS ダウンロード
LizardFS ダウンロードページ
@ mfs-client 1, 2
$ sudo mkdir /usr/local/src/lizardfs
$ sudo cd /usr/local/src/lizardfs
$ sudo wget https://lizardfs.com/wp-content/uploads/2018/07/lizardfs-bundle-CentOS-7.5.1804.tar
7-2. LizardFS クライアントインストール
@ mfs-client 1, 2
$ sudo tar -xvf lizardfs-bundle-CentOS-7.5.1804.tar
$ sudo cd lizardfs-bundle-CentOS-7.5.1804
$ sudo yum -y localinstall lizardfs-master-3.13.0-0el7.x86_64.rpm lizardfs-uraft-3.13.0-0el7.x86_64.rpm lizardfs-adm-3.13.0-0el7.x86_64.rpm
7-3. hosts ファイル 設定
@ mfs-client 1, 2
$ sudo vim /etc/hosts
10.0.0.9 mfs-cluster
10.0.0.1 mfs-master1
10.0.0.2 mfs-master2
10.0.0.3 mfs-master3
10.0.0.4 mfs-chunk1
10.0.0.5 mfs-chunk2
10.0.0.6 mfs-client1
10.0.0.7 mfs-client2
7-4. mfsmount.cfg 設定
@ mfs-client 1, 2
$ sudo cd /etc/mfs/
$ sudo cp -a mfsmount.cfg.dist mfsmount.cfg
$ sudo vim mfsmount.cfg
mfsmaster=mfs-cluster,mfsport=9421
/mnt/mfs
8. LizardFS 起動
8-1. クラスター起動
@ mfs-master1, 2, 3
$ sudo systemctl start lizardfs-uraft
$ sudo systemctl status lizardfs-uraft
$ sudo lizardfs-admin list-metadataservers 10.0.0.9 9421
Server 1:
IP: 10.0.0.9
Port: 9421
Hostname: mfs-master1
Personality: master
Status: running
Metadata version: 1
Version: 3.13.0
Server 2:
IP: 10.0.0.2
Port: 9421
Hostname: mfs-master2
Personality: shadow
Status: connected
Metadata version: 1
Version: 3.13.0
Server 3:
IP: 10.0.0.3
Port: 9421
Hostname: mfs-master3
Personality: shadow
Status: connected
Metadata version: 1
Version: 3.13.0
8-2. チャンクサーバー起動
@ mfs-chunk1, 2
$ sudo systemctl start lizardfs-chunkserver
$ sudo systemctl status lizardfs-chunkserver
$ sudo lizardfs-admin list-chunkservers 10.0.0.9 9421
Server 10.0.0.4:9422:
version: 3.13.0
label: _
chunks: 0
used space: 6.5GiB / 27GiB
chunks marked for removal: 0
used space marked for removal: 0B / 0B
errors: 0
Server 10.0.0.5:9422:
version: 3.13.0
label: _
chunks: 0
used space: 6.5GiB / 27GiB
chunks marked for removal: 0
used space marked for removal: 0B / 0B
errors: 0
8-3. クライアントマウント
@ mfs-client1, 2
$ sudo mkdir /mnt/mfs
$ sudo mfsmount -o cacheexpirationtime=0 -o readaheadmaxwindowsize=4096 -o big_writes,nosuid,nodev,noatime /mnt/mfs
$ sudo lizardfs-admin list-mounts 10.0.0.9 9421
session 1:
ip: 10.0.0.6
mount point: /mnt/mfs
version: 3.13.0
root dir: /
root uid: 0
root gid: 0
users uid: 999
users gid: 999
read only: no
restricted ip: yes
ignore gid: no
all can change quota: no
map all users: no
session 2:
ip: 10.0.0.7
mount point: /mnt/mfs
version: 3.13.0
root dir: /
root uid: 0
root gid: 0
users uid: 999
users gid: 999
read only: no
restricted ip: yes
ignore gid: no
all can change quota: no
map all users: no
9. 同期テスト
@ mfs-client1
$ sudo touch /mnt/mfs/test
@ mfs-client2
$ sudo ls /mnt/mfs
$ sudo rm -rf /mnt/mfs/test
@ mfs-client1
$ sudo ls /mnt/mfs
10. フェイルオーバーテスト
@ mfs-master1, 2, 3
$ sudo lizardfs-admin list-metadataservers 10.0.0.9 9421
Server 1:
IP: 10.0.0.9
Port: 9421
Hostname: mfs-master1
Personality: master
Status: running
Metadata version: 11
Version: 3.13.0
Server 2:
IP: 10.0.0.2
Port: 9421
Hostname: mfs-master2
Personality: shadow
Status: connected
Metadata version: 11
Version: 3.13.0
Server 3:
IP: 10.0.0.3
Port: 9421
Hostname: mfs-master3
Personality: shadow
Status: connected
Metadata version: 11
Version: 3.13.0
@ mfs-master1
$ sudo systemctl stop lizardfs-uraft
@ mfs-master2, 3
$ sudo lizardfs-admin list-metadataservers 10.0.0.9 9421
Server 1:
IP: 10.0.0.9
Port: 9421
Hostname: mfs-master2
Personality: master
Status: running
Metadata version: 13
Version: 3.13.0
Server 2:
IP: 10.0.0.3
Port: 9421
Hostname: mfs-master3
Personality: shadow
Status: connected
Metadata version: 13
Version: 3.13.0
上記のように、マスターフェイルオーバーが無事に実行されている事が確認できます。
LizardFS 3.13 以降からオープンソース化された lizardfs-uraft パッケージを利用することで、マスターフェイルオーバー機構がシンプルに実現可能になります。
11. まとめ
この記事では、先日投稿した “LizardFS による分散ファイルシステムの構築(RC 版 3.13 RPM パッケージ編)” の記事に一部誤りがありましたので修正版を投稿しました。
LizardFS 3.13 以降については、マスターフェイルオーバー機構も lizardfs-uraft パッケージによってオープンソース化され、商用版のライセンスが無くても利用できるようになり、マスターフェイルオーバー機構がとてもシンプルに実現可能になりました。
実用におきましては、ユースケースによる有用性次第になってくると思いますが、私の関わるプロジェクトでも、この後パフォーマンスに関するベンチマークテスト、管理工数の比較、管理コストなどを算出する予定ですので、公開できる範囲でこれらの結果を投稿しようと思います。