LoginSignup
1
1

More than 5 years have passed since last update.

修正版 - LizardFS による分散ファイルシステムの構築(RC 版 3.13 RPM パッケージ編)

Last updated at Posted at 2018-12-13

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

/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

/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

/etc/mfs/lizardfs-uraft.cfg
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

/etc/mfs/lizardfs-uraft.cfg
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

/etc/mfs/lizardfs-uraft.cfg
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

/etc/mfs/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

/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

/etc/mfs/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

/et/mfs/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

/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

/etc/mfs/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 パッケージによってオープンソース化され、商用版のライセンスが無くても利用できるようになり、マスターフェイルオーバー機構がとてもシンプルに実現可能になりました。

実用におきましては、ユースケースによる有用性次第になってくると思いますが、私の関わるプロジェクトでも、この後パフォーマンスに関するベンチマークテスト、管理工数の比較、管理コストなどを算出する予定ですので、公開できる範囲でこれらの結果を投稿しようと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1