ここまでのあらすじはここを読む。 「node-redisを入れてみるメモ( http://qiita.com/items/63de388bf40cff40a096 )」
#Redisレプリケーションの特徴
Redisレプリケーションの一般的な情報についてはここを読む。http://redis.shibu.jp/admin/replication.html
レプリケーションについてはここを読む。http://goo.gl/1tA00
ってことで(ぉぉ、上記の「ここを読む」文はまるでrequire文のようだっ!)、
#redis.confファイルの設定をいじる
redis.confファイルにちょっと書くだけでスレーブを追加できます。
apt-getで入れたのでredis.confファイルは以下にあります。
/etc/redis/redis.conf
他の入れ方すると違う場所にあったりredis-server起動時にパス指定したりするので、それらの方法に従った場所のredis.confを開きます。
#ここを書き換える
################################# REPLICATION #################################
# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. Note that the configuration is local to the slave
# so for example it is possible to configure the slave to save the DB with a
# different interval, or to listen to another port, and so on.
(略)
# slaveof <masterip> <masterport>
# ↑これを マスターのIP と port に変更してコメント外す
slaveof 192.168.1.12 6379
これだけ。
他の設定はここを読む http://redis.shibu.jp/admin/config.html#confval-slaveof
#マスターのredis.confも必要ならいじる
apt-getでインストールするとredis.confのbind ( http://redis.shibu.jp/admin/config.html#confval-bind ) が'127.0.0.1'に固定されてるかもしれません。
もし、上でいじった、スレーブからの接続先IPを192.168.1.12にしたり、ドメイン名を指定する場合は、ここをコメントアウトするか指定します。
今回は 192.168.1.12のマシンのredis.confのbindをコメントアウトしました。(パスワード使う場合は下記参照)
# bind 127.0.0.1
#再起動
あとは、apt-getなら下記のように2台とも再起動して完了です。
sudo /etc/init.d/redis-server restart
#確認
前回試したnode-redisのサンプルをマスターで書き込み、スレーブで見るという確認をしてみます。
###マスター側
var redis = require("redis"),
client = redis.createClient();
client.set("test", "うひょー");
###スレーブ側
var redis = require("redis"),
client = redis.createClient();
client.get("test", function(err, data){
console.log(data);
});
// => うひょー
ちょっと変えてみます。
###マスター側
var redis = require("redis"),
client = redis.createClient();
client.set("test", "うひぁああああ");
###スレーブ側
var redis = require("redis"),
client = redis.createClient();
client.get("test", function(err, data){
console.log(data);
});
// => うひぁああああ
#できました。
マスターでの書きかえがスレーブへも伝播しているのがわかります。
#パスワード
上記で、/etc/redis/redis.confのbindをコメントアウトしましたが、ローカルネットワークだけで使う場合は良いのですが、もし、外からもアクセスできる環境の場合はマスターにパスワードを設定しておきます。
(p.s. Redisはとても高速なため、性能の良いマシン上で実行している場合は、毎秒150,000回程度のパスワードチェックを行うことができます。そのため、弱いパスワードであれば簡単に突破されてしまうため、非常に強いパスワードを設定するようにしてください。とのことです。)
requirepass hogehogepiyopiyoPasword
masterauth hogehogepiyopiyoPasword
あとnode-redisから扱う場合は
client.auth('hogehogepiyopiyoPasword', function(e,ok){
console.log("authError " + e + '--' +client.host+ ': ' +ok);
})
//これはつながると下記のように表示されます
//authError null--192.168.1.12: OK
なにはともあれ、自分のサーバー環境へとりあえず放り込んでおくと、ちょうどlocalStorageのような手軽さ(+いろいろな機能付き)でkey/valueストアを利用できる感じ。
ふと、、、、こんなに手軽だと、これって通信のかわりに利用する手もあるんじゃないの^^? <表は手軽だけれど裏は大げさ?Pub/Subより楽だったりして、、、。あ、いやmessageイベントあるからやっぱPub/Subか。
というわけで、次は、RedisでPub/Sub通信。