バックナンバー
ニコニコ動画やソーシャルゲーム等で大活躍のKVS型インメモリデータベース、Redisのインストールするチップスです。セッション管理やキャッシュに使ってみてはいかがでしょうか。
KVS
キーバリューストア(Kye-Value Store)の略で、膨大な情報を保存するのに適したデータ保存形式のひとつ。特に、複数のサーバーに分散して KVS方式でデータを保存すること、あるいはそうした情報管理システムを分散KVSという。
KVSって何もの??
コード(主キー) | なまえ | しょくぎょう | レベル | とくぎ |
1 | ほらりん | まもの | 99 | ほのお |
2 | ぶっくる | まもの | 32 | 噛み付き |
3 | びえーる | 近衛兵 | 70 | 回復魔法 |
キーバリューはそのままのキーと値です。単純にキーと値の集まりで構成されたデータベース。
Redisのメリット
- 分散化、冗長化しやすい。
- KVSだけど集合やソートが扱える。
頻繁に更新されるリストデータやリアルタイムランキング、カウンタなどに向いている。 - インメモリなので高速
- キャッシュ用途で活躍
- セッションも標準で入れられる
- 揮発性だが、永続化もできる
- データの保存期限を設定できる。
- sentinelと組み合わせると、Redisのフェイルオーバーは簡単
消えても困らない系データのキャッシュやセッション管理用途に使われることが多いです。そんなRedisをインストールするチップスです。
リポジトリのインストール
EPEL
1 |
# yum install epel-release |
Remi
1 |
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm |
基本モジュールインストール
ソースから入れる為の準備を行います。
1 |
# yum groupinstall "Development Tools" |
1 |
# yum groupinstall "Base" |
1 |
# yum install wget gcc gcc-c++ pcre-devel zlib-devel make openssl-devel libxml2 libxml2-devel libxslt-devel libxslt libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools-devel flex jemalloc |
1 |
# yum install --enablerepo=epel gperftools |
カーネルパラメータチューニング
vm.overcommit_memory, somaxconnをRedis用に設定します。
1 2 3 4 5 6 7 8 |
# vi /etc/sysctl.conf ※下記を追記 #Redis用設定 vm.overcommit_memory = 1 net.core.somaxconn = 1024 |
反映させましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 vm.overcommit_memory = 1 ←確認 net.core.somaxconn = 1024 ←確認 |
Transparent Huge Pagesの無効化
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# vi /etc/rc.local # that this script will be executed during boot. ・ ・ touch /var/lock/subsys/local ※以下を追記 #Redis用設定 echo never > /sys/kernel/mm/transparent_hugepage/enabled |
実行権限付与
1 |
# chmod +x /etc/rc.d/rc.local |
再起動
1 |
# reboot now |
Redisのインストール
面倒だったらyumで安定版がストンと入ります。
1 |
# yum install redis |
ソースからのインストールはこちら
この手のエッジの効いたミドルウェアは新バージョンで魅力的な機能が出てきたりすることが多く、そんな時にバージョン変更をさくっと行いたいのでソースから入れるのが私は好みです。
ソースダウンロードディレクトリに移動します。
1 |
# cd /usr/local/src |
redisの公式(https://redis.io/download)からダウンロードしましょう。
1 |
# wget http://download.redis.io/releases/redis-3.2.8.tar.gz |
解凍します。
1 |
# tar xvzf redis-*.tar.gz |
作業ディレクトリに移動します。
1 |
# cd redis-* |
コンパイルとインストールを行います。
1 2 3 4 5 6 7 8 9 10 11 |
redis-3.2.8]# make && make install Hint: It's a good idea to run 'make test' ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install make[1]: Leaving directory `/usr/local/src/redis-3.2.8/src' |
インストール完了
1 |
# mkdir /etc/redis |
redisディレクトリの作成
1 |
# mkdir -p /var/redis/6379 |
ソースから基本設定ファイルを複製します。
1 |
# cp utils/redis_init_script /etc/init.d/redis_6379 |
1 |
# cp redis.conf /etc/redis/6379.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 |
# vi /etc/redis/6379.conf daemonize no ↓変更 #daemonize no daemonize yes pidfile /var/run/redis_6379.pid logfile "" ↓変更 #logfile "" logfile /var/log/redis/redis_6379.log dir ./ ↓変更 #dir ./ dir /var/redis/6379 |
ログディレクトリ作成
1 |
# mkdir /var/log/redis |
起動スクリプトの作成
1 2 3 4 5 6 7 8 9 10 11 12 |
# vi /etc/init.d/redis_6379 #!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. ※2行を追加する # chkconfig: - 58 74 # description: redis_6379 is the redis daemon |
好みで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 |
# cat /etc/init.d/redis_6379 #!/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 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 2 |
# chkconfig --add redis_6379 # chkconfig redis_6379 on |
起動させます。
1 2 3 |
# /etc/init.d/redis_6379 start Starting Redis server... |
プロセスを確認しましょう。
1 2 |
# netstat -an | grep 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN |
1 2 |
# redis-cli ping PONG |
1 2 3 |
バージョン確認 # redis-cli info | grep redis_version redis_version:3.2.8 |
ログから動いているか確認します。
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 |
# tail -n 25 /var/log/redis/redis_6379.log 6037:M 13 Feb 19:08:55.807 * DB saved on disk 6037:M 13 Feb 19:08:55.807 * Removing the pid file. 6037:M 13 Feb 19:08:55.807 # Redis is now ready to exit, bye bye... 1483:M 13 Feb 19:14:22.924 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.8 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 1483 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 1483:M 13 Feb 19:14:22.927 # Server started, Redis version 3.2.8 1483:M 13 Feb 19:14:22.927 * DB loaded from disk: 0.001 seconds 1483:M 13 Feb 19:14:22.928 * The server is now ready to accept connections on port 6379 |
アスキーアートが可愛らしいですね。
お疲れ様です。