CentOS release 6.3 (Final)
redis 2.8.9
※master用, slave用で2台作成します
※master(192.168.0.1)、slave(192.168.0.2)とします
redis 2.8.9
※master用, slave用で2台作成します
※master(192.168.0.1)、slave(192.168.0.2)とします
■redisインストール
yum -y update
yum -y groupinstall "Development Tools"
yum -y install tcl tcl-devel
wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
bzip2 -dc jemalloc-3.6.0.tar.bz2 | tar xvf -
cd jemalloc-3.6.0
./configure
make
make install
wget http://download.redis.io/releases/redis-2.8.9.tar.gz
tar zvxf redis-2.8.9.tar.gz
cd redis-2.8.9/deps
make hiredis lua jemalloc linenoise
cd ../
make
make test
make install
cp redis-2.8.9/redis.conf /etc/
yum -y groupinstall "Development Tools"
yum -y install tcl tcl-devel
wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
bzip2 -dc jemalloc-3.6.0.tar.bz2 | tar xvf -
cd jemalloc-3.6.0
./configure
make
make install
wget http://download.redis.io/releases/redis-2.8.9.tar.gz
tar zvxf redis-2.8.9.tar.gz
cd redis-2.8.9/deps
make hiredis lua jemalloc linenoise
cd ../
make
make test
make install
cp redis-2.8.9/redis.conf /etc/
■slave側設定
redisでslaveサーバを登録する場合はslave側から
「私はこのmasterのslaveになります」
というコマンドを発行します
nohup redis-server /etc/redis.conf &
redis-cli
> SLAVEOF 192.168.0.1 6379
> INFO REPLICATION
「私はこのmasterのslaveになります」
というコマンドを発行します
nohup redis-server /etc/redis.conf &
redis-cli
> SLAVEOF 192.168.0.1 6379
> INFO REPLICATION
# Replication role:slave master_host:192.168.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:267 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0と指定したmasterのスレーブとなっていることを確認します
■master側確認
特にmaster側で作業することはないですが、念のためslaveが登録されているか確認します
nohup redis-server /etc/redis.conf &
redis-cli
> INFO REPLICATION
nohup redis-server /etc/redis.conf &
redis-cli
> INFO REPLICATION
# Replication role:master connected_slaves:1 slave0:ip=192.168.0.2,port=6379,state=online,offset=366,lag=0 master_repl_offset:366 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:365とslaveが接続されていることを確認します
■動作確認
master側のredisに対してデータを投入してみます
・master側作業
・slave側確認
slave側にもデータが同期されていることを確認します
また、slave側に書き込みを行おうとすると以下のようなエラーとなります
また、今回の場合はコマンドでslave登録したのでslave側を再起動するとまたmasterに戻ってしまいます
起動するためにslaveとして登録するのは大変なので、その場合は設定ファイルにslaveの情報を記載しておくことができます
・master側作業
redis-cli
> set key1 value
OK
> keys *
1) "key1"
> set key1 value
OK
> keys *
1) "key1"
・slave側確認
redis-cli
> keys *
1) "key1"
> keys *
1) "key1"
slave側にもデータが同期されていることを確認します
また、slave側に書き込みを行おうとすると以下のようなエラーとなります
> set key2 value (error) READONLY You can't write against a read only slave.これはslaveがread onlyで起動しているためであり、設定によってはslave側に書き込みを行うことも可能です(今回は紹介しません)
また、今回の場合はコマンドでslave登録したのでslave側を再起動するとまたmasterに戻ってしまいます
起動するためにslaveとして登録するのは大変なので、その場合は設定ファイルにslaveの情報を記載しておくことができます
■手動fail over
masterがダウンしてしまった場合を想定してslaveをmasterに昇格させてみます
masterをkillコマンドでダウンさせてください
この状態でslave側で「INFO REPLICATION」を実行すると master_link_status:down となっていることがわかります
slaveをmasterに昇格させてみます
・slave側作業
masterに昇格していることがわかります
ダウンした元masterサーバ次回起動時にはmasterではなくslaveとして起動、登録する必要がありますのでご注意ください
masterをkillコマンドでダウンさせてください
この状態でslave側で「INFO REPLICATION」を実行すると master_link_status:down となっていることがわかります
slaveをmasterに昇格させてみます
・slave側作業
redis-cli
> SLAVEOF NO ONE
OK
> INFO REPLICATION
> SLAVEOF NO ONE
OK
> INFO REPLICATION
# Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
masterに昇格していることがわかります
ダウンした元masterサーバ次回起動時にはmasterではなくslaveとして起動、登録する必要がありますのでご注意ください
単純にredisのmaster <-> slave間でデータを同期させる方法は以上です
次回は redis-sentinel を使った、自動fail over の仕組みを試してみたいと思います
■参考サイト
0 件のコメント:
コメントを投稿