redis3.0.3 安裝與配置
看到redis3版本已出最新 3.0.3 測試了一下它的叢集功能。
1.安裝:
$ wget http://download.redis.io/releases/redis-3.0.3.tar.gz
$ tar xzf redis-3.0.3.tar.gz
$ cd redis-3.0.3
#支援包沒有,問題真多,安裝了gcc,tcl
[[email protected] redis-3.0.3]# ./runtest
You need tcl 8.5 or newer in order to run the Redis test
[[email protected]
已載入外掛:fastestmirror, product-id, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
設定安裝程序
Loading mirror speeds from cached hostfile
base
......
[[email protected]
cd src && make all
make[1]: Entering directory `/opt/redis-3.0.3/src'
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-dump redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html
(cd ../deps && make distclean)
make[2]: Entering directory `/opt/redis-3.0.3/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
(rm -f .make-*)
make[2]: Leaving directory `/opt/redis-3.0.3/deps'
(rm -f .make-*)
echo STD=-std=c99 -pedantic >> .make-settings
echo WARN=-Wall -W >> .make-settings
echo OPT=-O2 >> .make-settings
echo MALLOC=jemalloc >> .make-settings
echo CFLAGS= >> .make-settings
echo LDFLAGS= >> .make-settings
echo REDIS_CFLAGS= >> .make-settings
echo REDIS_LDFLAGS= >> .make-settings
echo PREV_FINAL_CFLAGS=-std=c99 -pedantic -Wall -W -O2 -g -ggdb -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -DUSE_JEMALLOC -I../deps/jemalloc/include >> .make-settings
echo PREV_FINAL_LDFLAGS= -g -ggdb -rdynamic >> .make-settings
(cd ../deps && make hiredis linenoise lua jemalloc)
make[2]: Entering directory `/opt/redis-3.0.3/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
(rm -f .make-*)
(echo "" > .make-ldflags)
(echo "" > .make-cflags)
MAKE hiredis
cd hiredis && make static
make[3]: Entering directory `/opt/redis-3.0.3/deps/hiredis'
gcc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
make[3]: gcc:命令未找到
make[3]: *** [net.o] 錯誤 127
make[3]: Leaving directory `/opt/redis-3.0.3/deps/hiredis'
make[2]: *** [hiredis] 錯誤 2
make[2]: Leaving directory `/opt/redis-3.0.3/deps'
make[1]: [persist-settings] 錯誤 2 (忽略)
CC adlist.o
/bin/sh: cc: command not found
make[1]: *** [adlist.o] 錯誤 127
make[1]: Leaving directory `/opt/redis-3.0.3/src'
make: *** [all] 錯誤 2
[
已載入外掛:fastestmirror, product-id, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
設定安裝程序
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository contrib is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: mirrors.163.com
* updates: centos.ustc.edu.cn
$ make
出錯:
[[email protected] redis-3.0.3]# make
cd src && make all
make[1]: Entering directory `/opt/redis-3.0.3/src'
CC adlist.o
在包含自 adlist.c:34 的檔案中:
zmalloc.h:50:31: 錯誤:jemalloc/jemalloc.h:沒有那個檔案或目錄
zmalloc.h:55:2: 錯誤:#error "Newer version of jemalloc required"
make[1]: *** [adlist.o] 錯誤 1
make[1]: Leaving directory `/opt/redis-3.0.3/src'
make: *** [all] 錯誤 2
解決:
To force compiling against libc malloc, use:
% make MALLOC=libc
(錯誤解決URL:http://www.phperz.com/article/14/1219/42002.html)
2.配置
2.1、新建6個instance,3個master,3個slave;
1. 192.168.2.188:6379
2. 192.168.2.188:6380
3. 192.168.2.132:6379
4. 192.168.2.132:6380
5. 192.168.2.134:6379
6. 192.168.2.134:6380
新建例項之前要改一下redis.conf的內容,先改埠號,再改下面的cluster配置項
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379
################################ REDIS CLUSTER ###############################
#
# Normal Redis instances can't be part of a Redis Cluster;only nodes that are
# started as cluster nodes can. In order to start a Redisinstance as a
# cluster node enable the cluster support uncommenting thefollowing:
#
cluster-enabled yes
# Every cluster node has a cluster configuration file. Thisfile is not
# intended to be edited by hand. It is created and updated byRedis nodes.
# Every Redis Cluster node requires a different clusterconfiguration file.
# Make sure that instances running in the same system does nothave
# overlapping cluster configuration file names.
#
cluster-config-file nodes-6379.conf
# Cluster node timeout is the amount of seconds a node must beunreachable
# for it to be considered in failure state.
# Most other internal time limits are multiplicators of thenode timeout.
#
cluster-node-timeout 15
# In order to setup your cluster make sure to read thedocumentation
# available at http://redis.io web site.
#複製配置檔案,並修改port: 6380, cluster-config-file nodes-6380.conf
cp redis.conf redis2.conf
啟動6個例項:
[[email protected] redis-3.0.3]# src/redis-server redis.conf &
[[email protected] redis-3.0.3]# src/redis-server redis2.conf &
[[email protected] redis-3.0.3]# ps -ef|grep redis
root 3105 2024 0 14:36 pts/0 00:00:02 src/redis-server *:6379 [cluster]
root 3191 2024 0 15:04 pts/0 00:00:00 src/redis-server *:6380 [cluster]
root 3197 2024 0 15:04 pts/0 00:00:00 grep redis
[[email protected] redis-3.0.3]# src/redis-server redis.conf &
[[email protected] redis-3.0.3]# src/redis-server redis2.conf &
[[email protected] redis-3.0.3]# ps -ef|grep redis
root 26035 17602 0 15:05 pts/2 00:00:00 src/redis-server *:6379 [cluster]
root 26043 17602 0 15:05 pts/2 00:00:00 src/redis-server *:6380 [cluster]
root 26057 17602 0 15:06 pts/2 00:00:00 grep redis
[[email protected] redis-3.0.3]# src/redis-server redis.conf &
[[email protected] redis-3.0.3]# src/redis-server redis2.conf &
[[email protected] redis-3.0.3]# ps -ef|grep redis
root 5689 1249 0 15:08 pts/0 00:00:00 src/redis-server *:6379 [cluster]
root 5692 1249 0 15:08 pts/0 00:00:00 src/redis-server *:6380 [cluster]
root 5696 1249 0 15:08 pts/0 00:00:00 grep redis
2.2 建立叢集:
2.2.1 安裝ruby 及 rubygems,
[[email protected] redis-3.0.3]# yum install ruby
[[email protected] redis-3.0.3]# yum install rubygems
[[email protected] redis-3.0.3]# gem install redis #安裝ruby 的redis 介面支援包
2.2.2 測試是否能連線上其它伺服器的redis-server
[[email protected] redis-3.0.3]# src/redis-cli -h 192.168.2.134 -p 6379
Could not connect to Redis at 192.168.2.134:6379: No route to host
not connected> exit
2.2.3 關閉其它伺服器中的防火牆
[[email protected] redis-3.0.3]# chkconfig iptables off
[[email protected] redis-3.0.3]# service iptables stop
iptables:清除防火牆規則: [確定]
iptables:將鏈設定為政策 ACCEPT:filter [確定]
iptables:正在解除安裝模組: [確定]
2.2.4 建立叢集:
[[email protected] redis-3.0.3]# src/redis-trib.rb create --replicas 1 192.168.2.188:6379 192.168.2.188:6380 192.168.2.132:6379 192.168.2.132:6380 192.168.2.134:6379 192.168.2.134:6380
>>> Creating cluster
Connecting to node 192.168.2.188:6379: OK
Connecting to node 192.168.2.188:6380: OK
Connecting to node 192.168.2.132:6379: OK
Connecting to node 192.168.2.132:6380: OK
Connecting to node 192.168.2.134:6379: OK
Connecting to node 192.168.2.134:6380: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.2.134:6379
192.168.2.132:6379
192.168.2.188:6379
Adding replica 192.168.2.132:6380 to 192.168.2.134:6379
Adding replica 192.168.2.134:6380 to 192.168.2.132:6379
Adding replica 192.168.2.188:6380 to 192.168.2.188:6379
M: 811daf9b3f895bf891c65cee5b8e70a9f8fd4c8a 192.168.2.188:6379
slots:10923-16383 (5461 slots) master
S: 902fd7e670ece8f4b993b930e1619d3e5ee89b0f 192.168.2.188:6380
replicates 811daf9b3f895bf891c65cee5b8e70a9f8fd4c8a
M: cc6c9301a0fc8e97ce7c00bb13529552323f6f60 192.168.2.132:6379
slots:5461-10922 (5462 slots) master
S: b55836ddfeb279b4cab60faec8ec53acf0da075e 192.168.2.132:6380
replicates 9d296647ae6cac139a817d46ab3efef50290def8
M: 9d296647ae6cac139a817d46ab3efef50290def8 192.168.2.134:6379
slots:0-5460 (5461 slots) master
S: 91cab39311b0bd69ccf5de9608778d271064e087 192.168.2.134:6380
replicates cc6c9301a0fc8e97ce7c00bb13529552323f6f60
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
#檢視 叢集資訊
[[email protected] redis-3.0.3]# src/redis-cli -p 6379
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:1305
cluster_stats_messages_received:1305
127.0.0.1:6379>
127.0.0.1:6379> set hello tang
OK
127.0.0.1:6379> keys *
1) "hello"
127.0.0.1:6379> set user_id 1234
OK
127.0.0.1:6379> keys *
1) "user_id"
2) "hello"
127.0.0.1:6379> get user_id
"1234"
127.0.0.1:6379>
[[email protected] redis-3.0.3]# src/redis-cli -p 6380
127.0.0.1:6380> keys *
1) "user_id"
2) "hello"
127.0.0.1:6380> get user_id
(error) MOVED 3139 192.168.2.134:6379
127.0.0.1:6380> get hello
(error) MOVED 866 192.168.2.134:6379
127.0.0.1:6380> keys *
1) "user_id"
2) "hello"
127.0.0.1:6380> exit
#當使用引數 -c 登入後,會自動取到其它節點中的資料
[[email protected] redis-3.0.3]# src/redis-cli -c -p 6380
127.0.0.1:6380> get user_id
-> Redirected to slot [3139] located at 192.168.2.134:6379
"1234"
192.168.2.134:6379> get hello
"tang"
192.168.2.134:6379> keys *
1) "user_id"
2) "hello"
192.168.2.134:6379> get year
-> Redirected to slot [10071] located at 192.168.2.132:6379
"2015"
192.168.2.132:6379> get month
"08"
192.168.2.132:6379> get day
-> Redirected to slot [4110] located at 192.168.2.134:6379
(nil)
192.168.2.134:6379>