前書き
Redisはオープンソースのキーと値のキャッシュおよびストレージシステムであり、ハッシュ、リスト、セット、ビットマップなどのいくつかのデータタイプの高度なサポートのためにデータ構造サーバーとも呼ばれます。 また、クラスタリングもサポートしているため、可用性が高くスケーラブルな環境で頻繁に使用されます。
このチュートリアルでは、Ubuntu 14.04で実行されているPHPアプリケーションのセッションハンドラーとして使用される外部Redisサーバーをインストールして構成する方法を説明します。
セッションハンドラーは、セッションに保存されたデータの保存と取得を行います-デフォルトでは、PHPはそのために*ファイル*を使用します。 外部セッションハンドラを使用して、https://www.digitalocean.com/community/の背後にhttps://www.digitalocean.com/company/blog/horizontally-scaling-php-applications/ [スケーラブルPHP環境]を作成できます。 tutorials / an-introduction-to-haproxy-and-load-balancing-concepts [ロードバランサー]では、すべてのアプリケーションノードがセッション情報を共有するために中央サーバーに接続します。
前提条件
このチュートリアルでは、2つの異なるサーバーを使用します。 セキュリティとパフォーマンスの理由から、両方のドロップレットがhttps://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking [プライベートネットワーク]を有効にしました。 これはあなたが必要とするものです:
-
LAMPまたはhttpsを実行しているPHP Webサーバー//www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04[LEMP] Ubuntu 14.04-このサーバーを参照します* web *として
-
Redisがインストールされる2番目のクリーンなUbuntu 14.04サーバー-このサーバーを* redis *と呼びます
sudo permissionを使用して、通常のユーザーとして両方のサーバーへの適切なSSHアクセスが必要になります。
ステップ1-Redisサーバーのインストール
最初に行う必要があるのは、* redis *ドロップレットでRedisサーバーを起動して実行することです。
Chris Leaが提供する信頼できるPPAリポジトリで、通常のUbuntuパッケージマネージャーを使用します。 これは、Redisの最新の安定バージョンを確実に取得するために必要です。
まず、次を実行してPPAリポジトリを追加します。
sudo add-apt-repository ppa:chris-lea/redis-server
「+ ENTER」を押して確認します。
次に、パッケージマネージャーのキャッシュを更新する必要があります。
sudo apt-get update
最後に、次を実行してRedisをインストールします。
sudo apt-get install redis-server
これで、Redisがサーバーにインストールされます。 インストールをテストするには、次のコマンドを試してください。
redis-cli ping
これは、ポート* 6379 の localhost で実行されているRedisインスタンスに接続します。 応答として PONG *を取得する必要があります。
ステップ2-外部接続を受け入れるようにRedisを構成する
デフォルトでは、Redisは `+ localhost +`への接続のみを許可します。これは基本的に、Redisがインストールされているサーバー内からのみアクセスできることを意味します。 * redis *サーバーと同じプライベートネットワーク上の他のサーバーからの接続を許可するには、この構成を変更する必要があります。
最初に行う必要があるのは、RedisマシンのプライベートネットワークIPアドレスを見つけることです。 * redis *サーバーで次の手順を実行する必要があります。
ネットワークインターフェイスに関する情報を取得するには、 `+ ifconfig +`を実行します。
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: 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)
-
eth1 インターフェイスに割り当てられた `+ inet_addr `を探します。 この場合、「 10.133.14.9+」です。これは、後で web サーバーから redis *サーバーに接続するために使用するIPアドレスです。
お気に入りのコマンドラインエディターを使用して、ファイル「+ / etc / redis / redis.conf 」を開き、「 bind +」定義を含む行を探します。 次のように、*プライベートネットワークIPアドレス*を行に追加する必要があります。
sudo vim /etc/redis/redis.conf
/etc/redis/redis.conf
bind localhost
「+ localhost 」の代わりに「+127.0.0.1」が表示される場合は問題ありません。既にあるものの後にプライベートIPを追加するだけです。
変更を適用するには、Redisサービスを再起動するだけです。
sudo service redis-server restart
この変更により、同じプライベートネットワーク内のサーバーもこのRedisインスタンスに接続できるようになります。
ステップ3-Redisサーバーのパスワードを設定する
Redisインストールにセキュリティのレイヤーを追加するには、サーバーデータにアクセスするためのパスワードを設定することをお勧めします。 前のステップと同じ設定ファイル、 `+ / etc / redis / redis.conf +`を編集します。
sudo vim /etc/redis/redis.conf
次に、 `+ requirepass +`を含む行のコメントを解除し、強力なパスワードを設定します。
/etc/redis/redis.conf
requirepass
Redisサービスを再起動して、変更を有効にします。
sudo service redis-server restart
ステップ4-Redis接続と認証をテストする
すべての変更が期待どおりに機能したかどうかをテストするには、* redis *マシン内からRedisサービスに接続します。
redis-cli -h
Output10.133.14.9:6379>
パスワードを定義してからデータにアクセスしようとすると、AUTHエラーが発生するはずです。
keys *
Output(error) NOAUTH Authentication required.
認証するには、 `+ AUTH `コマンドを実行するだけで、 ` / etc / redis / redis.conf +`ファイルで定義したものと同じパスワードを指定できます。
AUTH yourverycomplexpasswordhere
応答として* OK *を取得する必要があります。 今実行すると:
keys *
出力は次のようになります。
Output(empty list or set)
この出力は、Redisサーバーが空であることを意味しています。これは、* web *サーバーがこのRedisサーバーをセッションハンドラとして使用するようにまだ構成されていないためです。
次の手順を実行する間、このSSHセッションを開いたまま `+ redis-cli +`に接続したままにします。 * web *サーバーに必要な変更。
手順5-WebサーバーにRedis拡張機能をインストールする
次の手順は、* web *サーバーで実行する必要があります。 PHP Redis拡張機能をインストールする必要があります。そうしないと、PHPはRedisサーバーに接続できません。
まず、次を実行してパッケージマネージャーキャッシュを更新します。
sudo apt-get update
次に、 `+ php5-redis +`パッケージをインストールします。
sudo apt-get install php5-redis
これで、WebサーバーがRedisに接続できるようになります。
手順6-WebサーバーでRedisをデフォルトのセッションハンドラーとして設定する
ここで、* web サーバー上の `+ php.ini`ファイルを編集して、PHPのデフォルトのセッションハンドラーを変更する必要があります。 このファイルの場所は、現在のスタックによって異なります。 Ubuntu 14.04の LAMP スタックの場合、これは通常 `+ / etc / php5 / apache2 / php.ini`です。 Ubuntu 14.04上の LEMP *スタックの場合、パスは通常 `+ / etc / php5 / fpm / php.ini +`です。
メインの + php.ini`ファイルの場所がわからない場合は、関数
+ phpinfo()+ `を使用して簡単に見つけることができます。 Webルートディレクトリ内の `+ info.php +`という名前のファイルに次のコードを配置するだけです。
<?php
phpinfo();
ブラウザからスクリプトにアクセスする場合、「Loaded Configuration File」を含む行を探します。ロードされたメインの `+ php.ini +`の正確な場所を見つける必要があります。
+ php.ini`ファイルを開き、
+ session.save_handler`を含む行を検索します。 デフォルト値は `+ files `です。 これを ` redis +`に変更する必要があります。
-
LAMP *環境の場合:
sudo vim /etc/php5/apache2/php.ini
-
LEMP *環境の場合:
sudo vim /etc/php5/fpm/php.ini
/etc/php5/fpm/php.ini
session.save_handler = redis
これで、 + session.save_path +`を含む行が見つかるはずです。 コメントを解除し、Redis接続文字列が含まれるように値を変更します。 コンテンツは、すべて1行でこの形式に従う必要があります: `+ tcp:// IPADDRESS:PORT?auth = REDISPASSWORD +
/etc/php5/fpm/php.ini
session.save_path = "tcp://?auth="
ファイルを保存し、* php *サービスを再起動します。
-
LAMP *環境の場合:
sudo service apache2 restart
-
LEMP *環境の場合:
sudo service php5-fpm restart
ステップ7-Redisセッション処理のテスト
セッションがRedisによって処理されるようにするには、セッションに関する情報を保存するPHPスクリプトまたはアプリケーションが必要です。 カウンターを実装する単純なスクリプトを使用します-ページをリロードするたびに、印刷された数値が増加します。
-
web *サーバー上に `+ test.php +`という名前のファイルを作成し、ドキュメントルートフォルダー内に配置します。
sudo vim test.php
/usr/share/nginx/html/test.php
<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count;
$_SESSION['count'] = ++$count;
スクリプトにアクセスするには、ブラウザで `+ http:/// test.php +`を指定します。 ページをリロードするたびに数値が増加するはずです。
これで、セッション情報がRedisサーバーに保存されました。 確認するには、以前に `+ redis-cli `を使用してRedisサービスに接続した* redis *マシンでSSHセッションに戻ります。 ` keys * +`でコンテンツを再度取得します:
keys *
そして、次のような出力が得られるはずです。
Output1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"
これは、セッション情報がRedisサーバーに保存されていることを示しています。 同様の方法で、追加のWebサーバーをRedisサーバーに接続できます。
結論
Redisは強力で高速なキー値ストレージサービスであり、PHPのセッションハンドラーとしても使用でき、セッションストレージ用の分散システムを提供することでスケーラブルなPHP環境を実現します。 PHPアプリケーションのスケーリングの詳細については、https://www.digitalocean.com/company/blog/horizontally-scaling-php-applications/ [PHPアプリケーションの水平スケーリング]の記事をご覧ください。