
前回(Redisのインストール CentOS6.8)の続き。Redisを複数起動してマスターと参照用スレーブで冗長化するチップスです。
バックナンバー
構成概要
| 役割 | Redisスクリプト | ポート |
| マスター | redis_6379 | 6379 |
| スレーブ | redis_6381 | 6381 |
| スレーブ | redis_6382 | 6382 |
| スレーブ | redis_6383 | 6383 |
上記構成で作ります。
# cp /etc/redis/6379.conf /etc/redis/6381.conf
設定ファイルを編集します。
# vi /etc/redis/6381.conf port 6379 ↓変更 #port 6379 port 6381 pidfile /var/run/redis_6379.pid ↓変更 #pidfile /var/run/redis_6379.pid pidfile /var/run/redis_6381.pid #logfile "" logfile /var/log/redis/redis_6379.log ↓変更 #logfile "" #logfile /var/log/redis/redis_6379.log logfile /var/log/redis/redis_6381.log dbfilename dump.rdb ↓変更 #dbfilename dump.rdb dbfilename "dump_redis_6381.rdb" #dir ./ dir /var/redis/6379 ↓変更 #dir ./ #dir /var/redis/6379 dir /var/redis/6381
テンプレートとして複製して、ポート部分を変更します。
# cp /etc/redis/6381.conf /etc/redis/6382.conf
# cp /etc/redis/6381.conf /etc/redis/6383.conf
# vi /etc/redis/6382.conf port 6381 ↓変更 port 6382 pidfile /var/run/redis_6381.pid ↓変更 pidfile /var/run/redis_6382.pid logfile /var/log/redis/redis_6381.log ↓変更 logfile /var/log/redis/redis_6382.log dbfilename dump.rdb ↓変更 #dbfilename dump.rdb dbfilename "dump_redis_6382.rdb" dir /var/redis/6381 ↓変更 dir /var/redis/6382
# vi /etc/redis/6383.conf port 6381 ↓変更 port 6383 pidfile /var/run/redis_6381.pid ↓変更 pidfile /var/run/redis_6383.pid logfile /var/log/redis/redis_6381.log ↓変更 logfile /var/log/redis/redis_6383.log dbfilename dump.rdb ↓変更 #dbfilename dump.rdb dbfilename "dump_redis_6383.rdb" dir /var/redis/6381 ↓変更 dir /var/redis/6383
Redisディレクトリの作成します。
# mkdir -p /var/redis/6381 # mkdir -p /var/redis/6382 # mkdir -p /var/redis/6383
起動スクリプト複製しましょう!
# cp /etc/init.d/redis_6379 /etc/in+it.d/redis_6381
起動スクリプトの編集を行います。
# vi /etc/init.d/redis_6381 REDISPORT=6379 ↓変更 #REDISPORT=6379 REDISPORT=6381
好みでrestartをつけてます。
# cat /etc/init.d/redis_6381
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
#REDISPORT=6379
REDISPORT=6381
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
start(){
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
}
stop(){
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
}
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart)
stop
start
;;
*)
echo "Please use start or stop as first argument"
;;
esac
複製しましょう。
# cp /etc/init.d/redis_6379 /etc/init.d/redis_6382
# cp /etc/init.d/redis_6379 /etc/init.d/redis_6383
ポート部分を編集します。
# vi /etc/init.d/redis_6382 REDISPORT=6379 ↓変更 #REDISPORT=6379 REDISPORT=6382
# vi /etc/init.d/redis_6383 REDISPORT=6379 ↓変更 #REDISPORT=6379 REDISPORT=6383
自動起動設定を行います。
# chkconfig --add redis_6381 # chkconfig --add redis_6382 # chkconfig --add redis_6383
# chkconfig redis_6381 on # chkconfig redis_6382 on # chkconfig redis_6383 on
起動させましょう。
# /etc/init.d/redis_6381 start # /etc/init.d/redis_6382 start # /etc/init.d/redis_6383 start
こんな風に
| 役割 | Redisスクリプト | ポート |
| マスター | redis_6379 | 6379 |
| スレーブ | redis_6381 | 6381 |
| スレーブ | redis_6382 | 6382 |
| スレーブ | redis_6383 | 6383 |
redis_6379をマスターに、redis_6381, redis_6382, redis_6383をスレーブにします。
# redis-cli -p 6381 slaveof 127.0.0.1 6379 OK # redis-cli -p 6382 slaveof 127.0.0.1 6379 OK # redis-cli -p 6383 slaveof 127.0.0.1 6379 OK
# redis-cli -p 6379 info | grep role role:master # redis-cli -p 6381 info | grep role role:slave # redis-cli -p 6382 info | grep role role:slave # redis-cli -p 6383 info | grep role role:slave
役割が確認できましたね。
値を追加する
# redis-cli -p 6379 set open-sesame Hello OK
レプリケート確認
# redis-cli -p 6381 get open-sesame "Hello" # redis-cli -p 6382 get open-sesame "Hello" # redis-cli -p 6383 get open-sesame "Hello"
値を削除する
# redis-cli -p 6379 del open-sesame (integer) 1
# redis-cli -p 6381 get open-sesame (nil) # redis-cli -p 6382 get open-sesame (nil) # redis-cli -p 6383 get open-sesame (nil)
レプリケーション情報確認
# redis-cli -p 6379 info replication # Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6381,state=online,offset=335,lag=0 master_repl_offset:335 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:334
# redis-cli -p 6381 info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:363 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:36548 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:36547
# redis-cli -p 6382 info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:762 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:22371 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:22370
# redis-cli -p 6383 info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:6 master_sync_in_progress:0 slave_repl_offset:790 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
お手軽にマスターとスレーブ構成が出来ました。
お疲れ様です。
