目次
CentOSに分散型ジョブ管理システムであるcronsunを構築してみました。
こんにちは!shinoharaです! コロナが早く収まると良いなと思う今日この頃です。 初めてのブログで何を書いたら良いのか悩んだのですが、unix上のジョブをポータルから管理実行出来るOSSシステムであるcronsunの構築方法を書いてみます。
なぜやってみようと思ったのか
システム運用に関わるとcron起動のジョブ管理をする場面は多々あると思いますが、
サーバの台数が増えると管理が大変になります。
そこで分散型ジョブ管理システムの dkronを利用していましたが、エラーが発生した場合などにログ履歴が 少なくもう少し、ログ管理機能が豊富なジョブ管理システムを探していた所cronsunが候補に上がったので試してみました。
・ダッシュボード画面
・ログ履歴画面
公式サイトはこちら
https://github.com/shunfei/cronsun
構成
cronsunの構成を考えると操作用のWebサーバとジョブが実行されるノードサーバ、 設定や履歴を保存する。DBサーバが必要ですので通常ならこのような構成になるかと思います。
今回はもう少し簡略化した構成にしてみます。
「 WEBサーバ、ノードサーバ、DBサーバ」を兼ねているサーバを以下
「マスタサーバ」とします。
インストールが必要なアプリケーション
アプリ | version | 機能 | サーバ |
---|---|---|---|
mongodb | 4.2.11 | ドキュメント指向NoSQLデータベース | マスタ |
etcd | 3.3.11-2 | OSSのKey-Value Store | マスタ |
golang | 1.11.13 | go言語のランタイム環境 | マスタ、ノード |
git | 1.8.3.1 | 分散型バージョン管理システム | マスタ、ノード |
wget | 1.14.1 | コンテンツを取得するダウンローダ | マスタ、ノード |
gcc | 4.8.5 | GNUコンパイラコレクション | マスタ、ノード |
※ golang以外のversionは動作確認時のもので必須ではありません。
インストールコマンドです。
yum install -y git
yum install -y wget
yum install -y gcc
yum install -y mongodb-org
yum install -y etcd
wget https://golang.org/dl/go1.11.13.linux-amd64.tar.gz
golangは任意のディレクトリに解凍し
GOROOT、GOPATH、PATHを設定して下さい。
マスタサーバの設定
まずは設定ファイルを修正します。
ETCD設定ファイル
- /etc/etcd/etcd.conf
#[Member]
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
- 上記の設定をノードサーバからも接続可能にする為、マスタサーバのIPアドレスに書き換えます。
#[Member]
ETCD_LISTEN_PEER_URLS="http://10.146.1.2:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
mongodb設定ファイル
- /etc/mongod.conf
- bindIpに接続を許可する為ノードサーバのIPアドレスを設定します。
# network interfaces
net:
port: 27017
bindIp: 10.146.1.3 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
- 設定ファイルの修正が完了したら、mongodb、etcdを起動します。
cronsunのインストールとビルド
次に公式サイトの手順に従いcronsunをgithubから取得してビルドをします。
export GO111MODULE=on
go get -u github.com/shunfei/cronsun
cd $GOPATH/src/github.com/shunfei/cronsun
go mod vendor
sh build.sh
が、ここに落とし穴が!!
go get してもリポジトリが取得できない・・・・・・うーん
export GO111MODULE=off
にしてgo get を実行を実行。。。。リポジトリを取得できた。
- GOPATH配下にリポジトリがクローンされるのでcronsunまでカレントディレクトリを移動します。
さっそくsh build.shを実行して、コンパイルが通らない・・・・・・うーん
go.sumファイルを削除
export GO111MODULE=on
にしてbuildを実行。。。。通った。
buildが正常終了するとcronsun以下にdistディレクトリが作成されます。
cronsunの設定ファイルを修正
- mongodbにユーザパスワードを設定した場合は/dist/conf/db.jsonを修正する必要があります。
"AuthSource": "admin",
"UserName": "dbuser",
"Password": "password",
cronsunを起動
- distディレクトリで以下のコマンドを実行すれば立ち上がります。
(終了する場合はkillコマンドを実行します。)
# ノードを起動
./cronnode -conf conf/base.json &
# Webを起動
./cronweb -conf conf/base.json &
- ブラウザから以下のURLにアクセスするとログイン画面が表示されます。
http://127.0.0.1:7079/ui/#/login
(127.0.0.1はマスタサーバのIPアドレスとなります。)
ログイン画面
中国語ですね。右上の歯車アイコンから英語を選択出来ます。
デフォルトのログイン情報は以下となります。
user:admin@admin.com
passeord:admin
ノードサーバの設定
マスタサーバと同様に、cronsunのインストールとビルドを実行します。
cronsunの設定ファイルを修正
- /dist/conf/etcd.jsonを修正する必要があります。EndpointsにマスタサーバのIPアドレスを記述します。
{
"Endpoints":[
"http://10.146.1.2:2379"
],
"Username":"",
"Password":"",
"#DialTimeout":"单位秒",
"DialTimeout": 2
}
- /dist/conf/db.jsonを修正する必要があります。HostsにマスタサーバのIPアドレスを記述します。
{
"Hosts": [
"10.146.1.2:27017"
],
# mongodbに認証をかけている場合は認証情報も記載します。
"AuthSource": "admin",
"UserName": "dbuser",
"Password": "password",
}
cronsunノードを起動
- distディレクトリで以下のコマンドを実行すればノードが立ち上がります。
./cronnode -conf conf/base.json &
- Web画面からノードタグを選択しノードを確認してみます。マスタサーバとノードサーバの2つが表示されました。表示されない場合は画面をリロードすると表示される場合があります。
cronジョブを実行
- Web画面からJobタグを選択するとジョブ登録が出来ます。
ls コマンドを登録してみます。
SAVEで保存しジョブを実行
- logタブからマスターサーバの実行履歴を見てみます。
- logタブからノードーサーバの実行履歴を見てみます。
- マスタサーバとノードサーバでコマンドが実行されました。
おわり
思った以上に使いやすく動作も安定しています。ノード数は2つのみですが1万回以上の連続実行をしても問題はないようです。複数台のサーバを(弊社ではクラウドを使っていますのでVM管理になりますが)、管理する場合にはとても便利です。
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。