メインコンテンツまでスキップ
pdf?stylesheet=default
Blackboard Help

Redis Cache

Redis Cache Building Blockと新しくリリースされた管理コンソールとの組み合わせによって、システム管理者は、Learnインスタンスのパフォーマンスを新しい方法で管理および監視できます。このBuilding Blockを使用すると、JVMヒープ外部に新しいタイプのメモリストレージが置かれ、システムのパフォーマンス、スケーラビリティ、アクセス設定が向上します。

Redis Cache Building Blockによって、Blackboard Learnのキャッシュフレームワークで、ヒープ外部の新しいタイプのメモリストアとしてRedisを使用することが可能になります。Redisは、オープンソースで高パフォーマンス、ネットワーク化された高度なキー値ストアです。Redisを使用している企業としては、他にCraigslist、Github、Stackoverflow、Instagramなどがあります。

Redis Cache Building Blockは、Blackboard Learn 9.1 SP 11以降でサポートされています。

要件

Service Pack 11以降およびRedisサーバー

Redis Cache Building Blockによって、Blackboard Learnのキャッシュフレームワークで、ヒープ外部の新しいタイプのメモリとしてRedisを使用することが可能になります。Redisは、オープンソースで高パフォーマンス、ネットワーク化された高度なキー値ストアです。Redisを使用している企業としては、他にTwitter、Craigslist、Github、Stackoverflow、Instagramなどがあります。

パフォーマンス、スケーラビリティ、アクセス設定上の特長

  • リクエストのスループットと応答時間が向上

  • パフォーマンス低下のリスクなし

  • キャッシュがすべてのアプリケーションサーバーで共有され、データの最新のサブセットがローカルに保持される

  • JVMヒープの負荷の下でキャッシュを使用できる

  • 管理可能なJVMヒープサイズに応じてシステムをスケールできる

  • キャッシュサイズの向上とオーバーフローストレージの高速化

  • 高速かつ効率的なオブジェクトグラフシリアル化

  • バックグラウンドでの書き込み戦略を通じた、非同期の入力および更新

  • オフヒープのキャッシュを増大

  • オンヒープのクラスタ無効化によるオーバーヘッドを低減

  • アプリケーションの再起動やクラッシュに対応するキャッシュ

  • 予防的メンテナンスとトラブルシューティングのための豊富な監視機能

Redis Cacheサーバーの監視

Redis Cacheサーバーの監視は、管理コンソールをインストールしている場合に利用できます。管理コンソールのメインメニューで[Redis Cache]を見つけます。

どのような場合に必要か

以下の1つ以上のシナリオでは、Redis Cache Building Blockが推奨されます。

  • キャッシュエビクション率が高い
  • データベースサーバーに対して、システムリソースによる負荷がかかっている
  • JVMヒープ使用率に対する負荷がかかっている
  • 水平方向に大規模にBlackboard Learnを配置し、クラスタキャッシュ無効化トラフィックを低減している

Redis Cache Building Blockのインストールおよびアクティブ化の方法

Redis Cache Building Blockは、[システム管理者]パネルの[ソフトウェア更新]を使用して直接インストールできます。または、Behind the Blackboardのダウンロードの項にアクセスし、Redis Cache Building Blockをダウンロードして手動でインストールします。

ソフトウェア更新

ソフトウェア更新は[システム管理者]パネルにあります。Building Blockが新しく追加されたり更新されると、アイコンの変化により通知されます。利用可能な主要Building Blockのアイコンをクリックし、Redis Cache Building Blockを見つけます。[インストール]をクリックします。インストールが完了したら、Building Blockを利用可能にする必要があります。

Behind the Blackboardのダウンロード

Behind the Blackboardのダウンロードのホームで、Learn用の主要なBuilding Blockに関する項にあるRedis Cache Building Blockをダウンロードします。ローカルドライブにファイルを保存します。パッケージを解凍して.warファイルにアクセスします。

  1. システム管理者]パネル>[Building Blocks]に移動します。
  2. インストールされているツール]をクリックします。
  3. 操作バーから[Building Blocksのアップロード]をクリックします。
  4. Redis Cache Building Blockの.warファイルを参照します。
  5. 送信]をクリックします。
  6. Building Blockがインストールされると、成功メッセージが表示されます。Building Blockを[アクティブ]に設定し、[承認]をクリックします。

Redis Cacheを有効にする方法

  1. Redisサーバーをインストールします。手順については、「Redisサーバーのインストール方法」を参照してください。
  2. システム管理者パネルのRedis Cache Building Block設定ページに移動します。
  3. キャッシュのリストを選択してRedisを有効にします。
  4. ホスト]、[ポート]、[パスワード]フィールドに、Redis接続設定を入力します。
  5. 送信]をクリックします。
  6. RedisサーバーとLearnアプリケーションサーバー間で、RedisサーバーポートとRMIポートが開いていることを確認します。
  7. すべてのLearnアプリケーションサーバーを再起動します(本稼働中はローリング再起動を推奨)。
  8. システム管理者パネルで、Redis接続ステータスページに移動します。
  9. すべてのアプリケーションサーバーがRedisに接続されていることを確認します。

Redisサーバーのインストール方法

次の手順では、Red Hat Enterprise Linux 6にRedisをインストールするとします。

  1. Linuxサーバーを準備します。専用のマシンまたはVMインスタンスを強くお勧めします。RedisはWindowsまたはSolarisでは実行しないでください。WindowsおよびSolarisのBlackboard Learnでは、Linux上のRedisを使用できます。
    1. vm.overcommit_memory=1/etc/sysctl.confに追加することで、Linuxカーネルのオーバーコミットメモリ設定を1に設定します。変更を有効にするには、サーバーを再起動するか、sysctl.vm.overcommit_memory=1コマンドを実行します。詳細については、「Redisに関するよくある質問」を参照してください。

      Redisはシングルスレッドのサーバーです。多数のコアよりも、サイズの大きいキャッシュを持つ高速のCPUが適しています。現在、Intel CPUが最も適していることが知られています。Redisの文書には、類似するNehalem EP、Westmere EP、またはSandy bridge Intel CPUと比較して、AMD Opteron CPUの場合は、パフォーマンスが半分に低下することも稀ではないと記載されています。

    2. Redisのスループットは、CPUよりもネットワークによって制限されます。高速のNICまたは複数のNICを使用してください。
    3. (オプション)RedisはVMでは低速になるため、物理的なボックスでRedisを実行することをお勧めします。
  2. 最新の安定バージョンのRedisをダウンロードし、ビルドしてください。

    wget http://redis.googlecode.com/files/redis-x.x.xx.tar.gz
    tar xzf redis-x.x.xx.tar.gz
    mv redis-x.x.xx /usr/local/redis
    cd /usr/local/redis
    make

  3. $REDIS_HOME/redis.confをコピーして、Redisサーバー設定ファイルを準備します。次のプロパティを設定します。

    daemonize yes # デーモンツールで実行する場合は"no"を使用します。
    pidfile /var/run/redis/redis_6379.pid
    port 6379
    timeout 300 # 非アクティブな接続を回復します(秒)。
    tcp-keepalive 0 # ファイアウォールなどのネットワークツールからの接続を維持します。
    loglevel notice # 適切な冗長度に維持します。
    logfile /var/log/redis/redis_6379.log
    databases 1
    #save 900 1 # スナップショットを無効にします。
    #save 300 10 # スナップショットを無効にします。
    #save 60 10000 # スナップショットを無効にします。
    requirepass xxxx # 大文字と小文字が混在した16文字以上にします。
    # 文字、数字、記号。パスワードでは、単語や
    # 語句は使用しないようにします。
    maxclients 100000
    maxmemory xxxx # Redisでスワップ(バイト)を使用していないことを確認します。
    maxmemory-policy volatile-lru # 期限を使用します。
    maxmemory-samples 3
    appendonly no
    slowlog-log-slower-than 50000 # 実行時間のしきい値(マイクロ秒)。
    slowlog-max-len 128 # 低速ログの長さ。

  4. Redisホームディレクトリをrootに追加します。

    # Redis
    export REDIS_HOME=/usr/local/redis

  5. Redisユーザーを作成します。

    useradd -d /home/redis -s /bin/sh redis
    chown -R redis:redis $REDIS_HOME
    chmod 700 $REDIS_HOME

  6. Redis initスクリプトを準備します。

    cp utils/redis_init_script /etc/init.d/redis_6379

  7. Redis initスクリプトを設定します。

    # chkconfig:- 85 15
    # 説明:Redisは永続的なキー値データベースです。
    # processname:redis
    REDISUSER="redis"
    REDISPORT=6379
    EXEC=/usr/local/redis/src/redis-server
    CLIEXEC=/usr/local/redis/src/redis-cli
    PIDFILE=/var/run/redis/redis_6379.pid
    CONF="/usr/local/redis/6379.conf"
    $EXEC $CONF ==change to==> /bin/su - $REDISUSER -c "$EXEC $CONF"

  8. Redisサービスをアクティブ化します。

    mkdir /var/run/redis/var/log/redis
    chown redis:adm /var/run/redis /var/log/redis
    sudo chmod 750 /var/log/redis
    cd /etc/init.d
    chkconfig --add redis_6379

  9. Redisサーバーを起動します。

    service redis start

セキュリティ

Redisサーバーの強化

Redisサーバーのセキュリティは、次の2つのコンポーネントで保護されています。

  • Redisアプリケーションに適切なセキュリティ設定を追加します。
  • Redisを実行しているサーバーにセキュアな設定を追加します。

セキュアなRedis設定を追加する場合は、Redisアプリケーション内部もセキュアになっていることを確認する必要があります。サーバーのセキュアな設定は、Redisアプリケーション自体に影響することなく、サーバーとRedisアプリケーションのセキュリティを保護できるサーバー設定です。以下のセクションで、2つのタイプの設定について説明します。

セキュアなRedis設定

Redisサーバー自体の2つの重要な設定は次のとおりです。

  • Redisについてセキュアなパスワードを使用する。
  • 一部のRedisコマンドへのアクセスをブロックする。

推奨されるRedisのセキュリティ設定の詳細については、「Redis Security」を参照してください。

Redisのパスワード

Redisサーバーはシリアル文字列のルックアップをきわめて効率的に実行できますが、Redisのパスワードルックアップ要求はまさにこの操作に相当します。さらに、RedisパスワードはBlackboardアプリケーションでのみ要求されます。ユーザーはパスワードを記憶する必要がないため、パスワードは従来型のパスワードに比べて大幅に強力でなければなりません。通常、パスワードの長さを設定する際にはOWASPによるパスワードの長さと複雑さのガイドラインに従う必要がありますが、エンドユーザーがパスワードを記憶する必要がないため、ユーザーがパスワードを記憶できるかどうかに基づいてパスワードを選択する規則は無視できます。

ガイドライン 理由
8文字ではなく16文字以上を使用する 通常の最少文字数である8文字と比較して、総当たり攻撃にnの8乗倍の回数がかかります。
大文字と小文字、数字、記号を混ぜる 通常のパスワードと同様に、大文字と小文字、数字、記号を混ぜることで、辞書攻撃の成功の可能性が低減します。すべてのタイプの文字を確認する必要があるため、複雑性が高まり、総当たり攻撃が難しくなります。
パスワードで単語や語句を使用しない このパスワードは記憶する必要がないため、単語や語句を使用しないことで、辞書攻撃を完全に排除できます。

次のようなrequirepass指令を使用して、Redis設定ファイルにパスワード設定自体を追加する必要があります。

requirepass ^a@$4J0|-|k!4P+f%

Redisコマンドのブロック

BlackboardではRedisをキャッシュとしてのみ使用するため、使用しないコマンドが多数あります。これらのコマンドのいくつかは、悪意のあるユーザーが使用することで、キャッシュミスによるサービス拒否攻撃や、サーバーの容量超過を引き起こす方法によるサービス拒否攻撃、さらにはキャッシュデータ全体を取得することによる情報漏洩の原因となる可能性があります。Redisには、これらのコマンドの変更や削除が可能なインターフェイスがあり、Blackboardでは特定のコマンドについてこのインターフェイスを推奨しています。

キー 削除を推奨する理由
APPEND キャッシュミスを強制するようなキーの変更が可能
BGSAVE データセットをディスクに保存するコマンド。ユーザーがファイルを取得したときに情報漏洩が発生する可能性がある
RENAME キャッシュミスを強制するようなキー名の変更が可能
SAVE BGSAVEと同じ
SPOP "セットからランダムなメンバを削除する"
SREM "セットから1つ以上のメンバを削除する"

これらのコマンドをブロックするには、Redis設定ファイルを編集して次を追加します。

rename-command APPEND ""
rename-command BGSAVE ""
rename-command RENAME ""
rename-command SAVE ""
rename-command SPOP ""
rename-command SREM ""

コマンドの名前を変更して空白の文字列にすることで、アクセスをブロックします。さらに、今後作成される新しいRedisコマンドについても、Building Blockでは使用されないため、この方法でブロックする必要があります。

セキュアなサーバー設定

Redisを実行するサーバーのセキュリティを保護するには、Redisサーバーへのアクセスを必要とするユーザーだけにアクセスを許可し、ファイルおよびネットワークのアクセス権によって、Redisアプリケーションへの許可されていないアクセスを防止する必要があります。

rootコンテキストなしでRedisを実行する

Linuxマシンのユーザーrootは、アクセス権やアクセス制御にかかわらず、システム上のすべてのファイルにアクセスできます。そのため、rootユーザーを使用してアプリケーションを実行するのは危険です。悪意のあるユーザーが巧妙な攻撃によって、アプリケーションを実行しているアカウントを制御する可能性があるためです。Redisではシステムに対するそのレベルのアクセス権は必要としないため、Redisアプリケーションをインストールして実行するときは、Redisを実行できるだけの限定されたアクセス権を持つユーザーアカウントを使用します。

Blackboardでは、Redisサーバーを実行する以外の目的ではこのアカウントを使用しないことをお勧めします。このアカウントには、オペレーティングシステムや、サーバー上で実行されているその他のアプリケーションまたはデーモンに対するアクセス権を与えてはなりません。

Redis設定ファイルのセキュリティ保護

以前のセクションで説明した、Redisサーバーで使用されるパスワードは、設定ファイル内に平文で保存されています。現時点でのRedisの機能上、これをBlackboardで制御することはできません。したがって、このファイルに対するアクセス権を持つユーザーを制限する必要があります。アクセス権は、Redisアプリケーションを実行するユーザーだけに制限してください。

それには、次のコマンドを使用します(Redis設定ファイルがredis.confである場合)。

chown 600 redis.conf

Redisサーバーに対する不要なトラフィックをブロックする

Redisサーバーでは、実行されているアプリケーションがRedisだけの場合には、インターネットにオープンにアクセスできる状態にすべきではありません。次の状況でのみアクセスを可能にします。

  • 管理者がRedisサーバーでの作業を行う場合
  • BlackboardがRedisポート経由で通信する場合

それによって、許可されていないユーザーがRedisサーバーをダウンさせたり、許可されていないコマンドをRedisで実行したりするような状況が防止されます。デフォルトのRedisポート6379が使用されているとして、次のタイプのルールをこのサーバーのファイアウォールに追加します。

ルール 説明
サーバーで送受信されるすべてのトラフィックをブロックする 以下に示す場合を除き、これをデフォルトの動作にしてください。
ループバックリクエストに対する例外を作成する Redisの受信リクエストをredis-cli commandmonitorで監視する場合のみ、サーバーがそれ自体にアクセスできるようにします。
Redisポートを経由してBlackboardサーバーが送受信するトラフィックに対する例外を作成する Blackboardサーバーは、ポート6379経由でRedisと通信できる必要があり、BlackboardはRedisサーバーから応答を受信できる必要があります。
特定のマシンからのリモート管理を可能にする例外を作成する 管理者は、Redisのアップグレード、ログの確認、パフォーマンスの監視などの目的で、サーバーにアクセスする場合があります。管理者は、マシンに直接アクセスできる場合を除き、サーバーにリモートでアクセスできなければなりません。SSHトラフィックは、通常のユーザーがポート22経由でサーバーと通信できないように、単一のマシンか、少数のマシンに制限する必要があります。

管理者は、必要なリソースの共有など、環境固有の項目についても例外を作成する必要があります。それらについては各教育機関によって異なります。

トラフィック監視の実装

外部のソースからRedisサーバーが攻撃される場合に備えて、何らかの形式の侵入検知を行う必要があります。悪意がある可能性があるトラフィックにフラグを付けるか、トラフィックを完全にドロップするために、次のような項目を監視できます。

  1. Blackboardアプリケーションサーバーまたはシステム管理サーバー以外がRedisサーバーにアクセスを試みた場合は、このアクセスにフラグを付ける必要があります。
  2. 間違ったパスワードが入力された場合にも、フラグを付ける必要があります。
  3. 1つの場所からRedisサーバーに対して過大な数のリクエストが送信された場合にも、そのトラフィックにフラグを付けます。典型的な使用パターンを監視するとともに、極端なケース(期末試験の週など)について検討することで、1分あたりの予想リクエスト数を判断できます。

これらの侵入検知ルールを実装することで、Redisサーバーまたはアプリケーションに侵入を試みている者がいないかどうかを判断できます。

Building Blockのアクセス権

Javaタイプ 名前 アクション このアクセス権が必要な理由
persist * *
  • 設定ページを持続させ、設定データをSYSTEM_REGISTRYテーブルにロードする必要があります。
  • 指定された期間のRedisサーバーとキャッシュ統計を持続させ、トレンド分析のために統計データベースにロードします。
java.io.FilePermission 1. BB_HOME/-

2. BB_CONTENT/-

3. "${java.home}/-

1. 読み取り、書き込み、削除

2. 読み取り、書き込み、削除

3. 読み取り

  • Blackboard Learnホームディレクトリにあるプロパティファイルを読み取ります。
  • Learnインスタンスに対して一意になるハッシュ値を保存します。この値はクラスタ内のすべてのLearnアプリケーションサーバーで共有されます。この値をRedis Cacheキーで使用することで、別のLearnインスタンスまたはその他のアプリケーションがRedis Cacheを別途使用する場合に競合が回避されます。
  • Ehcacheディスクオーバーフロー機能
java.lang.reflect.
ReflectPermission
suppressAccessChecks * Springフレームワークと、オブジェクトグラフシリアル化フレームワークであるKryoで使用されます。
java.lang.
RuntimePermission
* * ログサービスやサービスマネージャなど、さまざまなBlackboard Learnコンポーネントで使用されます。
java.net.
SocketPermission
* 接続、承認、解決、リスニング Redisサーバーおよび他の受講者のBlackboard Learnアプリケーションノードとの接続。
javax.management.
MBeanServerPermission
* * MBeanにキャッシュ統計を公開します。
javax.management.
MBeanPermission
* * MBeanにキャッシュ統計を公開します。
attribute user.authinfo get 操作に対する、ユーザーの担当を取得します。