【KVS】CentOS 6 に Redis-Cluster を構築するメモ【redis-trib.rb】

| 0件のコメント

CeentOS 6.8 に Redis-3.2.5 をインストールし, Redis-Cluster を構築するメモ。

CentOS 6 に Redis インストール

最新安定版の Redis 3.2.5 をソースからインストールする。

$ wget download.redis.ioreleasesredis-3.2.5.tar.gz
$ redis-3.2.5 tar xzvf redis-3.2.5.tar.gz
$ cd redis-3.2.5
$ make

make test 実行のために tcl (8.5以上)をインストール。また `[err]: Test replication partial resync: ok psync` エラー[1] の対策のため, taskset コマンドを使う。

$ sudo yum install tcl 
$ taskset -c 0 make test
$ sudo make install
$ redis-server --version
$ redis-cli -p 6739 ping
PONG

インストールに成功したら, install_server.sh で設定ファイルの 生成・配置・起動スクリプト(chkconfig)など の設定などを行う。

$ cd utils
$ sudo ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6739] 6739
Please select the redis config file name [/etc/redis/6739.conf]
Selected default - /etc/redis/6739.conf
Please select the redis log file name [/var/log/redis_6739.log]
Selected default - /var/log/redis_6739.log
Please select the data directory for this instance [/var/lib/redis/6739]
Selected default - /var/lib/redis/6739
Please select the redis executable path [] /usr/local/bin/redis-server
Selected config:
Port           : 6739
Config file    : /etc/redis/6739.conf
Log file       : /var/log/redis_6739.log
Data dir       : /var/lib/redis/6739
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6739.conf => /etc/init.d/redis_6739
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

Redis-Cluster の構築

master3台の構成で Cluster を構築する。 負荷分散できることはもちろん, Node間で互いに監視するので監視専用サーバーが要らないのも利点。
上記の手順で各ホストに Redis をインストールしてある状態とする。Cluster として動かすために redis.conf を変更する。

$ sudo vim /etc/redis/redis_6739.conf
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes-6739.conf
cluster-node-timeout 15000
appendonly yes

変更した redis.conf を各ホストに配布・再起動する。

$ for host in 192.168.10.1 192.168.10.2 192.168.10.3; do scp redis_6739.conf root@$host:/etc/redis/; ssh root@$host "sudo /etc/init.d/redis_6739 restart"; done

Clusterを構築する utils/redis-trib.rb に必要なファイルのインストールし実行する。redis-trib.rb が内部で redis-client を使っているらしく最新の 3.2.2 が原因で動かず 3.2.1 に落としたら動いた。

# Ruby 1.8.7.374-4.el6_6 & Rubygems 1.3.7-5.el6 
$ sudo yum install ruby
$ sudo yum install rubygems
$ sudo gem install redis -v 3.2.1

$ ./redis-trib.rb create 192.168.10.1:6739 192.168.10.2:6739 192.168.10.3:6739

Cluster の動作確認。

$ redis-cli -p 6739 -c
127.0.0.1:6739> cluster nodes
5018bdc02898b53c752e3b7df91e46a8aad6d4af 192.168.10.1:6739 master - 0 1481017459922 3 connected 0-5460
57ba77cbfa6b7fa831946a60e77c89e76aa88771 192.168.10.2:6739 myself,master - 0 0 1 connected 10923-16383
da9757c83d88a6d84f3e68d3e4cfb2ea0e7531d4 192.168.10.3:6739 master - 0 1481017461927 2 connected 5461-10922

`redis-cli -c` は `Enable cluster mode (follow -ASK and -MOVED redirections).` のはずなんだけど, KEYS は redirect してくれない場合があって全ノード見にいったりしている。

for i in 1 2 3; do redis-cli -h 192.168.10.$i -p 6379 -c KEYS "*"; done

macOS でも上記とほとんど同じ手順でクラスターを構築できます。 (brew でインストールして /usr/local/etc/redis.conf を複製し設定変更)
Lua によるサーバサイドスクリプティングを試しているので近々書くかもしれません。

Redis-Cluster 構築時の Troubleshooting

redis-trib.rb 実行時に以下のエラーが起きた時は 各ノードで flushall / cluster reset する。

[ERR] Node 127.0.0.1:6379 is not empty. Either the node already knows other nodes (check with CLUSTERNODES) or contains some key in database 0.
$ redis-cli -p 6379
127.0.0.1:6379> flushall
127.0.0.1:6379> cluster reset
127.0.0.1:6379> exit


[1] [err]: Test replication partial resync: ok psync (diskless: yes, reconnect: 1) について
[2]
Redis Clusterの操作を簡単にするredis-trib.rbの使い方
[3] Redis Cluster の構築と利用(Redis 3.0.0)
[4] Redisのインストール・セットアップ
[5] redis3.2.0以降はprotect-modeが有効
[6] Redis 本番障害から学んだコードレビューの勘所

コメントを残す

必須欄は * がついています