Redis

Redisの冗長化

優 Redis
Redis インストール
Redis https://redis.io/

前回(Redisのインストール CentOS6.8)の続き。Redisを複数起動してマスターと参照用スレーブで冗長化するチップスです。

バックナンバー

  1. Redisのインストール CentOS6.8
  2. Redisの冗長化
  3. Redisクラスタ フェイルオーバ Redis Sentinel

 構成概要

役割 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

お手軽にマスターとスレーブ構成が出来ました。

お疲れ様です。

Redis
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG