Redisのセットアップ

CentOS/Fedora/Debian/Ubuntu の各Linuxに、redisを導入する方法をまとめました。
Github – Redisのセットアップ

以降、redisのセットアップについて記載します

 

redis のインストール

redis のホームページからソースをダウンロードします
落とすバージョンにあわせて適宜ファイル名を変更してください

$ wget http://download.redis.io/releases/redis-2.8.2.tar.gz
$ tar xzf redis-2.8.*.tar.gz
$ cd redis-2.8.*
$ make
$ sudo make install

デフォルトは /usr/local/bin/ に導入されます
インストール先を変更する場合は、redis-2.8.*/src 配下の Makefile を手動で変更します

PREFIX?=インストール先ディレクトリ名

 

redis ユーザとグループの作成

redis インスタンスを起動するユーザとグループを作成します
ユーザはログインの必要性はないので、nologin を指定します

$ sudo groupadd redis
$ sudo useradd -s /sbin/nologin -M -g redis redis

redis のログ出力ディレクトリ作成

ログ出力先を作成して redis ユーザに書き込み権限を付与します

$ sudo mkdir /var/log/redis
$ sudo chmod 755 /var/log/redis
$ sudo chown redis:redis /var/log/redis

 

redis 設定ファイルの作成

新たに設定ファイル格納ディレクトリを作成し、既に用意されている設定ファイルをコピーして利用します。のちに冗長化(複数インスタンス)するので、混乱を避けるため起動するポート名で設定ファイルを作成します

$ sudo mkdir /etc/redis
$ sudo chown redis.redis /etc/redis

$ sudo cp -p ./redis-2.8.*/redis.conf /etc/redis/6379.conf
$ sudo vi /etc/redis/6379.conf

 

デーモン起動の指定と、ログの出力場所を設定します
bind はIPアドレスをセットすることで、接続するサーバを制限することが可能ですが、最初はセキュリティを確保するためにも、127.0.0.1(ローカルのみ)とし、接続制限をかけておきます
また接続時のパスワードもあわせて指定しておきましょう
※ 接続サーバを制限は、冗長化構築時に iptables または bind で再度見直しをかけます

daemonize yes
bind 127.0.0.1
requirepass hoge   ★ パスワードです 適当に変更してください
pidfile /var/run/redis_6379.pid
logfile “/var/log/redis/6379.log”

 

redis の起動確認

redis ユーザで redis サーバを起動させます
インストールしたパスにある redis-server を、設定ファイルを引数に起動します
なお正常に起動されているか、ログファイルや ps コマンドで確認して下さい

$ sudo -u redis sh -c “/usr/local/bin/redis-server /etc/redis/6379.conf”
$ ps -e | grep redis
3706 ? 00:00:00 redis-server  ★ 出力されることを確認します

ログファイルに起動処理結果が出力されています

$ tail -30 /var/log/redis/6379.log
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 2.8.2 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 3048
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

[3048] 15 Nov 17:16:30.446 # Server started, Redis version 2.8.2
[3048] 15 Nov 17:16:30.446 * DB loaded from disk: 0.000 seconds
[3048] 15 Nov 17:16:30.446 * The server is now ready to accept connections on port 6379
$

 

redis にローカルから接続します

パスワード入力後、PING コマンドで PONG が返却されることを確認します

$ /usr/local/bin/redis-cli -p 6379

127.0.0.1:6379> auth hoge

OK
127.0.0.1:6379> ping
PONG

 

redis サーバを終了させます

PING コマンドで返却されないこと、ps コマンドで出力されないことを確認します

127.0.0.1:6379> shutdown
not connected> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
$ ps -e | grep redis

 

自動起動スクリプト

用意された自動起動スクリプトをコピーして、サーバの再起動でも自動的に起動するようにします
※インストールだけでは自動起動しません

$ sudo cp -p ./redis-2.8.*/utils/redis_init_script /etc/init.d/redis
$ sudo vi /etc/init.d/redis

設定方法はOS環境にあわせ適宜変更してください

[CentOS5/6,Fedora]

# chkconfig: 345 70 15

[Debian/Ubuntu]

### BEGIN INIT INFO
# Provides: redis6379
# Required-Start: $syslog $remote_fs bootlogs
# Required-Stop: $syslog $remote_fs
# Should-Start: $local_fs
# Should-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO

スクリプトで起動できることを確認します

$ sudo /etc/init.d/redis start
$ ps -e | grep redis
$ /usr/local/bin/redis-cli -p 6379
127.0.0.1:6379> auth hoge
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

スクリプトで終了できることを確認します

$ sudo /etc/init.d/redis stop
Stopping …
Redis stopped
$ ps -e | grep redis
$ /usr/local/bin/redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused

 

redis の自動起動登録

各OSの自動起動プログラムを利用してください

[CentOS5/6,Fedora]

$ sudo chkconfig redis on
$ chkconfig –list | grep redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[Debian/Ubuntu]

$ sudo update-rc.d redis defaults 20
$ sudo sysv-rc-conf –list redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off

 

メモリオーバーコミットの設定

Linux では実メモリーとスワップ領域が足りなくなると、メモリ確保プロセスを強制終了させる仕様があります(OOMKiller)

0:空き容量がなければ実行中のプロセスを強制終了(デフォルト)
1:ギリギリまで頑張り、メモリ確保できなければ実行中のプロセスを強制終了
2:空き容量がない場合はエラーを発生させる

redis はデータ永続化(AOF ログ保存)の際、格納データの2倍のメモリを要求します
もしメモリの確保(allocate)に失敗した場合、エラーが発生し、OOMKiller のデフォルト設定ではプロセスを強制終了します
よってメモリ確保エラーに起因した apache のプロセス終了を防止するための設定をしておきます

$ sudo vi /etc/sysctl.conf
$ vm.overcommit_memory = 2

 

Appendix
パッケージで導入する場合

redis をソースからではなく、パッケージでインストールする方法を記載します
冗長化構成(redis-sentinel)を導入する場合は、2.4.16 または 2.6.0-rc6 以降のバージョンが必要です
なおパッケージ版は導入するディレクトリがバラバラです

配置先例)
redis本体    :/usr/bin/redis-server
redis-sentinel :/usr/bin/redis-sentinel
redis設定ファイル:/etc/redis/redis.conf
redisクライアント:/usr/bin/redis-cli

設定ファイルなどのパスが変わるので、各ファイルの配置先を確認しておく必要があります

$ sudo updatedb
$ locate redis-server
$ locate redis-sentinel
$ locate redis.conf
$ locate redis-cli

[CentOS 5/6]
CentOS 5/6 の標準リポジトリに redis は存在しません(2015/11/15時点)
remi リポジトリが必要です。導入方法はこちら

remi 版の redis は gperftools の tcmalloc を利用しているため gperftools-libs もインストールします

$ yum info –enablerepo=remi redis
Version : 2.8.9
$ sudo yum install gperftools –enablerepo=epel
$ sudo yum install –enablerepo=remi redis

[CentOS7]
rpm パッケージを利用します
jemalloc を利用しているため同時にインストールします

$ cd /tmp
$ wget http://dl.fedoraproject.org/pub/epel/7/x86_64/j/jemalloc-3.6.0-1.el7.x86_64.rpm
$ sudo rpm -ivh jemalloc-3.6.0-1.el7.x86_64.rpm
$ wget http://dl.fedoraproject.org/pub/epel/7/x86_64/r/redis-2.8.19-1.el7.x86_64.rpm
$ sudo rpm -ivh redis-2.8.19-1.el7.x86_64.rpm

[Debian 5/6]
Debian の標準リポジトリに redis は存在しません(2015/1/14時点)
dotdeb リポジトリが必要です。導入方法はこちら

redis のバージョンを確認して、バージョン指定でインストールします

$ sudo apt-get update
$ apt-cache showpkg redis-server
Provides:
2:2.8.19-1~dotdeb.1 –   ★ 2.8以上であることを確認してください
2:1.2.6-1 –

$ sudo apt-get install redis-server=2:2.8.19-1~dotdeb.1
続行しますか [Y/n]? y
Starting redis-server: redis-server.

自動起動されるので状態を確認します

$ ps -ef | grep redis
redis 10995 1 0 21:57 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379

redis に接続してバージョンを確認します

$ redis-cli info | grep redis_version
redis_version:2.8.19

 

以降は、redis 設定ファイルの作成 の項に沿って設定ファイルを編集し、再起動します

コメントを残す

メールアドレスが公開されることはありません。