前回(Redisのインストール CentOS6.8)の続き。Redisを複数起動してマスターと参照用スレーブで冗長化するチップスです。
バックナンバー
構成概要
役割 | Redisスクリプト | ポート |
マスター | redis_6379 | 6379 |
スレーブ | redis_6381 | 6381 |
スレーブ | redis_6382 | 6382 |
スレーブ | redis_6383 | 6383 |
上記構成で作ります。
1 |
# cp /etc/redis/6379.conf /etc/redis/6381.conf |
設定ファイルを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# 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 |
テンプレートとして複製して、ポート部分を変更します。
1 |
# cp /etc/redis/6381.conf /etc/redis/6382.conf |
1 |
# cp /etc/redis/6381.conf /etc/redis/6383.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# 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ディレクトリの作成します。
1 2 3 |
# mkdir -p /var/redis/6381 # mkdir -p /var/redis/6382 # mkdir -p /var/redis/6383 |
起動スクリプト複製しましょう!
1 |
# cp /etc/init.d/redis_6379 /etc/in+it.d/redis_6381 |
起動スクリプトの編集を行います。
1 2 3 4 5 6 7 8 |
# vi /etc/init.d/redis_6381 REDISPORT=6379 ↓変更 #REDISPORT=6379 REDISPORT=6381 |
好みでrestartをつけてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# 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 |
複製しましょう。
1 |
# cp /etc/init.d/redis_6379 /etc/init.d/redis_6382 |
1 |
# cp /etc/init.d/redis_6379 /etc/init.d/redis_6383 |
ポート部分を編集します。
1 2 3 4 5 6 7 8 |
# vi /etc/init.d/redis_6382 REDISPORT=6379 ↓変更 #REDISPORT=6379 REDISPORT=6382 |
1 2 3 4 5 6 7 8 |
# vi /etc/init.d/redis_6383 REDISPORT=6379 ↓変更 #REDISPORT=6379 REDISPORT=6383 |
自動起動設定を行います。
1 2 3 |
# chkconfig --add redis_6381 # chkconfig --add redis_6382 # chkconfig --add redis_6383 |
1 2 3 |
# chkconfig redis_6381 on # chkconfig redis_6382 on # chkconfig redis_6383 on |
起動させましょう。
1 2 3 |
# /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をスレーブにします。
1 2 3 4 5 6 7 8 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 |
# 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 |
役割が確認できましたね。
値を追加する
1 2 |
# redis-cli -p 6379 set open-sesame Hello OK |
1 2 3 4 5 6 7 8 9 |
# redis-cli -p 6381 get open-sesame "Hello" # redis-cli -p 6382 get open-sesame "Hello" # redis-cli -p 6383 get open-sesame "Hello" |
値を削除する
1 2 |
# redis-cli -p 6379 del open-sesame (integer) 1 |
1 2 3 4 5 6 7 8 |
# redis-cli -p 6381 get open-sesame (nil) # redis-cli -p 6382 get open-sesame (nil) # redis-cli -p 6383 get open-sesame (nil) |
レプリケーション情報確認
1 2 3 4 5 6 7 8 9 10 11 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 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 |
お疲れ様です。