Retzをインストールする手順。
|
|
|
Retzは複数のコンポーネントで構成されており、コンポーネント毎に(別々の)サーバーにインストールする。
が、実際のところ、Mesosマスター+ZooKeeper(スタンドアローン(1台構成))+retz-serverを1台のサーバー(数GBのメモリーがあれば足りるらしい)にインストールすれば良さそう。
(retz-serverはJava8で動くので、Javaは8をインストールする必要がある)
Mesosエージェントは、実際にコマンド(ジョブ)を実行する各サーバーにインストールする。
retz-clientは、Retzの命令を発行するサーバーにだけインストールすればよい。
(retz-clientはJava8で動くので、Javaは8をインストールする必要がある)
# rpm -Uvh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm # yum install mesosphere-zookeeper
# rpm -Uvh http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm # yum install zookeeper
# zookeeper-server-initialize --myid=1
# vi /etc/zookeeper/conf/zoo.cfg末尾にZooKeeperを構成するサーバーを列挙する。 例:「
server.1=ZooKeeperホスト名:2888:3888
」# yum install hwloc numactl
# rpm -Uvh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm
# rpm -Uvh http://repos.mesosphere.com/el/6/noarch/RPMS/mesosphere-el-repo-6-2.noarch.rpm
# yum install mesos mesosphere-el-repo marathon
# vi /etc/mesos/zk「
zk://ZooKeeperホスト名:2181/mesos
」といった値を設定する。もしyum installの最中に以下のようなトランザクション確認エラーが出たら、既にインストールされているライブラリーが競合しているということなので、古いライブラリーを削除してから再実行する。
トランザクションの確認エラー file /usr/lib64/libevent-2.0.so.5.1.9 from install of libevent2-2.0.21-2.el6.x86_64 conflicts with file from package libevent-last-2.0.22-1.el6.remi.x86_64 file /usr/lib64/libevent_core-2.0.so.5.1.9 from install of libevent2-2.0.21-2.el6.x86_64 conflicts with file from package libevent-last-2.0.22-1.el6.remi.x86_64 file /usr/lib64/libevent_extra-2.0.so.5.1.9 from install of libevent2-2.0.21-2.el6.x86_64 conflicts with file from package libevent-last-2.0.22-1.el6.remi.x86_64 file /usr/lib64/libevent_openssl-2.0.so.5.1.9 from install of libevent2-2.0.21-2.el6.x86_64 conflicts with file from package libevent-last-2.0.22-1.el6.remi.x86_64 file /usr/lib64/libevent_pthreads-2.0.so.5.1.9 from install of libevent2-2.0.21-2.el6.x86_64 conflicts with file from package libevent-last-2.0.22-1.el6.remi.x86_64
# yum list | grep libevent libevent-last.x86_64 2.0.22-1.el6.remi @remi libevent.i686 1.4.13-4.el6 base libevent.x86_64 1.4.13-4.el6 base libevent-devel.i686 1.4.13-4.el6 base libevent-devel.x86_64 1.4.13-4.el6 base libevent-doc.noarch 1.4.13-4.el6 base libevent-headers.noarch 1.4.13-4.el6 base libevent-last-devel.x86_64 2.0.22-1.el6.remi remi libevent-last-doc.noarch 2.0.22-1.el6.remi remi libevent2.i686 2.0.21-2.el6 base libevent2.x86_64 2.0.21-2.el6 base libevent2-devel.i686 2.0.21-2.el6 base libevent2-devel.x86_64 2.0.21-2.el6 base libevent2-doc.noarch 2.0.21-2.el6 base # yum remove libevent-last # yum install mesos mesosphere-el-repo marathon
# wget https://github.com/retz/retz/releases/download/0.1.2/retz-server-0.1.2-1.el7.x86_64.rpm
sudo yum remove retz-server.x86_64
」で消してから「rpm
-ivh」する必要があった。最新版ではretzユーザーを作成しないようになったらしい)# rpm -ivh retz-server-0.1.2-1.el7.x86_64.rpm
# vi /opt/retz-server/etc/retz.properties
retz.mesos |
「localhost」をMesosマスターのホスト名に書き換える。 |
retz.bind |
「localhost」を自サーバーのホスト名に書き換える。 |
retz.user |
ジョブを実行するユーザー。[2017-03-08] load-appで-Uを省略した際のユーザーとなる。 |
retz.max.cpus |
1つのアプリケーションで使用する最大CPU数。[2016-12-11] |
retz.max.mem |
1つのアプリケーションで使用する最大メモリー量。[2016-12-11] |
retz.max.gpus |
1つのアプリケーションで使用する最大GPU。[2016-12-11] GPUを使用しないなら0。 |
retz.max.ports |
1つのアプリケーションで確保できる最大ポート数。[2016-12-11] サーバータイプのアプリケーションの為のものなので、バッチアプリケーションでは必要ない。 |
retz.max.disk |
1つのアプリケーションで使用する最大ディスクサイズ。[2016-12-11] |
retz.planner.name |
プランナーの種類。[2016-12-11] nativeかpriorityを指定する。 runコマンドで--prio(優先度)を指定する場合は、プランナーをpriorityにしておく必要がある。 |
実際にコマンド(ジョブ)を実行するサーバーにインストールする。
# yum install hwloc hwloc-libs numactl numactl-libs
# rpm -Uvh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm
# yum install mesos mesosphere-el-repo
# echo "cgroups/cpu,cgroups/mem" > /etc/mesos-slave/isolation # echo "true" > /etc/mesos-slave/cgroups_enable_cfs
# vi /etc/mesos/zk「
zk://ZooKeeperホスト名:2181/mesos
」といった値を設定する。# wget https://github.com/retz/retz/releases/download/0.1.2/retz-client-0.1.2-1.el7.x86_64.rpm
# rpm -Uvh retz-client-0.1.2-1.el7.x86_64.rpm
# vi /opt/retz-client/etc/retz.properties
retz.server.uri
の「localhost」をretz-serverのホスト名に書き換える。[/2016-12-15]retz-clientを1台のサーバー上で大量(30個とか)に同時に実行しようとすると、リソース不足で実行できないことがある。[2017-02-25]
「ulimit -u 4096
」とかでプロセス数を増やしたら実行できるようになるかも。
# zookeeper-server start
「ZooKeeper data directory is missing at /var/lib/zookeeper fix the path or
run initialize」というエラーが出たら、ZooKeeperが初期化されていないと思われる。
→zookeeper-server-initialize
MesosマスターはZooKeeperを使用するので、先にZooKeeperを起動しておく。
CentOS6の場合
# start mesos-master # start marathon
※marathonは起動しなくても特に問題ないらしい。[2017-06-12]
なお、/etc/hostsにMesosエージェントのホスト名が定義されていないと、Mesosエージェントからの接続があっても正常に認識されないっぽい。[2016-12-15]
$ nohup /opt/retz-server/bin/retz-server &
本格的にサービス化したい場合は、supervisordを使う?
Mesosエージェントを起動するとMesosマスターに通信するので、先にMesosマスターを起動しておく。
CentOS7の場合
# systemctl start mesos-slave
Mesosエージェントを入れたサーバーでファイアウォールが有効になっていると、MesosマスターからMesosスレーブに通信できなくてエラーになる。
W0914 17:26:59.010690 32239 master.cpp:5620] Master returning resources offered because agent 24a33018-e542-4f8c-8c33-9041bc7fe61e-S74 at slave(1)@192.168.1.11:5051 (slave1) is disconnected E0914 17:36:22.199347 32240 process.cpp:2105] Failed to shutdown socket with fd 31: Transport endpoint is not connected
MesosスレーブのTCPポート5051に接続できない。
(通信できるなら、試しに「curl スレーブのホスト名:5051
」を実行したら正常終了するはず)
# firewall-cmd --permanent --add-port=5051/tcp # firewall-cmd --reload
MesosエージェントからMesos経由で「java -version」を実行してみる。
$ mesos-execute --command="java -version" --master=ホスト名:5050 --name=java-version 〜 Received status update TASK_RUNNING for task 'java-version' 〜 Received status update TASK_FINISHED for task 'java-version' 〜
ホスト名は、Mesosマスターのホスト名を指定する。
コマンドが実行されれば、TASK_FINISHEDが表示される。
コマンドの実行結果自体は表示されない。(Mesosの画面「http://ホスト名:5050
」から見られる
らしい)
retz-clientのコマンドを適当に実行してみる。
$ /opt/retz-client/bin/retz-client help $ /opt/retz-client/bin/retz-client list
retz-serverのステータス(使用中のリソースや確保しているリソース)を確認する方法。[2017-06-12]
$ curl http://retz-serverのホスト名:9090/status
↓実行結果の例
{"command":"status","queueLength":166,"runningLength":2,"totalUsed":{"cpu":44,"memMB":416000,"gpu":0,"ports":0,"diskMB":64,"nodes":0},"numSlaves":0,"offers":0,"totalOffered":{"cpu":0,"memMB":0,"gpu":0,"ports":0,"diskMB":0,"nodes":0},"serverVersion":"retz-server-0.2.6
(0.2.6)","status":"ok","version":"0.2.0"}
totalOfferedがMesosに対して要求しているリソース、totalUsedがRetz(Retz経由で実行されたタスク)が使用しているリソース。
offerされているにも関わらずusedが0の場合、Mesosからリソースが取得できないと考えられる為、Mesosのステータスを確認する。
ブラウザーから「http://Mesosマスターのホスト名:5050
」を開くと、Mesosのステータスが確認できる。[2017-06-12]
画面上部のツールバーっぽいメニューから「Frameworks」を選び、そこで表示される画面の「Active
Frameworks」を見ると、フレームワーク(Retz等)がどれくらいのリソースを使っているかが確認できる。
(もしRetz以外のフレームワークがリソースを占有しているとRetzはリソースを確保できないので、Retzのタスクは実行できない状態になる)