PHPのSESSION管理はRedisではなくRedis Clusterを使いたいという方にだけこっそり教えます


はい。。大げさなタイトルですみません。
PHPのSESSION管理でRedis Clusterを指定したい場合の方法です。

環境はこちら。
redis 3.0.5、phpredis、apache 2.2.15

Redis Cluster を指定する

phpで直接指定するにはこんな感じ。

php
ini_set('session.save_handler', 'rediscluster');
ini_set('session.save_path', 'seed[]=192.168.1.100:6379&seed[]=192.168.1.110:6379&seed[]=192.168.1.120:6379&timeout=3&read_timeout=3&failover=error');

apacheのextensionに書くにはこんな感じ。

redis.ini
extension = redis.so
session.save_handler = rediscluster
session.save_path = 'seed[]=192.168.1.100:6379&seed[]=192.168.1.110:6379&seed[]=192.168.1.120:6379&timeout=3&read_timeout=3&failover=error'

(おまけ) Redis を指定する

php
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://host1:6379, tcp://host2:6379?timeout=2.5, tcp://host3:6379');
redis.ini
extension = redis.so
session.save_handler = redis
session.save_path = "tcp://host1:6379, tcp://host2:6379?timeout=2.5, tcp://host3:6379"

ちなみにですが、Redis ClusterにRedisとしてPHP Sessionを指定すると下記のようにエラーが出ます。

[06-Apr-2016 16:48:04 Asia/Tokyo] PHP Warning:  Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (tcp://127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003

参考URL

https://github.com/phpredis/phpredis/issues/620
https://github.com/phpredis/phpredis/issues/664