osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

58
Copyright © 2016 TIS Inc. All rights reserved. 【改訂版】運用をプログラマブルに! JobSchedulerを活用した Operations as Codeの世界 2016/2/26 オープンソースカンファレンス 2016 Tokyo/Spring OSS推進室 池田 大輔

Upload: daisuke-ikeda

Post on 14-Feb-2017

903 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved.

【改訂版】運用をプログラマブルに!  JobSchedulerを活用した    Operations as Codeの世界

2016/2/26オープンソースカンファレンス 2016 Tokyo/Spring

OSS推進室池田 大輔

Page 2: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved.

自己紹介

池田 大輔

TIS株式会社 OSS推進室

@ike_dai

https://www.facebook.com/ikedai

  Zabbix,AWS,fluentd,Ansible,JobScheduler...

名前

所属

Twitter

Facebook

興味

Zabbix Conference 2015“Advanced SysOps by using HyClops”(http://www.zabbix.com/jp/conf2015_agenda.php)

技術評論社HP : http://gihyo.jp/book/2014/978-4-7741-6288-1Amazon : http://www.amazon.co.jp/dp/4774162884

2

Page 3: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 3

【宣伝】TISエンタープライズOSSサポートサービス

問い合わせ先

      TIS株式会社  OSSサポートサービス担当窓口 [email protected]

Page 4: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 4

アジェンダ

● 今、運用管理に求められること

● ジョブ管理ツールの比較

● JobSchedulerの基礎

○ JobSchedulerの特長

○ JobSchedulerのアーキテクチャ

○ JobSchedulerにおけるジョブ管理の仕組み

● JobSchedulerの応用

○ クラスタ管理機能

○ JobScheduler API

● JobSchedulerでどこまで運用Code化できるか?

● まとめ

Page 5: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 5

今、運用管理に求められること

Page 6: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 6

運用管理すべき基盤の変化

Cloud

HW

OS

MW

APP

HW

OS

MW

APP

HV

VM

OS

MW

APP

VM

OS

MW

APP

VM

OS

MW

APP

VM

HW

OS

HW

HV

VM

Cloud

VM

Container

Container

Container

Container

Container

Container

物理 仮想化 クラウド化 マルチ環境化・コンテナ型仮想化

仮想化レイヤの追加

環境がクラウド上に存在し、HW・HVレイヤの管理がクラウドレイヤに隠蔽

複数環境の併用プロセス空間を分離したアプリケーション稼働基盤の実現

HW

HV

HW

HV

Page 7: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 7

運用管理に求められること

便利でも

大規模化激しい変化

により

運用が複雑に

Page 8: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 8

運用管理に求められること

オンプレ?  いかに自動化を進めるか?

サービス?  どこまで要件をカバーできるか?

Page 9: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 9

運用管理に求められること

複雑な運用環境でも

  オペミスなく  低コストで

 

    ⇛可能な限りのCode化

Page 10: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 10

Operations as Code

Page 11: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 11

今日の目的

そんなシーンにマッチしそうなJobSchedulerについて

  どんなものか知ってもらう

  ちょっと試してみようと思ってもらう

  話を聞いておもしろそうと思った方はブースまで!

Page 12: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 12

本題に入る前に・・

Page 13: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 13

OSSジョブ管理ツールマップ

DevOps

高機能

簡易

Hinemos

JobArranger

jHako

cron

Rundeck

JobScheduler

※あくまで私見をもとにした分類です

Page 14: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved.

トレンドで見るOSSジョブ管理ツール

Page 15: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 15

JobSchedulerは可能性を秘めているのではないか

という思いのもと積極的に取り組み中

Page 16: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 16

JobSchedulerの基礎

Page 17: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 17

JobSchdulerとは?

OSSジョブ管理ツール (GPL ver.2)ドイツ ベルリンのSOS社が開発最新安定版1.10.3

対応プラットフォーム- Linux- Windows- Solaris- AIX- HP-UX

ジョブ実行方法

- JS単体でのジョブ実行- JS Agentによる リモートサーバへのジョブ実行- SSH接続による リモートサーバへのジョブ実行

対応可能処理- フロー(JobChain)実行- スケジュール実行- 多重実行・排他制御- 先行・後続制御- 優先度設定- ジョブ実行監視- メール通知等

Page 18: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 18

JobSchdulerの特長

Operations as Code

商用製品にも劣らない

豊富なジョブ管理機能

確実なジョブ実行の実現

冗長・負荷分散機能

APIベースの柔軟な自動化

内部・外部APIフル実装

Page 19: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 19

JobSchduler基本構成

JOC

JOE

※Jobエディタ

JobJobChain

JobScheduler Agent

JobScheduler Agent

SSH Server

※Job管理WebGUI

JobJobChain

DB

※Job実行履歴、 Jobスケジューリング情報 等

Schedule ProcessClass

Schedule ProcessClass

JobScheduler Engine

liveフォルダ

Page 20: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 20

JOC(JobScheduler Operations Center)

Page 21: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 21

JOE(JobScheduler Object Editor)

Page 22: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 22

JobSchduler基本用語

ジョブ実行管理関連Job Standalone Job  単体で稼働するジョブ Order Job  JobChainの中に組み込むジョブ ※中身の実体としては基本的に同じで、組み込んで使えるものかどうかのフラグがあるだけ

JobChain 複数のジョブ実行定義を順序を考慮してひとまとめにした定義

Node JobChainの中の各ステップを示す概念

Order JobChainのジョブ実行をコントロールする概念 JobChain定義に対してOrderを生成することでJobChainの内容が実行される

Process Class Jobの実行先プロセス JobScheduler Engineが稼働しているサーバもしくはJobScheduler Engineが稼働しているサーバを設定

Schedule Standalone JobやOrderの実行スケジュールを定義

Page 23: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 23

JobChain実行の流れ

Order Job1 Order Job2

Node1 Node2 EndNode

JobChain

上記のような定義あり

例:  Webサーバのプロセス停止

例:  DBサーバのバックアップ

Page 24: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 24

JobChain実行の流れ

Order Job1 Order Job2

Node1 Node2 EndNode

JobChain

スケジュール定義に従いOrder発行

Order

Schedule

発行

例:  毎週日曜の01:00に実行

Page 25: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 25

JobChain実行の流れ

Order Job1 Order Job2

Node1 Node2 EndNode

JobChain

Orderが発行されたNodeに紐づくOrderJobが指定したProcessClass上で実行

Order

Schedule

発行

ProcessClass(server-01)

Page 26: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 26

JobChain実行の流れ

Order Job1 Order Job2

Node1 Node2 EndNode

JobChain

JobChainの定義に従い次のNodeに対してOrder発行

Order

発行

Page 27: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 27

JobChain実行の流れ

Order Job1 Order Job2

Node1 Node2 EndNode

JobChain

次のNodeに紐づくOrderJobがProcessClass上で実行※ProcessClassはOrderJob毎に変更可能

Order

発行

ProcessClass(server-02)

Page 28: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 28

JobChain実行の流れ

Order Job1 Order Job2

Node1 Node2 EndNode

JobChain

終端Nodeに達すると処理終了

Order

発行

Page 29: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 29

JobSchedulerの設定

JobSchedulerの設定情報は全てXMLファイルで定義

・JobSchedulerEngineの設定・Job、JobChainの設定・Schedulerの設定・Process Classの設定等

Page 30: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 30

Standalone Job定義

<?xml version="1.0" encoding="ISO-8859-1"?>

<job order="no" stop_on_error="no">

<script language="shell"><![CDATA[

#!/bin/bash

FILE=/tmp/demo_job.log

echo `date`": Executed demo_main Job" >> $FILE

sleep 2

]]></script>

<run_time let_run="yes" repeat="60"/>

</job>

任意の実行処理が記述可能

実行タイミングを指定可能

サポートされている言語: shell,Java,JavaScript,Perl,VBScript

Page 31: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 31

JobChain定義

<?xml version="1.0" encoding="ISO-8859-1"?>

<job_chain title="sample job chain 2" max_orders="10">

<job_chain_node state="Step1" job="sample_4_orderjob_1" error_state="Error" next_state="Success">

<on_return_codes >

<on_return_code return_code="2">

<to_state state="Step2"/>

</on_return_code>

<on_return_code return_code="3">

<to_state state="Step3"/>

</on_return_code>

</on_return_codes>

</job_chain_node>

<job_chain_node state="Step2" job="sample_4_orderjob_2" error_state="Error" next_state="Success"/>

<job_chain_node state="Step3" job="sample_4_orderjob_3" error_state="Error" next_state="Success"/>

<job_chain_node state="Success"/>

<job_chain_node state="Error"/>

</job_chain>

Step1

Step2 Success

ErrorStep3

return_code=2

return_code=3

Page 32: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 32

Schedule定義

<?xml version=”1.0” encoding=”ISO-8859-1”?>

<schedule name="sample_schedule">

<period single_start="18:50"/>

<weekdays>

<day day="1">

<period begin="00:00" end="01:00" when_holiday="next_non_holiday"/>

</day>

</weekdays>

<holidays>

<weekdays>

<day day=”7 6” />

</weekdays>

<holiday date="2015-10-12"/>

<holiday date="2015-11-03"/>

<holiday date="2015-11-23"/>

</holidays>

</schedule>

稼働日時、非稼動日をスケジュール(Schedule)として定義

 Standalone Job、Order Job、JobChain、Orderの各オブジェクトと紐付け可 run_timeと複合設定も可 特定期間のみ代替スケジュールで稼働させることも可  ● 毎日月曜 00:00~01:00に実行

● 月曜が休日だった場合は次の営業日に実行● 非稼動日は毎週土日と2015/10/12,2015/11/3,2015/11/23

Page 33: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 33

JobSchedulerの機能 応用編

Page 34: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 34

クラスタリング構成機能搭載

冗長構成および負荷分散構成が標準機能だけで実現

 

JobScheduler Engine1号機

JobScheduler Engine2号機

XML定義ファイル DB

各Engineで同じ内容が共有できていればOK・NFSで共有したり・S3にファイルを置いて定期的に各Engine上にファイルをSyncしたり

Page 35: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 35

冗長構成パターン

JobScheduler Engine1号機

JobScheduler Engine2号機

Active Standby

DB

JobScheduler Agent JobScheduler Agent JobScheduler Agent

定期的にハートビート送付

Page 36: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 36

冗長構成パターン

JobScheduler Engine1号機

JobScheduler Engine2号機

Active Standby

DB

JobScheduler Agent JobScheduler Agent JobScheduler Agent

定期的にハートビート送付

Page 37: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 37

冗長構成パターン

JobScheduler Engine1号機

JobScheduler Engine2号機

ActiveStandby

DB

JobScheduler Agent JobScheduler Agent JobScheduler Agent

定期的にハートビート送付

Active

Page 38: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 38

負荷分散構成パターン

JobScheduler Engine1号機

JobScheduler Engine2号機

MaxProcess: 2 MaxProcess: 2

時間軸

①Job1 実行Job1process

②Job2 実行 Job2process

③Job3 実行Job3process

Job5process

Job4process

④Job4 実行

⑤Job5 実行

Page 39: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved.

      Tech-Sketch                  

検証結果を      Tech-Sketch で

                  公開中

http://tech-sketch.jp/2016/02/sos-jobscheduler.htmlhttp://tech-sketch.jp/2016/02/sos-jobscheduler.html

Page 40: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 40

APIベースでの処理自動化

内部API

ジョブの中でJobSchedulerに対する操作が可能※例:ジョブAの実行に失敗したらジョブBのジョブスケジュールを変更

WebAPI

外部ツールからJobSchedulerに対する操作が可能※例:Zabbixの監視結果で障害が発生したらとあるジョブCを実行

Page 41: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 41

WebAPI実行例

対応コマンドの一覧は以下参照http://www.sos-berlin.com/doc/en/scheduler.doc/xml.xml

特定のジョブを実行したい場合

$ curl -X POST http://example.com:4444 -d “<start_job job=’sample_job1’ />”

JobSchedulerEngie URL 実行処理

ジョブの定義を変更したい場合

$ curl -X POST http://example.com:4444 -d “<modify_hot_folder folder=’test’><job ・・・ /></modify_hot_folder>”

Page 42: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 42

XMLベースのWebAPI実行が面倒。。。

https://github.com/ike-dai/go-jobscheduler

そんな方に、、

Go言語向けJobScheduler APIライブラリ作成中

まだまだ未完成ですがJob実行、Order実行、実行履歴の取得、Scheduleの設定等は実装済み作成中なので仕様はこれから変更の可能性あり。

Page 43: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 43

JobSchedulerでどこまでCode化できるのか

Page 44: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 44

Zabbix監視結果を元にしたジョブフローの自動制御

JobScheduler自身の制御も内部APIでプログラマブルにコントロール

JobChain

とあるJob直近のサーバ負荷収集

Zabbix

OK

評価

次のJobOK

スケジュール変更NG

内部APIにより別スケジュールで処理実行命令(Order)発行

新規Order別スケジュール

例えば...

Page 45: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 45

【参考】Zabbix APIをコールして監視結果取得

サンプルJob定義ファイルを公開

https://github.com/ike-dai/hyclops_jm/tree/add-zabbix-job

➔ JavaScriptで実装➔ itemidやAPIの接続情報を渡して実行することで値取得➔ 結果をパラメータに引き渡し次のジョブで活用可能に

Page 46: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 46

監視結果に基づく自動運用

外部の監視ツールの結果を受けてJobSchedulerAPIをコールし自動処理

Zabbix

Webサーバグループ

高負荷遅延

検知 アクション

JobSchedulerAPI実行

JobChain

LB

マシン追加

LB配下に登録

稼働確認

終了

Page 47: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 47

監視結果に基づく自動運用

外部の監視ツールの結果を受けてJobSchedulerAPIをコールし自動処理

Zabbix

Webサーバグループ

高負荷遅延

検知 アクション

JobSchedulerAPI実行

JobChain

LB

マシン追加

LB配下に登録

稼働確認

終了

Page 48: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 48

監視結果に基づく自動運用

外部の監視ツールの結果を受けてJobSchedulerAPIをコールし自動処理

Zabbix

Webサーバグループ

高負荷遅延

検知 アクション

JobSchedulerAPI実行

JobChain

LB

マシン追加

LB配下に登録

稼働確認

終了

Page 49: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 49

監視結果に基づく自動運用

外部の監視ツールの結果を受けてJobSchedulerAPIをコールし自動処理

Zabbix

Webサーバグループ

JobChain

LB

マシン追加

LB配下に登録

稼働確認

終了

Page 50: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 50

監視結果に基づく自動運用

外部の監視ツールの結果を受けてJobSchedulerAPIをコールし自動処理

Zabbix

Webサーバグループ

JobChain

LB

マシン追加

LB配下に登録

稼働確認

終了

Page 51: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 51

JobScheduler-他ツール相互の自動連携

柔軟な相互連携が可能

 → 運用のCode化の実現

Page 52: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 52

TISの独自取り組み

Page 53: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 53

HyClops JobMonitoring

● ZabbixとJobSchedulerを連携するツール● 3つの機能

1. ジョブの失敗状況をZabbixに連携2. ジョブの実行処理時間情報をZabbixに連携3. ジョブ実行時にZabbixのトリガー条件式を動的変更

公式サイトURL: http://tech-sketch.github.io/hyclops_jmGitHubリポジトリ: https://github.com/tech-sketch/hyclops_jm

Page 54: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 54

HyClops JobMonitoring

● ZabbixとJobSchedulerを連携するツール● 3つの機能

1. ジョブの失敗状況をZabbixに連携2. ジョブの実行処理時間情報をZabbixに連携3. ジョブ実行時にZabbixのトリガー条件式を動的変更

公式サイトURL: http://tech-sketch.github.io/hyclops_jmGitHubリポジトリ: https://github.com/tech-sketch/hyclops_jm

平常時のCPU負荷 Job実行時のCPU負荷

閾値 閾値

Page 55: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 55

まとめ

● 非常に高機能で使いどころのあるツール● ジョブ管理という特性上、可用性担保のための機能が豊富● APIベースで外部との連携・内部処理のCode化が可能

気になった方はぜひご連絡を[email protected]

Page 56: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 56

【おまけ】「使ってみる」の障壁を下げるために -その1-

JobSchedulerサーバ Dockerコンテナイメージ公開

$ docker pull ikedai/jobscheduler$ docker run -d -it --privileged -P --expose={4444,3306} --name="name" ikedai/jobscheduler

あとは、以下のURLにアクセスすればOKhttp://docker-host:コンテナ4444のマッピングホストポート/

Page 57: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

Copyright © 2016 TIS Inc. All rights reserved. 57

【おまけ】「使ってみる」の障壁を下げるために -その2-

TISのブースにて

 JobSchedulerインストールマニュアル配布中!

Page 58: Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界

THANK YOU