序章

Redisは、オープンソースのKey-Valueキャッシュおよびストレージシステムであり、ハッシュ、リスト、セット、ビットマップなどのいくつかのデータ型を高度にサポートするため、データ構造サーバーとも呼ばれます。 また、クラスタリングをサポートしているため、可用性が高くスケーラブルな環境でよく使用されます。

このチュートリアルでは、Ubuntu14.04で実行されているPHPアプリケーションのセッションハンドラーとして使用される外部Redisサーバーをインストールして構成する方法を説明します。

セッションハンドラーは、セッションに保存されたデータの保存と取得を担当します。デフォルトでは、PHPはそのためにファイルを使用します。 外部セッションハンドラーを使用して、[X95X]スケーラブルPHP環境をロードバランサーの背後に作成できます。この場合、すべてのアプリケーションノードが中央サーバーに接続してセッション情報を共有します。

前提条件

このチュートリアルでは、2つの異なるサーバーを使用します。 セキュリティとパフォーマンスの理由から、両方のドロップレットがプライベートネットワークを有効にして同じデータセンターに配置されていることが重要です。 これはあなたが必要とするものです:

  • Ubuntu14.04でLAMPまたはLEMPを実行しているPHPWebサーバー-このサーバーをwebと呼びます。
  • Redisがインストールされる2番目のクリーンなUbuntu14.04サーバー-このサーバーをredisと呼びます。

sudo権限を持つ通常のユーザーとして、両方のサーバーへの適切なSSHアクセスが必要です。

Redisサーバーの場合は、 Redisワンクリックアプリケーションを使用して、ステップ2にスキップすることもできます。

ステップ1—Redisサーバーをインストールします

最初に行う必要があるのは、redisドロップレットでRedisサーバーを起動して実行することです。

ChrisLeaが提供する信頼できるPPAリポジトリを備えた通常のUbuntuパッケージマネージャーを使用します。 これは、Redisの最新の安定バージョンを確実に入手するために必要です。

一般的なセキュリティアドバイスとして、信頼できるソースからのPPAのみを使用する必要があります。

まず、以下を実行してPPAリポジトリを追加します。

  1. sudo add-apt-repository ppa:chris-lea/redis-server

プレス ENTER 確認するために。

次に、パッケージマネージャーのキャッシュを更新する必要があります。

  1. sudo apt-get update

最後に、次のコマンドを実行してRedisをインストールしましょう。

  1. sudo apt-get install redis-server

これで、Redisがサーバーにインストールされます。 インストールをテストするには、次のコマンドを試してください。

  1. redis-cli ping

これにより、ポート6379localhostで実行されているRedisインスタンスに接続されます。 応答としてPONGを取得する必要があります。

ステップ2—外部接続を受け入れるようにRedisを設定する

デフォルトでは、Redisはへの接続のみを許可します localhost、これは基本的に、Redisがインストールされているサーバーの内部からのみアクセスできることを意味します。 redis サーバーと同じプライベートネットワーク上の他のサーバーからの接続を許可するには、この構成を変更する必要があります。

最初に行う必要があるのは、RedisマシンのプライベートネットワークIPアドレスを見つけることです。 次の手順は、redisサーバーで実行する必要があります。

走る ifconfig ネットワークインターフェイスに関する情報を取得するには:

  1. sudo ifconfig

次のような出力が得られるはずです。

Output
eth0 Link encap:Ethernet HWaddr 04:01:63:7e:a4:01 inet addr:188.166.77.33 Bcast:188.166.127.255 Mask:255.255.192.0 inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3497 errors:0 dropped:0 overruns:0 frame:0 TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4895060 (4.8 MB) TX bytes:619070 (619.0 KB) eth1 Link encap:Ethernet HWaddr 04:01:63:7e:a4:02 inet addr:10.133.14.9 Bcast:10.133.255.255 Mask:255.255.0.0 inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:648 (648.0 B) TX bytes:578 (578.0 B)

探してください inet_addr eth1インターフェースに割り当てられます。 この場合、それは 10.133.14.9 -これは、webサーバーからredisサーバーに接続するために後で使用するIPアドレスです。

お気に入りのコマンドラインエディタを使用して、ファイルを開きます /etc/redis/redis.conf を含む行を探します bind 意味。 次のように、プライベートネットワークIPアドレスを回線に追加する必要があります。

  1. sudo vim /etc/redis/redis.conf
/etc/redis/redis.conf
bind localhost 10.133.14.9

あなたが見たら 127.0.0.1 それ以外の localhost それはいいです; すでに存在するものの後にプライベートIPを追加するだけです。

次に、Redisサービスを再起動して変更を適用する必要があります。

  1. sudo service redis-server restart

ワンクリックアプリケーションを使用してRedisをインストールした場合、サービス名はredis-serverではなくredisになります。 再起動するには、次を実行する必要があります。 sudo service redis restart .

この変更により、同じプライベートネットワーク内のすべてのサーバーもこのRedisインスタンスに接続できるようになります。

ステップ3—Redisサーバーのパスワードを設定する

Redisインストールにセキュリティの層を追加するには、サーバーデータにアクセスするためのパスワードを設定することをお勧めします。 前の手順と同じ構成ファイルを編集します。 /etc/redis/redis.conf:

  1. sudo vim /etc/redis/redis.conf

次に、を含む行のコメントを解除します requirepass、および強力なパスワードを設定します。

/etc/redis/redis.conf
requirepass yourverycomplexpasswordhere

変更が有効になるように、Redisサービスを再起動します。

  1. sudo service redis-server restart

ステップ4—Redisの接続と認証をテストする

すべての変更が期待どおりに機能したかどうかをテストするには、redisマシン内からRedisサービスに接続します。

  1. redis-cli -h 10.133.14.9
Output
10.133.14.9:6379>

指定する必要はありませんが host ここにパラメータがあります( localhost)、Redisサービスがプライベートネットワークインターフェイスを対象とした接続を受け入れるようにするために行いました。

パスワードを定義してデータにアクセスしようとすると、AUTHエラーが発生するはずです。

  1. keys *
Output
(error) NOAUTH Authentication required.

認証するには、を実行する必要があります AUTH コマンド、で定義したのと同じパスワードを提供します /etc/redis/redis.conf ファイル:

  1. AUTH yourverycomplexpasswordhere

応答としてOKを取得する必要があります。 今実行する場合:

  1. keys *

出力は次のようになります。

Output
(empty list or set)

この出力は、 web サーバーがこのRedisサーバーをセッションハンドラーとして使用するようにまだ構成されていないため、Redisサーバーが空であることを意味します。これはまさに私たちが期待したことです。

このSSHセッションを開いたままにして、 redis-cli 次のステップを実行している間、 redis-cli web サーバーに必要な変更を加えた後、セッションデータが適切に保存されているかどうかを確認するプロンプトが表示されます。

手順5—WebサーバーにRedis拡張機能をインストールする

次の手順は、webサーバーで実行する必要があります。 PHP Redis拡張機能をインストールする必要があります。そうしないと、PHPはRedisサーバーに接続できません。

まず、以下を実行してパッケージマネージャーのキャッシュを更新します。

  1. sudo apt-get update

次に、をインストールします php5-redis パッケージ:

  1. sudo apt-get install php5-redis

これで、WebサーバーがRedisに接続できるようになります。

手順6—WebサーバーでRedisをデフォルトのセッションハンドラーとして設定する

次に、を編集する必要があります php.ini web サーバー上のファイルを使用して、PHPのデフォルトのセッションハンドラーを変更します。 このファイルの場所は、現在のスタックによって異なります。 Ubuntu14.04のLAMPスタックの場合、これは通常 /etc/php5/apache2/php.ini. Ubuntu14.04のLEMPスタックの場合、パスは通常 /etc/php5/fpm/php.ini.

メインの場所がわからない場合 php.ini ファイル、簡単に見つける方法は、関数を使用することです phpinfo(). 次のコードをという名前のファイルに配置するだけです info.php Webルートディレクトリ内:

  1. <?php
  2. phpinfo();

ブラウザからスクリプトにアクセスするときは、「ロードされた構成ファイル」を含む行を探してください。メインの正確な場所を見つける必要があります。 php.ini ロードされました。

を削除することを忘れないでください info.php 環境に関する機密情報が含まれているため、後でファイルします。

あなたの php.ini ファイルを作成し、次の行を検索します session.save_handler. デフォルト値は files. 次のように変更する必要があります redis.

LAMP 環境の場合:

  1. sudo vim /etc/php5/apache2/php.ini

LEMP 環境の場合:

  1. sudo vim /etc/php5/fpm/php.ini
[label /etc/php5/fpm/php.ini] 
session.save_handler = redis

これで、次の行が含まれているはずです。 session.save_path. コメントを外し、Redis接続文字列が含まれるように値を変更します。 コンテンツは、すべて1行で次の形式に従う必要があります。 tcp://IPADDRESS:PORT?auth=REDISPASSWORD

[label /etc/php5/fpm/php.ini] 
session.save_path = "tcp://10.133.14.9:6379?auth=yourverycomplexpasswordhere"

Redisの設定時にパスワードを設定した場合にのみ、パラメーターauthを指定する必要があります。

ファイルを保存し、phpサービスを再起動します。

LAMP 環境の場合:

  1. sudo service apache2 restart

LEMP 環境の場合:

  1. sudo service php5-fpm restart

ステップ7—Redisセッション処理をテストする

セッションがRedisによって処理されるようにするには、セッションに関する情報を格納するPHPスクリプトまたはアプリケーションが必要になります。 カウンターを実装する簡単なスクリプトを使用します。ページをリロードするたびに、印刷された数値が増加します。

名前の付いたファイルを作成します test.php web サーバーで、ドキュメントのルートフォルダー内に配置します。

  1. sudo vim /usr/share/nginx/html/test.php

変更することを忘れないでください /usr/share/nginx/html ドキュメントのルートパスを反映します。

  1. [label /usr/share/nginx/html/test.php]
  2. <?php
  3. //simple counter to test sessions. should increment on each page reload.
  4. session_start();
  5. $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
  6. echo $count;
  • $_SESSION['count'] = ++$count;
  • ブラウザをポイントします http://web/test.php スクリプトにアクセスするため。 ページをリロードするたびに番号が増えるはずです。

    これで、Redisサーバーにセッション情報が保存されているはずです。 確認するには、 redis マシンでSSHセッションに戻ります。以前は、を使用してRedisサービスに接続していました。 redis-cli. でコンテンツを再度フェッチします keys *:

    1. keys *

    そして、次のような出力が得られるはずです。

    Output
    1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"

    これは、セッション情報がRedisサーバーに保存されていることを示しています。 同様の方法で、追加のWebサーバーをRedisサーバーに接続できます。

    結論

    Redisは、PHPのセッションハンドラーとしても使用できる強力で高速なKey-Valueストレージサービスであり、セッションストレージ用の分散システムを提供することでスケーラブルなPHP環境を実現します。 PHPアプリケーションのスケーリングの詳細については、次の記事を確認してください:PHPアプリケーションの水平方向のスケーリング