ここでは主に、スタンドアローン、クラスターおよびTencent Cloud EMRクラスター(現時点ではGooseFSをサポートするバージョンは統合していません)におけるGooseFSのデプロイ、設定および実行を標準化する方法についてご説明します。
現在GooseFSは主流のx86/x64アーキテクチャのLinux/MacOS実行環境をサポートしています(注意:MacOS M1プロセッサのサポートは未検証です)。詳細な実行ノード構成は次のとおりです。
通常、GooseFSではユーザーが専用のLinuxアカウントを使用してGooseFSのデプロイと実行を行うことを推奨しています。例えば、自作のクラスターおよびEMR環境では統一してhadoopユーザーを使用し、GooseFSのデプロイと実行を行うことなどが可能です。バッチデプロイでは、以下のユーザー機能および権限を補足する必要があります。
疑似分散型アーキテクチャデプロイは主にGooseFSの体験とデバッグに適しています。初級ユーザーは自身のLinuxまたはMacシステムのホスト上でGooseFSのクイック体験およびデバッグを行うことができます。
conf/goosefs-site.properties.templateをコピーしてconf/goosefs-site.properties設定ファイルを作成します。
$ cp conf/goosefs-site.properties.template conf/goosefs-site.properties
conf/goosefs-site.properties設定ファイル内でgoosefs.master.hostname
をlocalhost
に設定します。
conf/goosefs-site.properties設定ファイル内でgoosefs.master.mount.table.root.ufs
をローカルファイルシステム内のディレクトリ(例:/tmpまたは/data/goosefsなど)に設定します。
localhostのパスワードなしでのSSHログインを設定しておくことをお勧めします。これを行わなければ、フォーマット化および起動などの操作の際にlocalhostのログインパスワードを入力する必要があります。
次のコマンドを実行すると、RamFSファイルシステムのマウントが完了します。
$ ./bin/goosefs-mount.sh SudoMount
同様に、上記のコマンドを実行せず、GooseFSクラスターの起動時に直接マウントすることもできます。
$ ./bin/goosefs-start.sh local SudoMount
起動後、jps
コマンドを使用すると、疑似分散型モードでGooseFSの全プロセスを表示することができます。
$ jps
35990 Jps
35832 GooseFSSecondaryMaster
35736 GooseFSMaster
35881 GooseFSWorker
35834 GooseFSJobMaster
35883 GooseFSJobWorker
35885 GooseFSProxy
その後、goosefs
コマンドラインを使用し、namespace、fileSystem、job、tableの各操作を実行できます。例えば、あるローカルファイルをGooseFSにアップロードし、現在のGooseFS内のルートディレクトリ下のファイルおよびディレクトリをリストアップするなどです。
$ goosefs fs copyFromLocal test.txt /
Copied file:///Users/goosefs/test.txt to /
$ goosefs fs ls /
-rw-r--r-- goosefs staff 0 PERSISTED 04-28-2021 04:00:35:156 100% /test.txt
GooseFSのコマンドラインは、GooseFSの管理とアクセスを行うすべてのコマンドラインインターフェースをユーザーに提供しています。それにはネームスペース(namespace)、テーブル(table)、ジョブ(job)および一般的なファイルシステム(fs)操作などが含まれます。具体的には公式ドキュメントをご参照いただくか、またはgoosefs -h
コマンドラインパラメータを使用して詳細なヘルプ情報を取得することが可能です。
クラスターデプロイと実行は主にユーザーが自作したIDCクラスターの本番環境、またはGooseFSを統合していないTencent Cloud EMRの本番環境向けのものです。具体的にはStandaloneアーキテクチャデプロイと高可用性(HA)アーキテクチャデプロイがあります。
GooseFSはscripts
ディレクトリ下でパスワードなしSSHログインの一括設定およびGooseFSの一括インストールとデプロイを行うスクリプトツールを提供し、ユーザーがGooseFSの大規模クラスターのインストールとデプロイを便利でスピーディーに行えるようにしています。ユーザーは前章で述べたデプロイ環境要件のバッチデプロイ条件をご自身でチェックし、バッチデプロイが実行可能かどうかを柔軟に選択することができます。
GooseFSはscripts
ディレクトリ下でパスワードなしSSHログインの一括設定およびGooseFSのバッチデプロイとインストールを行うスクリプトツールを提供し、ユーザーが実行条件を満たす前提で、次の手順に従ってバッチデプロイタスクを完了できるようにしています。
cd ${GOOSEFS_HOME}
に進みます。conf/masters
およびconf/workers
内のホスト名またはIPアドレスを設定します。scripts
ディレクトリに進み、commons.sh
というスクリプトファイルのSCRIPT_EXEC_USER
およびSCRIPT_EXEC_PASSWORD
を正しく入力します。再びroot
アカウントに切り替えるか、またはsudo
権限でconfig_ssh.sh
を実行し、クラスター全体のパスワードなしログイン設定を完了します。validate_env.sh
ツールを実行してクラスター全体の設定状態をチェックすることができます。ln -s conf ~/.goosefs
を作成します。goosefs copy .
およびgoosefs copy ~/.goosefs
を実行し、goosefsのバイナリーパッケージおよび設定ファイルを全ノードに配信します。デプロイ全体のフローがすべて完了した後、./bin/goosefs-start.sh all SudoMount
を実行してクラスター全体を起動し実行することができます。デフォルト設定では、すべての実行ログは${GOOSEFS_HOME}/logs
に記録されます。
StandaloneアーキテクチャはシングルMasterノード、マルチWorkerノードのクラスターデプロイアーキテクチャを採用しています。具体的には下記の手順を参照してデプロイおよび実行することができます。
tar zxvf goosefs-x.x.x-bin.tar.gz
コマンドを使用して、インストールパスの後に解凍します。バッチデプロイツールの紹介を参照してクラスターのバッチデプロイを設定および実行することができます。もしくは下記の詳細な手動デプロイフローを引き続き参照することも可能です。(1)conf
ディレクトリ下からtemplate
ファイルをコピーして設定ファイルを作成します。
$ cp conf/goosefs-site.properties.template conf/goosefs-site.properties
(2)goosefs-site.properties
設定ファイル内で次の設定を指定します。
goosefs.master.hostname=<MASTER_HOSTNAME>
goosefs.master.mount.table.root.ufs=<STORAGE_URI>
このうち、goosefs.master.hostname
はmasterノードのhostnameまたはipとして設定します。goosefs.master.mount.table.root.ufs
はGooseFSルートディレクトリがマウントする基盤ファイルシステム(UFS)のパスURIを指定します。
注意:このURIは必ずMasterおよびWorkerノードのどちらからもアクセス可能でなければならないため、ローカルディレクトリはサポートしていません。
例えば、あるCOSパスをGooseFSのルートパス:goosefs.master.mount.table.root.ufs=cosn://bucket-1250000000/goosefs/にマウントすることができます。
masters
設定ファイルでシングルMasterノードのhostnameまたはipを指定します。例えば次のようになります。
# The multi-master Zookeeper HA mode requires that all the masters can access
# the same journal through a shared medium (e.g. HDFS or NFS).
# localhost
cvm1.compute-1.myqcloud.com
workers
設定ファイルで全Workerノードのhostまたはipを指定します。例えば次のようになります。
# An GooseFS Worker will be started on each of the machines listed below.
# localhost
cvm2.compute-2.myqcloud.com
cvm3.compute-3.myqcloud.com
すべての設定が完了してから./bin/goosefs copyDir conf/
を実行すると、全ノードに設定を同期することができます。
最後に./bin/goosefs-start.sh all
を実行すると、GooseFSクラスターを起動できます。
シングルMasterノードのStandaloneアーキテクチャでは単一点障害の問題が発生しやすいため、実際の本番環境ではマルチMasterノードをデプロイして可用性の高いシステムアーキテクチャを得ることをお勧めします。複数のMasterノードのうち1つだけがリーダー(Leader)ノードとして外部にサービスを提供し、その他のスタンバイ(Standby)ノードは共有ログであるジャーナル(Journal)を同期することでリーダーノードと同一のファイルシステムの状態を維持します。リーダーノードに障害が発生してダウンすると、現在のスタンバイノードの中から1つが自動的に選択され、リーダーノードに代わって外部へのサービス提供を行います。こうすることでシステムの単一点障害を解消し、全体的な高可用性アーキテクチャを実現することができます。
現在GooseFSはRaftログとZookeeperという2種類の方式をベースにしてリーダーノードとスタンバイノードの状態の強整合性を実現しています。この2つのデプロイ方式について以下でそれぞれご説明します。
初めに設定テンプレートに従って設定ファイルを作成します。
$ cp conf/goosefs-site.properties.template conf/goosefs-site.properties
goosefs.master.mount.table.root.ufs=<STORAGE_URI>
goosefs.master.embedded.journal.addresses=<EMBBEDDED_JOURNAL_ADDRESS>
説明:上記の設定選択項目の説明は次のとおりです。
goosefs.master.mount.table.root.ufs
はGooseFSルートディレクトリにマウントする基盤ストレージURIとして設定します。goosefs.master.embedded.journal.addresses
はすべてのスタンバイノードのip:embedded_journal_port
またはhost:embedded_journal_port
として設定します。このうち、embedded_journal_portはデフォルトでは9202です。例えば、192.168.1.1:9202,192.168.1.2:9202,192.168.1.3:9202のようになります。Raftの埋め込みログに基づくデプロイ方法はcopycatのLeader選出メカニズムに依存します。このため、RaftのHAデプロイアーキテクチャはZookeeperと相互に併用することはできません。
すべての設定が完了した後、同様に以下のコマンドを使用してすべての設定を同期します。
$ ./bin/goosefs copyDir conf/
最後にフォーマット化を完了すると、GooseFSクラスターの起動が可能になります。
$ ./bin/goosefs format
$ ./bin/goosefs-start.sh all
権限が不足していると表示された場合は、次の方法での再起動をお試しください。
$ ./bin/goosefs-stop.sh all
$ ./bin/goosefs-start.sh all SudoMount
次のコマンドを使用すると、現在のリーダー(Leader)ノードを確認できます。
$ ./bin/goosefs fs leader
次のコマンドを使用してクラスターの状態を確認することもできます。
$ ./bin/goosefs fsadmin report
Zookeeperサービスを設定してGooseFSの高可用性アーキテクチャを構築するには、次の条件を満たしている必要があります。
hdfs://10.0.0.1:9000/goosefs/journal
またはcosn://bucket-1250000000/journal
のようになります。設定は次のとおりです。
goosefs.zookeeper.enabled=true
goosefs.zookeeper.address=<ZOOKEEPER_ADDRESSS>
goosefs.master.journal.type=UFS
goosefs.master.journal.folder=<JOURNAL_URI>
ZKモードのJOURNAL_URI
は必ず共有ストレージシステムのURIでなければならない点に注意が必要です。その後、./bin/goosefs copyDir conf/
を使用して、設定をクラスター内の全ノードに同期配信します。最後にクラスター./bin/goosefs-start.sh all
を起動すれば完了です。
goosefs-start.sh all
スクリプトを実行してGooseFSを起動後、クラスターには次のプロセスが含まれます。
プロセス | 説明 |
---|---|
GooseFSMaster | デフォルトのRPCポートは9200、Webポートは9201 |
GooseFSWorker | デフォルトのRPCポートは9203、Webポートは9204 |
GooseFSJobMaster | デフォルトのRPCポートは9205、Webポートは9206 |
GooseFSProxy | デフォルトのWebポートは9211 |
GooseFSJobWorker | デフォルトのRPCポートは9208、Webポートは9210 |
この記事はお役に立ちましたか?