Cosmos GUI¶
コンテンツ:
イントロダクション¶
ストレージとコンピューティング・クラスタの両方を管理する GUI があります。将来のリリースでは、Sahara のダッシュボードと完全に統合されます。この GUI を使用すると、ユーザは、データを保存するための HDFS ユーザスペース、MapReduce アプリケーションを実行するためのコンピューティング・リソースへのアクセスなどのアカウントを作成できます。
CosmosのGUI に関する詳細な情報は Github にあります。
インストール¶
これは、JavaScript で書かれたソフトウェアです。特に、Node.js (サーバサイドの JavaScript)に適しています。JavaScript はインタプリタ型のプログラミング言語なので、コンパイルやパッケージの構築は不要です。マシンのどこかにソースコードをダウンロードしておけば十分です。
前提条件¶
管理対象のストレージおよびコンピューティング・クラスタがない場合、このGUIには意味がありません。
ストレージクラスタ内に1つ、コンピューティング・クラスタ内にもう1つの sudoer ユーザが必要です。これらのユーザを介して、cosmos-gui は、新しいユーザの作成、HDFS のユーザスペースの提供など、特定の管理コマンドをリモートで実行します。これらの sudoer ユーザによるアクセスは、秘密鍵によって認証されます。sudoer ユーザを作成する方法と ssh 操作のための RSA ID をインストールする方法を知るには、付録A を参照してください。
Cosmos ユーザの管理は、MySQL データベースを使用して行われるため、GUI が実行されているのと同じノードまたはリモートでアクセス可能なマシンにインストールされます。
前述のように、cosmos-gui は Node.js アプリケーションなので、公式ダウンロードからインストールします。先進的な選択肢は、creationix/Tim Caswell によって、Node Version Manager (nvm)をインストールすることです。ここでは、複数のバージョンの Node.js を持ち、それらの間で切り替えることができます。
以下のようなもちろん、一般的なUnixツール git
および curl
が必要とされています。
GUI のインストール¶
cosmos-gui は、GUI が管理するストレージ・クラスタとコンピューティング・クラスタの両方に ssh アクセス権を持つマシンにインストールする必要があります。この ssh アクセスは、各クラスタのネームノード、または HA が有効な場合はネームノードに限定され、特定の管理コマンドは ssh を介してリモートで実行されるため必要です。
まず作成されていなければ、cosmos-gui
という、Unix ユーザを作成します。アプリケーションのインストールと実行に必要です。これは、root または別の sudoer ユーザとしてのみ行うことができます :
$ sudo useradd cosmos-gui
$ sudo passwd cosmos-gui <choose_a_password>
あなたが sudoer ユーザであるときは、選択したパスの下に cosmos-gui
のログトレースを保存するフォルダを作成し、通常は /var/log/cosmos/cosmos-gui
で、所有者として cosmos-gui
を設定します :
$ sudo mkdir -p /var/log/cosmos/cosmos-gui
$ sudo chown cosmos-gui:cosmos-gui /var/log/cosmos/cosmos-gui
あなたが sudoer ユーザであるときは、選択したパスの下に cosmos-gui
のログトレースを保存するフォルダを作成し、通常は /var/log/cosmos/cosmos-gui
で、所有者として cosmos-gui
を設定します :
$ su - cosmos-gui
続行する前に、GUI によってアクセスされる Namenodes の RSA キーのフィンガープリントを追加することを忘れないでください。このフィンガープリントは、ネーム・ノードへの ssh アクセスを初めて試みた場合に /home/cosmos-gui/.ssh/known_hosts
に自動的に追加されます。
$ ssh somesudoeruser@my.storage.namenode.com
The authenticity of host 'my.storage.namenode.com (192.168.12.1)' can't be established.
RSA key fingerprint is 96:c4:0b:8c:09:ce:d4:09:91:a2:b2:9c:40:71:9b:c6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'my.storage.namenode.com,192.168.12.1' (RSA) to the list of known hosts.
前提条件 のセクションで説明したように、somesudoeruser
がストレージ・クラスタに必要な(架空の) sudoer ユーザであることを確認してください。コンピューティング・クラスタでも同じ操作を行います。
次に、あなたの所有するどこかに Cosmos リポジトリをクローンします :
$ git clone https://github.com/telefonicaid/fiware-cosmos.git
cosmos-gui コードは fiware-cosmos/cosmos-gui
にあります。そのディレクトリに移動して、インストールコマンドを実行します :
$ cd fiware-cosmos/cosmos-gui
$ git checkout release/x.y.z
$ npm install
それは、node_modules
ディレクトリの下のすべての依存関係をダウンロードする必要があります。
データベースのインストール¶
ストレージ・クラスタのユーザ管理は、MySQL データベース cosmos
を介して行われます。このデータベースと cosmos_user
テーブルを作成するためのコマンドは resources/mysql_db_and_tables.sql
で見つけることができます。以前のバージョンの GUI 用にデータベースをインストールしているかどうかを確認してください。このセクションを無視し、特定のアップグレードのセクションをご覧ください。
MySQL のデプロイメントにログインし、上記のファイル内のコマンドを実行するだけです :
mysql> resources/mysql_db_and_tables.sql
または、SQL 文をコピー&ペーストして実行することもできます :
$ mysql -u <user> -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1640
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE IF NOT EXISTS cosmos;
mysql> USE cosmos;
mysql> CREATE TABLE cosmos_user (
-> id VARCHAR(128) NOT NULL PRIMARY KEY UNIQUE,
-> email TEXT NOT NULL,
-> hdfs_quota BIGINT NOT NULL,
-> hdfs_used BIGINT NOT NULL,
-> fs_used BIGINT NOT NULL,
-> registration_time TIMESTAMP DEFAULT "0000-00-00 00:00:00",
-> last_access_time TIMESTAMP DEFAULT "0000-00-00 00:00:00",
-> num_ssh_conn_ok BIGINT NOT NULL,
-> num_ssh_conn_fail BIGINT NOT NULL);
0.1.0 から 0.2.0 へのアップグレード¶
注 : cosmos
アップグレード操作を実行する前に、データベースをバックアップすることを強くお勧めします。
すでに Cosmos GUI 0.1.0 をインストールしていて、0.2.0 にアップグレードするためには、このセクションを参照してください。以前に GUI をインストールしていない場合は、"データベースのインストール"セクションに進んでください。
Cosmos GUI 0.2.0 では、cosmos_user
テーブルにいくつかのカラムが追加され、他の多くのカラムが変更されています。アップグレードを行うには、resources/mysql_upgrade_0.1.0-0.2.0.sql
ファイルを実行してください :
mysql> SOURCE resources/mysql_upgrade_0.1.0-0.2.0.sql
または、そのファイル内の文を mysql シェルに入力します :
mysql> USE cosmos;
mysql> ALTER TABLE cosmos_user MODIFY registration_time TIMESTAMP DEFAULT "0000-00-00 00:00:00";
mysql> ALTER TABLE cosmos_user ADD COLUMN last_access_time TIMESTAMP DEFAULT "0000-00-00 00:00:00";
mysql> ALTER TABLE cosmos_user ADD COLUMN hdfs_used BIGINT NOT NULL;
mysql> ALTER TABLE cosmos_user ADD COLUMN fs_used BIGINT NOT NULL;
mysql> ALTER TABLE cosmos_user ADD COLUMN num_ssh_conn_ok BIGINT NOT NULL;
mysql> ALTER TABLE cosmos_user ADD COLUMN num_ssh_conn_fail BIGINT NOT NULL;
mysql> ALTER TABLE cosmos_user MODIFY hdfs_quota BIGINT NOT NULL;
mysql> UPDATE cosmos_user SET hdfs_quota=1073741824*hdfs_quota;
0.2.0 から 0.3.0 へのアップグレード¶
注 : cosmos
アップグレード操作を実行する前に、データベースをバックアップすることを強くお勧めします。
すでに Cosmos GUI 0.2.0 をインストールしていて、0.3.0 にアップグレードするためには、このセクションを参照してください。以前に GUI をインストールしていない場合は、"データベースのインストール"セクションに進んでください。
0.2.0 から 0.3.0 に移行することは、Cosmos のユーザの提供と Cosmos の使用法に関する厳しい動作の変化を意味します。
- Cosmos のパスワードはもはや必要ではないため、クラスタへの
ssh
アクセスはもはや許可されません - 一方、Cosmosユーザは、Identity Manager (IdM) に登録された電子メールに基づいているのではなく、IdM でのユーザの ID に基づいています
どちらの変更も、データベースに直接関係します。ここで、idm_username
と username
はそれぞれ email
と id
で置き換えられます。アップグレードを行うには、resources/mysql_upgrade_0.2.0-0.3.0.sql
ファイルを実行してください :
mysql> SOURCE resources/mysql_upgrade_0.2.0-0.3.0.sql
または、そのファイル内の文を mysql シェルに入力します :
mysql> USE cosmos;
mysql> ALTER TABLE cosmos_user RENAME idm_username TO email;
mysql> ALTER TABLE cosmos_user RENAME username TO id;
Identity Manager でのアプリケーションの登録¶
cosmos-gui での認証は、FIWARE の Identity Manager を介して行われます。たとえば、FIWARE Lab の認証は https://account.lab.fiware.org
です。この種の認証を使用することによって、cosmos-gui は、専有ユーザ管理を実行する代わりに、FIWARE エコシステムの他の多くのイネーブラと共に、完全に共通の経験に統合されます。
GUI にアクセスするためのユーザ管理やその他の FIWARE コンポーネントは、特にこの GUI によって実行された Hadoop ユーザ管理とは関係ありません。
登録は1回だけ行う必要があります。Identity Manager にすでに登録されているユーザとしてログインします。このユーザは管理ユーザになります。ホームパネルの組織パネルに加えて、アプリケーション・パネルを見ることができるはずです :
アプリケーション・パネルの register をクリックし、新しいアプリケーションの名前、説明、URL、コールバックURLを入力します。例えば :
次に、アプリケーションのイメージを選択します。これは、将来のユーザのためにアイコンとして表示されます :
最後に、このアプリケーションのロールを管理します。デフォルトのロールより多くのロールを追加する予定がない場合、または単にロールを知らない場合は、この手順をスキップしてユーザ登録を完了してください :
cosmos-gui が登録されました :
登録プロセスの重要な結果は、適切なボタンをクリックして検査できる OAuth2 資格です。これらの資格情報は、後述のように cosmos-gui で設定する必要があります。
単体テスト¶
テストを実行するには、次の make
コマンドを実行します :
$ make
***** STARTING TESTS *****
․ [mysqlDriver.addUser] add a new user should return null error and an empty result set: 5ms
․ [mysqlDriver.getUser] get a user by his/her id should return null error and a result set containing frb: 1ms
2 passing (15ms)
****** TESTS ENDED *******
構成¶
cosmos-gui は conf/cosmos-gui.json
によって構成されます。ここには6つの主要なセクションからなる JSON ドキュメントがあります :
- gui:
- port: アプリケーションのリスニング・ポートを指定します。デフォルトでは 80 ですが、そのようなポートがデプロイメントで使用されている場合は変更できます
- private_key_file: クライアントとの通信を暗号化するために使用される秘密鍵を含むファイル名
- certificate_file: クライアントが上記秘密鍵の公開鍵を送信するためにサーバによって使用される自己署名 X509 証明書を含むファイル名。付録Bを参照してください
- clusters:
- storage
- endpoint: ストレージ・クラスタの Namenode/HttpFS サーバの IP アドレスまたは FQDN
- user: sudo 権限を持つ Namenode/HttpFS サーバ内の Unix ユーザ
- private_key: Namenode/HttpFS サーバへの ssh に使用されるユーザの秘密鍵
- computing
- endpoint: コンピューティング・クラスタの Namenode/HttpFS サーバの IP アドレスまたは FQDN
- user: sudo 権限を持つ Namenode/HttpFS サーバ内の Unix ユーザ
- private_key: Namenode/HttpFS サーバへの ssh に使用されるユーザの秘密鍵
- storage
- hdfs:
- quota: バイト単位で測定され、各 Cosmos ユーザに割り当てられた HDFS スペースのサイズを定義します
- superuser: HDFS スーパーユーザ。通常、
hdfs
- oauth2:
- idmURL: FIWARE Identity Manager が実行される URL。FIWARE Lab でグローバル・インスタンスを使用している場合、
https://account.lab.fiware.org
です - client_id: cosmos-gui が登録されると、Identity Manager によって指定されます
- client_secret: cosmos-gui が登録されると、Identity Manager によって与えられます
- callbackURL: 委任された認証手順が完了した後で、Identity Manager が GUI に制御を戻すために使用する URL。これは
http://localhost:<listening_port>/auth
にする必要があります - response_type:
code
にする必要があります
- idmURL: FIWARE Identity Manager が実行される URL。FIWARE Lab でグローバル・インスタンスを使用している場合、
- mysql:
- host: MySQL サーバを実行しているホストの IP または FQDN
- port: MySQLサーバが新しい着信接続をリスンするポート。通常、3306
- user:
cosmos_user
テーブルに挿入する権限を持つ MySQL サーバ内の有効なユーザ - password: MySQL の上記のユーザのパスワード
- database:
cosmos
にする必要があります
- users_blacklist: ユーザ名ではない文字列の配列
- log:
- file_name: ログのトレースを1日単位で保存するファイルのパス。このファイルは、
cosmos-gui
ユーザが所有するログフォルダ内に存在する必要があります - date_pattern: ログ・ファイルがローテーションされたときにログ・ファイル名に追加されるデータパターン
- level: 考慮する最小ログレベル。階層を含む)可能な値は以下のとおりです。
OFF
>ERROR
>WARN
>INFO
>DEBUG
>ALL
- file_name: ログのトレースを1日単位で保存するファイルのパス。このファイルは、
実行¶
cosmos-gui によって実装される GUI は、現在のディレクトリが fiware-cosmos/cosmos-gui
であると仮定して実行されます :
$ npm start
このコマンドは、以下の package.josn
中で開始スクリプトを呼び出します :
"scripts": {
"start": "sudo node ./src/cosmos_gui.js"
}
sudo
の使用法を守ってください。これは、Cosmos アカウントを設定するときに、GUI が特定の特権 Unix および Hadoop コマンドを実行できる必要があるためです。root
ユーザとして cosmos-gui および他のサービスも実行しないでください。
すべてがうまくいけば、Webブラウザでログインページ(http://<node_hosting_cosmos_gui>:<port>
)を見ることができるはずです :
cosmos-guiは、通常、TCP/443ポート (TLS 暗号化)で待機しますが、conf/cosmos-gui.conf
を編集することで変更できます。
管理¶
2つはデータ、ログ、データベースのソースで、cosmos-gui の管理者にとって便利です。
トレースのロギング¶
通常は、/var/log/cosmos/cosmos-gui
下に保存されたロギング・トレースは、GUI パフォーマンスに関する主要な情報ソースです。これらのトレースは、レベル、メッセージ、タイムスタンプの各フィールドを持つ JSON 形式で記述されています。例えば :
{"level":"info","message":"cosmos-gui running at http://localhost:9090","timestamp":"2015-07-23T13:25:20.019Z"}
ロギングレベルは、次の階層に従います :
debug < info < warn < error < fatal
ログの中には、多くの info
メッセージと、いくつかの warn
または error
タイプがあります。特に興味があるのはエラーです :
- MySQL データベースに接続するときに何らかのエラーが発生しました : サーバは実行されません。このメッセージは、GUI の起動時に表示されることがあります。ほとんどの場合、MySQL エンドポイントが正しくありません。MySQL ユーザは、リモートからの接続が許可されていません。ポート・フィルタリングのようなネットワークエラーがあります
- データベースからユーザ情報を取得するときにエラーが発生しました : このメッセージは、ユーザがメインページを取得してセッションが期限切れになっていない場合に表示されます。ユーザの情報はデータベースから検索されます。ほとんどの場合、データベースへの初期接続が成功したため、一部のネットワークエラーがその情報を取得しない可能性があります
- IdM からユーザ情報を取得するときにエラーが発生しました : このメッセージは、ユーザが Identity Manager(IdM) 資格情報を使用してサインインしたときに表示されます。おそらくIdM エンドポイントが正しくない可能性があり、cosmos-gui に関連するクライアント ID とシークレットが正しくないか、コールバック UR Lが正しく設定されていない可能性があります
- ユーザのデータベースに情報を追加するときにエラーが発生しました : このメッセージは、新規のフレッシュなユーザが GUI に初めてアクセスしたときに表示されることがあります。ほとんどの場合、データベースへの初期接続が成功したため、一部のネットワークエラーがその情報を取得しない可能性があります
- UNIX ユーザ \<unix_user> を追加中にエラーが発生しました : このメッセージは、ユーザが正常にサインインし、GUI が自分の Cosmos アカウントのプロビジョニングを開始すると表示されます。おそらく、ストレージまたはコンピューティング・クラスタ用に構成されたユーザが sudoer ではないか、ssh アクセスでネットワークエラーが発生している可能性があります
- ユーザ \<cosmos_user> の HDFS フォルダを作成中にエラーが発生しました : このメッセージは、ユーザが正常にサインインし、GUI がユーザの Cosmos アカウントのプロビジョニングを開始すると表示されます。おそらく、ストレージまたはコンピューティング・クラスタ用に構成されたユーザが sudoer ではないか、ssh アクセスでネットワークエラーが発生している可能性があります
- /user/\<cosmos_user> の所有権を変更しているときにエラーが発生しました : このメッセージは、ユーザが正常にサインインし、GUI がユーザの Cosmos アカウントのプロビジョニングを開始すると表示されます。おそらく、HDFS 用に設定されたスーパーユーザはスーパーユーザではないか、ssh アクセスでネットワークエラーが発生している可能性があります
- アクセス権を /user/\<cosmos_user> に変更しているときにエラーが発生しました : このメッセージは、ユーザが正常にサインインし、GUI がユーザの Cosmos アカウントのプロビジョニングを開始すると表示されます。おそらく、HDFS 用に設定されたスーパーユーザはスーパーユーザではないか、ssh アクセスでネットワークエラーが発生している可能性があります
- クォータを /user/\<cosmos_user> に設定しているときにエラーが発生しました : このメッセージは、ユーザが正常にサインインし、GUI が Cosmos アカウントのプロビジョニングを開始すると表示されます。おそらく、HDFS 用に設定されたスーパーユーザはスーパーユーザではないか、ssh アクセスでネットワークエラーが発生している可能性があります
データベース¶
Cosmos の登録ユーザに関する情報は、GUI をインストールするときに実行した MySQL デプロイメントでデータベース cosmos_gui
内で指定された MySQL テーブル cosmos_user
にあります。このようなテーブルには、IdM ユーザ名、Cosmos ユーザ名、パスワード、および登録時間が含まれています。
$ mysql -u cb -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+-----------------------+
| Database |
+-----------------------+
| information_schema |
| cosmos |
| mysql |
| test |
+-----------------------+
4 rows in set (0.00 sec)
mysql> use cosmos;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------+
| Tables_in_cosmos |
+------------------+
| cosmos_user |
| tidoop_job |
+------------------+
2 rows in set (0.00 sec)
mysql> select * from cosmos_user;
+----------------------------------+--------------------------------------+------------+-----------+---------+---------------------+---------------------+-----------------+-------------------+
| id | email | hdfs_quota | hdfs_used | fs_used | registration_time | last_access_time | num_ssh_conn_ok | num_ssh_conn_fail |
+----------------------------------+--------------------------------------+------------+-----------+---------+---------------------+---------------------+-----------------+-------------------+
| e170190b41724b298862fdc89d32f8e7 | francisco.romerobueno@telefonica.com | 5368709120 | 0 | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 0 | 0 |
+----------------------------------+--------------------------------------+------------+-----------+---------+---------------------+---------------------+-----------------+-------------------+
368 rows in set (0.00 sec)
付録¶
付録A : RSA ID の作成とインストール¶
このガイドでは、クライアント・マシン client_vm
がアクセスする必要があるサーバ・マシン server_vm
があると想定します。
まず、他の sudoer ユーザとしてサーバ・マシンにログインし、cosmos-sudo
ユーザを作成します :
$ sudo useradd cosmos-sudo
鍵ペアだけが認証に使用されるので、cosmos-sudossh
ユーザにパスワードを追加しないでください。
このユーザを sudoers グループに追加します :
$ visudo
適切なセクションに次の行を追加します :
cosmos ALL=(ALL) ALL
さて、cosmos-sudo
としてログインして、ssh 鍵ペアを作成してください。パスフレーズの入力を求められたら、空のままにします。秘密鍵は、既定の id_rsa
名前を使用します。id_rsa.pub
は、公開鍵になります :
$ su - cosmos-sudo
$ ssh-keygen
空のパスフレーズにもかかわらず、削除する必要があります。存在しますが、空です :
$ openssl rsa -in ./ssh/id_rsa -out ./ssh/id_rsa2
次に、秘密鍵のアクセス許可を変更します。デフォルトの秘密鍵はアクセス許可の範囲が広いためです :
$ chmod 600 ./ssh/id_rsa2
秘密鍵は、クライアント・マシンで実行されている GUI が cosmos-gui
ユーザ・アカウント内で見つけられる場所ににコピーする必要があります。fiware-cosmos/cosmos-gui/conf/
にしましょう :
$ scp ./ssh/id_rsa2 cosmos-gui@client_vm:/home/cosmos-gui/fiware-cosmos/cosmos-gui/conf/
公開鍵を authorized_keys
ファイルにもコピーします。このファイルは、cosmos-sudo
ユーザとして認証するときに ssh によって読み取られます :
$ cat /home/cosmos-sudo/.ssh/id_rsa.pub >> /home/cosmos-sudo/.ssh/authorized_keys
最後に、クライアント・マシンからのアクセスを確認することができます :
$ su - cosmos-gui
$ ssh -i conf/id_rsa2 cosmos@server_vm
付録B : 自己署名証明書の作成¶
まず、秘密鍵を作成します。既に持っている場合、それは必要ではないかもしれません :
$ openssl genrsa -out private-key.pem 1024
次に、秘密鍵を使用して証明書署名要求(CSR)を作成します :
$ openssl req -new -key private-key.pem -out csr.pem
最後に、自己署名証明書を作成します :
$ openssl x509 -req -in csr.pem -signkey private-key.pem -out public-cert.pem -days 1000
証明書が指定されている期間は、1,000日間としてください。
Annex C : TCP/1024 でポートに GUI をバインド¶
この GUI は、ユーザが設定する任意のポートで実行できます。それにもかかわらず、ほとんどの Unix ライクなシステムは、非 sudoer ユーザが 1024 以下のポートにアプリケーションをバインドするのを防ぎます。cosmos-gui
ユーザは sudoer ではないため、典型的な TCP/443 ポートで GUI を実行することはできません。
これを解決するには、いくつかの可能性があります。そのうちのひとつに cap_net_bind_service capability を設定することです :
$ setcap cap_net_bind_service=+ep /path/to/cosmos-gui
それにもかかわらず、上記にいくつかの問題があります。例えば、2.6.24 以上のカーネルに対してのみ有効で、Linuxは、setcap
や suid
のような昇格された権限を持つプログラムで LD_LIBRARY_PATH
を無効にします。
もう1つのオプションとして、好ましい方法は、ポート転送を使用することです。この手法を使用すると、GUI を 例えば、'9090' など 1024 以上のポートで実行し 、iptables ルールは次のように構成します :
$ iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 9090
つまり、TCP/443 ポートに送信されたすべてのトラフィックは、実際のバインディング・ポートである TCP/9090 に転送されます。