現在位置: ホーム / Oracle Ch. / Oracle Linuxのエンタープライズ向けのソリューション「Ksplice」

Oracle Linuxのエンタープライズ向けのソリューション「Ksplice」

前回説明したとおり、OracleではOSSを利用したエンタープライズ向け製品としてOracle Linuxを出しています。Oracleでは、Oracle Linuxに対して、エンタープライズ向けのソリューションとして「Ksplice」というツールを提供しています。

Kspliceについて

Kspliceはシステム稼働中にカーネルパッチを適用することができるツールです。このKspliceを使用することにより、OSを再起動することなく、Kernelにパッチを適用することができます。このKspliceはOracle LinuxのPremiumサポートに付属してくるツールになります。

実運用環境でのKernelのアップデート

KernelはOSの中核をなすものですが、LinuxのKernelでもやはりバグやセキュリティホールなどが一定の頻度で出てきます。
自社であきらかに使用していないコンポーネント部分(たとえば、ATMドライバやPCMCIA Busサポートなど)のバグのみの場合は、Kernelのアップデートを見送ることもできますが、自社で使用しているコンポーネント部分で、さらに自社で抱えているトラブルに直結するようなバグが修正されているようなアップデートに関しては、メンテナンス日を決めて実施を行うでしょう。

しかし、KernelのアップデートにはOSの再起動が必要になります。このことが常に運用時には頭の痛いことになります。単にServerが単体で構成されていて、ユーザが少ないものであれば再起動は比較的簡単に行えるでしょう。
ところが、Serverが複数のサーバ群から構成されているミドルウェアシステムの一部だった場合には、単純に再起動をしてしまうと他のServer上のアプリとの連携がうまくいかなくなる可能性があるため、それらを停止したり特別な対応をとる必要が出てきます。
そのため、他のServerの管理者や、ミドルウェアシステムの管理者などに、再起動のスケジュールや再起動後の正常稼働テストなどを依頼することになってしまい、必要な人的コストがどんどん上がってきます。

また、DRサイトなどを構成している場合には、再起動時にDRサイト先にオペレーションが切り替わってしまう可能性があるため、DRサイトのデータセンタに待機人員を配置する必要も出てきます。さらにDRサイトのサーバのKernelバージョンも合わせなくてはならないため、そちらでの作業も検討しなくてはなりません。結果として、OSの再起動にはかなりのコスト(人的コスト、時間、作業費など)がかかることになります。

さらに最近では、サイバーへの攻撃などセキュリティ的な観点から、セキュリティホールが発見されたKernelでは、状況によっては迅速にアップデートを行う必要が出てきています。とくに、業界によってはセキュリティホールに対しての適切な対処とコンプライアンス対応の間で板挟みになってしまいます。

Kspliceの動作原理

Oracleはこの問題に対応するために、2011年7月にホットパッチ技術を提供する「Ksplice」社を買収しました。以下でKspliceの動作原理について簡単に説明します。

Kspliceでは、ユーザランドのプログラムが呼び出すsystem callテーブル中の関数のジャンプ先(ポインタ)がRAM上に配置されており、書き換え可能になっているという特性を利用しています。

Kspliceを使用すると、Kernelの修正により処理が変わる(修正対象の)関数が呼び出された際に、その関数のポインタを書き換えて、意図的に新しい(修正済みの)関数を呼び出されるようになります。

insert  jump

これを実現するために、Kspliceでは下記のようなフローでKspliceモジュールを作成します。

ksplice module

 

  • 稼働中のKernelを変更するために、Kspliceは二つのkernelツリーを作成する(Phase 1)
  • Objectコードレベルで差分を確定する(Phase 2)
  • 差分に対してオプティマイズを行う(Phase 3)
  • 差分を新しいモジュールとしてまとめる(Phase 4)

 

このモジュール(Phase 4で作成されたモジュール)がKernelに対して下記のように適用します。

  • 新しい関数を有効化するため、Kspliceは古い関数の開始点に「トランポリンJump」を書き込む。
  • アプリケーションやパッチを安全に保つために、プログラムは最初に;CPUを一時的につかみ、関数がほかのCPUスレッドにより使用されていないことを確認する (停止時間 < 0.7ms)。

 

Kspliceの実際の使用方法

Kspliceを実際に使用するには、大きく分けて

  • オンラインアップデート
    Internet上に存在するKspliceサーバに接続してKspliceを使用する
  • オフラインアップデート
    ローカルにyumレポジトリを構築。uptrack(Kspliceを使用するためのツール)をインストールして、これを利用して管理していく

の二種類があります。以下、簡単な「オンラインアップデート」の方法について説明します。

以下が、オンラインアップデートでのKsplice使用イメージになります。

ksplice image

オンラインアップデートを行うには、以下の手順が必要になります。

  1. ULNアカウントを作成・登録
  2. ULNサイトからKsplice Uptrack access keyを入手
  3. Ksplice.comにアカウントを作成
  4. インストールスクリプトをダウンロード/インストール

 

Kspliceでの管理

Ksplice は uname の出力結果は変更いたしません。Ksplice によって現在有効となっているカーネル情報は uptrack-uname コマンドを実行して確認します。
以下に、uptrackツール(パッチの適用、削除、確認を行う)を列記します。

コマンド概要
uptrack-show 適用済みのKspliceパッチを表示
uptrack-upgrade 最新のKspliceパッチまで全て適用
uptrack-install  patch_id 指定したKspliceパッチIDまで適用
uptrack-remove  patch_id 指定したKspliceパッチIDまで削除
uptrack-uname Ksplice によって有効になっているカーネルバージョン

実際にuptrackコマンドを使用した実効例が下記になります。

# uname -r
2.6.39-200.24.1.el6uek.x86_64 <--現行のカーネルのバージョン
# uptrack-upgrade -y <-- Kspliceによるオンラインカーネルパッチの適用
The following steps will be taken:
Install [y0nt92xe] Use random access mode for dm-nfs backing file.

Installing [lkbyskll] CVE-2013-2745: Denial-of-service in kernel key management.
Installing [3uzbjwql] CVE-2011-1083: Algorithmic denial of service in epoll.
Your kernel is fully up to date.
Effective kernel version is 2.6.39-200.29.2.el6uek
# uname -r
2.6.39-200.24.1.el6uek.x86_64 <-- unameのコマンド出力には影響を与えない
# uptrack-uname -r
2.6.39-200.29.2.el6uek.x86_64 <-- 実際に有効なカーネルバージョン(パッチ適応済み)

まとめ

今回は、Oracle Linuxの大きな特徴であるKspliceについて説明しました。Kspliceを使用すると、OSを再起動することなくKernelにパッチを適用できるため、Kernelに起因するバグやセキュリティホールを即座に塞ぐことができます。また実際の運用では、Kspliceにより無停止で通常は運用し、OSの再起動はまとめてデータセンターの計画停電時に行うなど、システムメンテナンスを計画的に行うことが可能になります。
また、Kspliceの導入も特に難しい設定をせずに、簡単に運用を開始することが可能です。

次回はOracle Linuxのもう一つの特徴であるDtraceについて説明します。

参考リンク

「Oracle、Ksplice 買収で『Linux』事業を強化」
http://internetcom.jp/busnews/20110722/3.html

「SIOS "OSSよろず" ブログ出張所」
http://sios-oss.blogspot.jp/2012/11/oracle-linux-2-ksplice.html

Oracle_Form