linux下安装redis 3.2.1

#tar zxvf redis-3.2.1.tar.gz

#cd redis-3.2.1

#make MALLOC=libc

#cd redis-3.2.1/src

#make test

#make install

安装完成后,会有6个redis-*文件从./redis-3.2.1/src/redis-*自动被拷贝到/usr/local/bin/下面

#cp ./redis-3.2.1/redis.conf /etc/redis.conf #拷贝配置文件到/etc并修改配置

bind 127.0.0.1 10.132.6.118

protected-mode yes

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize yes

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile "/var/run/redis_6379.log"

databases 16

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir /app/redis-3.2.1/data

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

maxclients 50000

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

maxmemory-policy volatile-ttl

#cluster-enabled yes

#cluster-config-file "/opt/nodes.conf"

#cluster-node-timeout 5000

启动redis: #redis-server /etc/redis.conf &

[[email protected] src]# redis-server /etc/redis.conf &

[1] 28671

[[email protected] src]# ps -ef |grep redis

root 28671 22836 0 10:47 pts/0 00:00:00 redis-server 0.0.0.0:6379

root 28675 22836 0 10:47 pts/0 00:00:00 grep redis

停止redis: redis-cli shutdown

[[email protected] bin]# redis-cli shutdown

28671:M 24 Jul 10:56:23.219 # User requested shutdown...

28671:M 24 Jul 10:56:23.219 * Saving the final RDB snapshot before exiting.

28671:M 24 Jul 10:56:23.226 * DB saved on disk

28671:M 24 Jul 10:56:23.226 * Removing the pid file.

28671:M 24 Jul 10:56:23.226 # Redis is now ready to exit, bye bye...

[1]+ Done redis-server /etc/redis.conf (wd: ~/redis-3.2.1/src)

(wd now: /usr/local/bin)

[[email protected] bin]# ps -ef |grep redis

root 28687 22836 0 10:56 pts/0 00:00:00 grep redis

配置redis为服务并自动启动

做一个redis启动脚本

#cd /etc/rc.d/init.d/

#vim redis

#!/bin/sh

#chkconfig: 345 86 14

#description: Startup and shutdown script for Redis

PROGDIR=/usr/local/bin #安装路径

PROGNAME=redis-server

DAEMON=$PROGDIR/$PROGNAME

CONFIG=/etc/redis.conf

PIDFILE=/var/run/redis_*.pid

DESC="redis daemon"

SCRIPTNAME=/etc/rc.d/init.d/redis

start()

{

if test -x $DAEMON

then

echo -e "Starting $DESC: $PROGNAME"

if $DAEMON $CONFIG

then

echo -e "OK"

else

echo -e "failed"

fi

else

echo -e "Couldn‘t find Redis Server ($DAEMON)"

fi

}

stop()

{

if test -e $PIDFILE

then

echo -e "Stopping $DESC: $PROGNAME"

if kill `cat $PIDFILE`

then

echo -e "OK"

else

echo -e "failed"

fi

else

echo -e "No Redis Server ($DAEMON) running"

fi

}

restart()

{

echo -e "Restarting $DESC: $PROGNAME"

stop

start

}

list()

{

ps aux | grep $PROGNAME

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

list)

list

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2

exit 1

;;

esac

exit 0

#chmod 755 redis

#chkconfig --add redis

#chkconfig redis on

#chkconfig --list redis

检验配置:

#service redis start &

#service redis list

[[email protected] bin]# redis-cli

127.0.0.1:6379>

#service redis stop

#serivce redis restart

Redis常用命令总结

[[email protected] logs]# redis-cli -h 127.0.0.1

redis 127.0.0.1:6379>

redis 127.0.0.1:6379>

redis 127.0.0.1:6379> ping

PONG

redis 127.0.0.1:6379> select 1

OK

redis 127.0.0.1:6379[1]> dbsize

(integer) 0

redis 127.0.0.1:6379[1]> select 0

OK

redis 127.0.0.1:6379> dbsize

(integer) 0

redis 127.0.0.1:6379> info

部署redis3.x-cluster

Cluster node

172.172.178.220:6379

172.172.178.221:6379

172.172.178.222:6379

172.172.178.223:6379

172.172.178.224:6379

172.172.178.225:6379

启动redis各节点实例

redis-server /opt/redis.conf

[[email protected] ~]# cat /var/run/redis_6379.log

_._

_.-“__ ‘‘-._

_.-“ `. `_. ‘‘-._ Redis 3.2.1 (00000000/0) 64 bit

.-“ .-“`. “`\/ _.,_ ‘‘-._

( ‘ , .-` | `, ) Running in standalone mode

|`-._`-…-` __…-.“-._|‘` _.-‘| Port: 6379

| `-._ `._ / _.-‘ | PID: 27555

`-._ `-._ `-./ _.-‘ _.-‘

|`-._`-._ `-.__.-‘ _.-‘_.-‘|

| `-._`-._ _.-‘_.-‘ | http://redis.io

`-._ `-._`-.__.-‘_.-‘ _.-‘

|`-._`-._ `-.__.-‘ _.-‘_.-‘|

| `-._`-._ _.-‘_.-‘ |

`-._ `-._`-.__.-‘_.-‘ _.-‘

`-._ `-.__.-‘ _.-‘

`-._ _.-‘

`-.__.-‘

27555:M 29 Jun 19:43:03.276 # Server started, Redis version 3.2.1

27555:M 29 Jun 19:43:03.276 * The server is now ready to accept connections on port 6379

安装依赖lib

yum install ruby rubygems -y

安装gem-redis

wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

gem install -l redis-3.2.1.gem

复制cluster管理程序到/usr/local/bin

scp redis-3.2.1/src/redis-trib.rb /usr/local/bin/redis-trib

创建cluster

–replicas 1 表示为集群中的每个主节点创建一个从节点

[[email protected] ~]# redis-trib create –replicas 1 172.172.178.220:6379 172.172.178.221:6379 172.172.178.222:6379 172.172.178.223:6379 172.172.178.224:6379 172.172.178.225:6379

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes…

Using 3 masters:

172.172.178.225:6379

172.172.178.224:6379

172.172.178.223:6379

Adding replica 172.172.178.222:6379 to 172.172.178.225:6379

Adding replica 172.172.178.221:6379 to 172.172.178.224:6379

Adding replica 172.172.178.220:6379 to 172.172.178.223:6379

S: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

replicates cd77344524a6ed5a4d1addfd34d7dd720c272386

S: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

replicates e3e1f4f9254d6e26bf381b9d83456a62fa555f62

S: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

replicates fc4d4c03b2ab454f230f0af3b84930b26b6a56ac

M: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots:10923-16383 (5461 slots) master

M: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots:5461-10922 (5462 slots) master

M: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots:0-5460 (5461 slots) master

Can I set the above configuration? (type ‘yes‘ to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join….

>>> Performing Cluster Check (using node 172.172.178.220:6379)

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots: (0 slots) master

replicates cd77344524a6ed5a4d1addfd34d7dd720c272386

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots: (0 slots) master

replicates e3e1f4f9254d6e26bf381b9d83456a62fa555f62

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots: (0 slots) master

replicates fc4d4c03b2ab454f230f0af3b84930b26b6a56ac

M: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots:10923-16383 (5461 slots) master

M: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots:5461-10922 (5462 slots) master

M: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots:0-5460 (5461 slots) master

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

[[email protected] ~]# redis-cli cluster nodes

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 master – 0 1467208947127 5 connected 5461-10922

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 slave fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 0 1467208947127 6 connected

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,slave cd77344524a6ed5a4d1addfd34d7dd720c272386 0 0 1 connected

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 master – 0 1467208948629 6 connected 0-5460

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 slave e3e1f4f9254d6e26bf381b9d83456a62fa555f62 0 1467208949131 5 connected

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 master – 0 1467208948128 4 connected 10923-16383

[[email protected] ~]#

[[email protected] ~]# tailf /opt/nodes.conf

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 master – 0 1467208714060 5 connected 5461-10922

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 slave fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 0 1467208716066 6 connected

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,slave cd77344524a6ed5a4d1addfd34d7dd720c272386 0 0 1 connected

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 master – 0 1467208715063 6 connected 0-5460

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 slave e3e1f4f9254d6e26bf381b9d83456a62fa555f62 0 1467208714562 5 connected

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 master – 0 1467208715564 4 connected 10923-16383

vars currentEpoch 6 lastVoteEpoch 0

测试cluster

[[email protected] ~]# redis-cli -c -p 6379 -h localhost

127.0.0.1:6379> get name

-> Redirected to slot [5798] located at 172.172.178.224:6379

(nil)

172.172.178.224:6379> set name cluster-test

OK

172.172.178.224:6379> get name

"cluster-test"

172.172.178.224:6379> KEYS *

1) "name"

kill 223上的master测试故障转移,可以看到220切换成了master角色

[[email protected] ~]# redis-cli shutdown

[[email protected] ~]# redis-cli cluster nodes

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 slave e3e1f4f9254d6e26bf381b9d83456a62fa555f62 0 1467209895832 5 connected

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 master – 0 1467209896334 5 connected 5461-10922

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 slave fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 0 1467209894829 6 connected

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,master – 0 0 7 connected 10923-16383

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 master – 0 1467209895832 6 connected 0-5460

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 master,fail – 1467209864421 1467209863721 4 disconnected

kill 224上的master测试故障转移,可以看到221切换成了master角色

[[email protected] ~]# ps -ef|grep redis

root 3098 1 0 21:57 ? 00:00:02 redis-server 0.0.0.0:6379 [cluster]

root 4649 20237 0 22:20 pts/0 00:00:00 grep redis

[[email protected] ~]#

[[email protected] ~]# kill -9 3098

[[email protected] ~]# redis-cli -c cluster nodes

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 master – 0 1467210097070 8 connected 5461-10922

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 master,fail – 1467210059529 1467210058425 5 disconnected

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 slave fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 0 1467210097573 6 connected

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,master – 0 0 7 connected 10923-16383

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 master – 0 1467210098576 6 connected 0-5460

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 master,fail – 1467209864421 1467209863721 4 disconnected

kill 225上的master测试故障转移,可以看到222切换成了master角色

[[email protected] ~]# redis-cli shutdown

[[email protected] ~]# redis-cli -c cluster nodes

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 master – 0 1467210296440 8 connected 5461-10922

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 master,fail – 1467210059529 1467210058425 5 disconnected

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 master – 0 1467210297444 10 connected 0-5460

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,master – 0 0 7 connected 10923-16383

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 master,fail - 1467210229709 1467210229107 6 disconnected

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 master,fail – 1467209864421 1467209863721 4 disconnected

如果将没有slave的master节点kill掉,集群将不可用

[[email protected] ~]# redis-cli -c

127.0.0.1:6379> get name

(error) CLUSTERDOWN The cluster is down

Redis Cluster 添加删除节点

添加master节点

172.172.178.221:6380是新增的主节点,172.172.178.222:6379是cluster中任意节点

[[email protected] ~]# redis-trib add-node 172.172.178.221:6380 172.172.178.222:6379

>>> Adding node 172.172.178.221:6380 to cluster 172.172.178.222:6379

>>> Performing Cluster Check (using node 172.172.178.222:6379)

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots: (0 slots) slave

replicates e61cffa1d3040dd5523e5c79912b23732618b464

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5461-10922 (5462 slots) master

1 additional replica(s)

S: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots: (0 slots) slave

replicates ff52c80b8477f50272a86893aec89dac153e9fbe

S: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots: (0 slots) slave

replicates 9b3b5256f0107585d5379de7e76f526d071e8a11

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:10923-16383 (5461 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

>>> Send CLUSTER MEET to node 172.172.178.221:6380 to make it join the cluster.

[OK] New node added correctly.

添加slave节点

172.172.178.221:6381是新增的从节点,172.172.178.222:6379是cluster中任意节点,–master-id是master节点的ID,–slave代表添加slave节点

[[email protected] ~]# redis-trib add-node –slave –master-id f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6381 172.172.178.222:6379

>>> Adding node 172.172.178.221:6381 to cluster 172.172.178.222:6379

>>> Performing Cluster Check (using node 172.172.178.222:6379)

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots: (0 slots) slave

replicates e61cffa1d3040dd5523e5c79912b23732618b464

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots: (0 slots) master

0 additional replica(s)

S: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots: (0 slots) slave

replicates ff52c80b8477f50272a86893aec89dac153e9fbe

S: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots: (0 slots) slave

replicates 9b3b5256f0107585d5379de7e76f526d071e8a11

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:10923-16383 (5461 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

>>> Send CLUSTER MEET to node 172.172.178.221:6381 to make it join the cluster.

Waiting for the cluster to join.

>>> Configure node as replica of 172.172.178.221:6380.

[OK] New node added correctly.

检查cluster信息

[[email protected] ~]# redis-cli cluster nodes

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 master – 0 1467216584316 8 connected 5461-10922

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 slave 9b3b5256f0107585d5379de7e76f526d071e8a11 0 1467216583314 8 connected

f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380 master - 0 1467216583314 0 connected

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 master – 0 1467216584316 10 connected 0-5460

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,master – 0 0 7 connected 10923-16383

2cc2b30e09fde453fbd42a7330bbd65d216dc6cc 172.172.178.221:6381 slave f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 0 1467216584816 0 connected

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 slave e61cffa1d3040dd5523e5c79912b23732618b464 0 1467216585318 10 connected

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 slave ff52c80b8477f50272a86893aec89dac153e9fbe 0 1467216585318 7 connected

[[email protected] ~]#

[[email protected] ~]# redis-trib check 172.172.178.220:6379

>>> Performing Cluster Check (using node 172.172.178.220:6379)

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:10923-16383 (5461 slots) master

1 additional replica(s)

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5461-10922 (5462 slots) master

1 additional replica(s)

S: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots: (0 slots) slave

replicates 9b3b5256f0107585d5379de7e76f526d071e8a11

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots: (0 slots) master

1 additional replica(s)

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: 2cc2b30e09fde453fbd42a7330bbd65d216dc6cc 172.172.178.221:6381

slots: (0 slots) slave

replicates f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

S: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots: (0 slots) slave

replicates e61cffa1d3040dd5523e5c79912b23732618b464

S: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots: (0 slots) slave

replicates ff52c80b8477f50272a86893aec89dac153e9fbe

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

新添加的master节点没有slots,需要重新分配slot,否则存储数据无法被选中

[[email protected] ~]# redis-trib reshard 172.172.178.221:6380

>>> Performing Cluster Check (using node 172.172.178.221:6380)

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots: (0 slots) master

1 additional replica(s)

S: 2cc2b30e09fde453fbd42a7330bbd65d216dc6cc 172.172.178.221:6381

slots: (0 slots) slave

replicates f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

S: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots: (0 slots) slave

replicates ff52c80b8477f50272a86893aec89dac153e9fbe

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5461-10922 (5462 slots) master

1 additional replica(s)

S: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots: (0 slots) slave

replicates e61cffa1d3040dd5523e5c79912b23732618b464

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots: (0 slots) slave

replicates 9b3b5256f0107585d5379de7e76f526d071e8a11

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

How many slots do you want to move (from 1 to 16384)? 1500

What is the receiving node ID? f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Please enter all the source node IDs.

Type ‘all‘ to use all the nodes as source nodes for the hash slots.

Type ‘done‘ once you entered all the source nodes IDs.

Source node #1:all

Ready to move 1500 slots.

Source nodes:

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:10923-16383 (5461 slots) master

1 additional replica(s)

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

Destination node:

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots: (0 slots) master

1 additional replica(s)

Resharding plan:

Moving slot 5461 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5462 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5463 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5464 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5465 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5466 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5467 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5468 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5469 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5470 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5471 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5472 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5473 from 9b3b5256f0107585d5379de7e76f526d071e8a11

Moving slot 5474 from 9b3b5256f0107585d5379de7e76f526d071e8a11

…………………..

再次检查cluster信息

[[email protected] ~]# redis-cli -c cluster nodes

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 master – 0 1467217411735 8 connected 5962-10922

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 slave 9b3b5256f0107585d5379de7e76f526d071e8a11 0 1467217411735 8 connected

f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380 master – 0 1467217411234 12 connected 0-498 5461-5961 10923-11421

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 master – 0 1467217412739 10 connected 499-5460

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,master – 0 0 7 connected 11422-16383

2cc2b30e09fde453fbd42a7330bbd65d216dc6cc 172.172.178.221:6381 slave f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 0 1467217412237 12 connected

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 slave e61cffa1d3040dd5523e5c79912b23732618b464 0 1467217410732 10 connected

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 slave ff52c80b8477f50272a86893aec89dac153e9fbe 0 1467217410732 7 connected

[[email protected] ~]#

[[email protected] ~]#

[[email protected] ~]# redis-trib check 172.172.178.221:6380

>>> Performing Cluster Check (using node 172.172.178.221:6380)

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots:0-498,5461-5961,10923-11421 (1499 slots) master

1 additional replica(s)

S: 2cc2b30e09fde453fbd42a7330bbd65d216dc6cc 172.172.178.221:6381

slots: (0 slots) slave

replicates f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

S: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots: (0 slots) slave

replicates ff52c80b8477f50272a86893aec89dac153e9fbe

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5962-10922 (4961 slots) master

1 additional replica(s)

S: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots: (0 slots) slave

replicates e61cffa1d3040dd5523e5c79912b23732618b464

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:11422-16383 (4962 slots) master

1 additional replica(s)

S: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots: (0 slots) slave

replicates 9b3b5256f0107585d5379de7e76f526d071e8a11

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:499-5460 (4962 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

删除slave节点

[[email protected] ~]# redis-trib del-node 172.172.178.221:6381 ‘2cc2b30e09fde453fbd42a7330bbd65d216dc6cc‘ 、

>>> Removing node 2cc2b30e09fde453fbd42a7330bbd65d216dc6cc from cluster 172.172.178.221:6381

>>> Sending CLUSTER FORGET messages to the cluster…

>>> SHUTDOWN the node.

删除master节点

如果master节点有slave节点将slave节点转移到其他master节点,如果master节点有slot,去掉分配的slot然后删除master节点

[[email protected] ~]# redis-trib reshard 172.172.178.221:6380

>>> Performing Cluster Check (using node 172.172.178.221:6380)

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots:0-498,5461-5961,10923-11421 (1499 slots) master

0 additional replica(s)

S: cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379

slots: (0 slots) slave

replicates ff52c80b8477f50272a86893aec89dac153e9fbe

M: 9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379

slots:5962-10922 (4961 slots) master

1 additional replica(s)

S: fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379

slots: (0 slots) slave

replicates e61cffa1d3040dd5523e5c79912b23732618b464

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:11422-16383 (4962 slots) master

1 additional replica(s)

S: e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379

slots: (0 slots) slave

replicates 9b3b5256f0107585d5379de7e76f526d071e8a11

M: e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379

slots:499-5460 (4962 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots…

>>> Check slots coverage…

[OK] All 16384 slots covered.

How many slots do you want to move (from 1 to 16384)? 1500

What is the receiving node ID? ff52c80b8477f50272a86893aec89dac153e9fbe

Please enter all the source node IDs.

Type ‘all‘ to use all the nodes as source nodes for the hash slots.

Type ‘done‘ once you entered all the source nodes IDs.

Source node #1:f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Source node #2:done

Ready to move 1500 slots.

Source nodes:

M: f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 172.172.178.221:6380

slots:0-498,5461-5961,10923-11421 (1499 slots) master

0 additional replica(s)

Destination node:

M: ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379

slots:11422-16383 (4962 slots) master

1 additional replica(s)

Resharding plan:

Moving slot 0 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 1 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 2 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 3 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 4 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 5 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 6 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 7 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 8 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

Moving slot 9 from f8ccaffd5378d7380a0f8f57b9c8b6c825688a85

……

[[email protected] ~]# redis-trib del-node 172.172.178.221:6380 ‘f8ccaffd5378d7380a0f8f57b9c8b6c825688a85‘

>>> Removing node f8ccaffd5378d7380a0f8f57b9c8b6c825688a85 from cluster 172.172.178.221:6380

>>> Sending CLUSTER FORGET messages to the cluster…

>>> SHUTDOWN the node.

[[email protected] ~]#

[[email protected] ~]# redis-cli -c cluster nodes

9b3b5256f0107585d5379de7e76f526d071e8a11 172.172.178.221:6379 master – 0 1467218665980 8 connected 5962-10922

e3e1f4f9254d6e26bf381b9d83456a62fa555f62 172.172.178.224:6379 slave 9b3b5256f0107585d5379de7e76f526d071e8a11 0 1467218665478 8 connected

e61cffa1d3040dd5523e5c79912b23732618b464 172.172.178.222:6379 master – 0 1467218666480 10 connected 499-5460

ff52c80b8477f50272a86893aec89dac153e9fbe 172.172.178.220:6379 myself,master – 0 0 13 connected 0-498 5461-5961 10923-16383

fc4d4c03b2ab454f230f0af3b84930b26b6a56ac 172.172.178.225:6379 slave e61cffa1d3040dd5523e5c79912b23732618b464 0 1467218667484 10 connected

cd77344524a6ed5a4d1addfd34d7dd720c272386 172.172.178.223:6379 slave ff52c80b8477f50272a86893aec89dac153e9fbe 0 1467218666982 13 connected

Redis cluster工作原理

Redis 集群的 TCP 端口(Redis Cluster TCP ports)

每个 Redis 集群节点需要两个 TCP 连接打开。正常的 TCP 端口用来服务客户端,例如 6379,加 10000 的端口用作数据端口,在上面的例子中就是 16379。 第二个大一些的端口用于集群总线(bus),也就是使用二进制协议的点到点通信通道。集群总线被节点用 于错误检测,配置更新,故障转移授权等等。客户端不应该尝试连接集群总线端口,而应一直与正常的 Redis 命令端口通信,但是要确保在防火墙中打开了这两个端口,否则 Redis 集群的节点不能相互通信。 命令端口和集群总线端口的偏移量一直固定为 10000。 注意,为了让 Redis 集群工作正常,对每个节点: 1. 用于与客户端通信的正常的客户端通信端口(通常为 6379)需要开放给所有需要连接集群的客户端 以及其他集群节点(使用客户端端口来进行键迁移)。 2. 集群总线端口(客户端端口加 10000)必须从所有的其他集群节点可达。 如果你不打开这两个 TCP 端口,集群就无法正常工作。

Redis 集群的数据分片(Redis Cluster data sharding)

Redis 集群没有使用一致性哈希,而是另外一种不同的分片形式,每个键概念上是被我们称为哈希槽 (hash slot)的东西的一部分。 Redis 集群有 16384 个哈希槽,我们只是使用键的 CRC16 编码对 16384 取模来计算一个指定键所属的 哈希槽。 每一个 Redis 集群中的节点都承担一个哈希槽的子集,例如,你可能有一个 3 个节点的集群,其中:

redis

? 节点 A 包含从 0 到 5500 的哈希槽。

? 节点 B 包含从 5501 到 11000 的哈希槽。

? 节点 C 包含从 11001 到 16384 的哈希槽。

这可以让在集群中添加和移除节点非常容易。例如,如果我想添加一个新节点 D,我需要从节点 A,B, C 移动一些哈希槽到节点 D。同样地,如果我想从集群中移除节点 A,我只需要移动 A 的哈希槽到 B 和 C。 当节点 A 变成空的以后,我就可以从集群中彻底删除它。 因为从一个节点向另一个节点移动哈希槽并不需要停止操作,所以添加和移除节点,或者改变节点持有 的哈希槽百分比,都不需要任何停机时间(downtime)。

Redis cluster 架构(Redis Cluster Architecture)

? redis-cluster 架构图

redis

架构细节:

? 所有的 redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带宽.

? 节点的 fail 是通过集群中超过半数的节点检测失效时才生效.

? 客户端与 redis 节点直连,不需要中间 proxy 层.客户端不需要连接集群所有节点,连接集群中任何一个 可用节点即可

? redis-cluster 把所有的物理节点映射到[0-16383]slot 上,cluster 负责维护 node<->slot<->value

redis-cluster 选举:容错

redis

? 领领着选举过程是集群中所有 master 参与,如果半数以上 master 节点与 master 节点通信超过 (cluster-node-timeout),认为当前 master 节点挂掉.

? 什么时候整个集群不可用(cluster_state:fail)

a:如果集群任意 master 挂掉,且当前 master 没有 slave.集群进入 fail 状态,也可以理解成集群的 slot 映 射[0-16383]不完成时进入 fail 状态. ps : redis-3.0.0.rc1 加入 cluster-require-full-coverage 参数,默认关闭, 打开集群兼容部分失败.

b:如果集群超过半数以上 master 挂掉,无论是否有 slave 集群进入 fail 状态.

ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down) 错误.

Redis 集群的主从模型(Redis Cluster master-slave model)

为了当部分节点失效时,或者无法与大多数节点通信时仍能保持可用,Redis 集群采用每个节点拥有 1(主 服务自身)到 N 个副本(N-1 个附加的从服务器)的主从模型。 在我们的例子中,集群拥有 A,B,C 三个节点,如果节点 B 失效集群将不能继续服务,因为我们不再 有办法来服务在 5501-11000 范围内的哈希槽。 但是,如果当我们创建集群后(或者稍后),我们为每一个主服务器添加一个从服务器,这样最终的集群 就由主服务器 A,B,C 和从服务器 A1,B1,C1 组成,如果 B 节点失效系统仍能继续服务。 B1 节点复制 B 节点,于是集群会选举 B1 节点作为新的主服务器,并继续正确的运转。

redis

Redis 集群的一致性保证(Redis Cluster consistency guarantees)

Redis 集群不保证强一致性。实践中,这意味着在特定的条件下,Redis 集群可能会丢掉一些被系统收 到的写入请求命令。

Redis 集群为什么会丢失写请求的第一个原因,是因为采用了异步复制。这意味着在写期间下面的事情 发生了:

? 你的客户端向主服务器 B 写入。

? 主服务器 B 回复 OK 给你的客户端。

? 主服务器 B 传播写入操作到其从服务器 B1,B2 和 B3。

手动故障转移(Manual failover)

有时候在主服务器事实上没有任何故障的情况下强制一次故障转移是很有用的。例如,为了升级主服务 器节点中的一个进程,可以对其进行故障转移使其变为一个从服务器,这样最小化了对可用性的影响。

Redis 集群支持使用 CLUSTER FAILOVER 命令来手动故障转移,必须在你想进行故障转移的主服务的 其中一个从服务器上执行。

手动故障转移很特别,和真正因为主服务器失效而产生的故障转移要更安全,因为采取了避免过程中数 据丢失的方式,仅当系统确认新的主服务器处理完了旧的主服务器的复制流时,客户端才从原主服务器切 换到新主服务器。

添加新节点(Adding a new node)

添加一个新节点的过程基本上就是,添加一个空节点,然后,如果是作为主节点则移动一些数据进去, 如果是从节点则其作为某个节点的副本。

两种情况我们都会讨论,先从添加一个新的主服务器实例开始。

两种情况下,第一步要完成的都是添加一个空节点。

我们使用与其他节点相同的配置(端口号除外)在 7006 端口(我们已存在的 6 个节点已经使用了从 7000 到 7005 的端口)上开启一个新的节点,那么为了与我们之前的节点布局一致,你得这么做:

? 在你的终端程序中开启一个新的标签窗口。

? 进入 cluster-test 目录。

? 创建一个名为 7006 的目录。

? 在里面创建一个 redis.conf 的文件,类似于其它节点使用的文件,但是使用 7006 作为端口号。

? 最后使用../redis-server ./redis.conf 启动服务器。


1

./redis-trib.rb add-node127.0.0.1:7006127.0.0.1:7000

添加副本节点(Adding a new node as a replica)

添加一个新副本可以有两种方式。显而易见的一种方式是再次使用 redis-trib,但是要使用—slave 选项, 像这样:


1

./redis-trib.rb add-node--slave127.0.0.1:7006127.0.0.1:7000

注意,这里的命令行完全像我们在添加一个新主服务器时使用的一样,所以我们没有指定要给哪个主服 务器添加副本。这种情况下,redis-trib 会添加一个新节点作为一个具有较少副本的随机的主服务器的副本。

但是,你可以使用下面的命令行精确地指定你想要的主服务器作为副本的目标:


1 2

./redis-trib.rb add-node--slave--master-id3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e127. 0.0.1:7006127.0.0.1:7000

移除节点(Removing a node)

要移除一个从服务器节点,只要使用 redis-trib 的 del-node 命令就可以:


1

./redis-trib del-node127.0.0.1:7000<node-id>

升级节点(Upgrading nodes in a Redis Cluster)

升级从服务器节点很简单,因为你只需要停止节点然后用已更新的 Redis 版本重启。如果有客户端使用 从服务器节点分离读请求,它们应该能够在某个节点不可用时重新连接另一个从服务器。

升级主服务器要稍微复杂一些,建议的步骤是:

1. 使用 CLUSTER FAILOVER 来触发一次手工故障转移主服务器(请看本文档的手工故障转移小 节)。

2. 等待主服务器变为从服务器。

3. 像升级从服务器那样升级这个节点。

4. 如果你想让你刚刚升级的节点成为主服务器,触发一次新的手工故障转移,让升级的节点重新变 回主服务器。

Redis 3.0 Cluster配置文档

目录

准备阶段

安装Cluster

管理cluster

(1) 添加master节点

(2) 数据分片

(3) 删除节点

Redis 3.0概述

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。3.0版本加入cluster功能,解决了redis单点无法横向扩展问题。

架构拓扑

3.0版本最大的特点就是支持cluster分布式横向扩展,下面为3个Master节点以及3个slave节点的拓扑图:


APP1

M1,M2,M3为redis三个主节点,S1,S2,S3为redis三个从节点,分别为M1,M2,M3备份数据以及故障切换使用。APP访问数据库可以通过连接任意一个Master节点实现。在三个Master节点的redis集群中,只容许有一个Master出故障,当多于一个Master宕机时,redis即不可用。当其中一个Master出现故障,其对应的Slave会接管故障Master的服务,保证redis 数据库的正常使用。

准备阶段

(1) 安装包

http://redis.io

(2) 系统包

安装gcc:yum install gcc

安装zlib:yum install zlib

安装ruby:yum install ruby

安装rubygems:yum install rubygems

安装gem redis:(下载:http://rubygems.org/gems/redis/versions/3.0.7

# gem install -l /tmp/redis-3.0.7.gem

Successfully installed redis-3.0.7

1 gem installed

Installing ri documentation for redis-3.0.7...

Installing RDoc documentation for redis-3.0.7...

(3) 系统参数

修改open files:# ulimit -n 10032 (默认1024) #可以打开最大文件描述符的数量,ulimit 用于限制 shell 启动进程所占用的资源

添加vm.overcommit_memory=1:

#vi /etc/sysctl.conf

#sysctl vm.overcommit_memory=1 #参数vm.overcommit_memory控制着linux的内存分配策略,1 表示一直允许overcommit(过量使用),可以避免数据被截

关闭hugepage:# echo never > /sys/kernel/mm/transparent_hugepage/enabled #

取消对透明巨页内存(transparent huge pages)的支持,因为这会造成 redis 使用过程产生延时和内存访问问题

修改somaxconn :# echo 511 >/proc/sys/net/core/somaxconn #限制了接收新 TCP 连接侦听队列的大小,对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了, 太小了。大多数环境这个值建议增加到 1024 或者更多。

关闭防火墙:# service iptables stop

关闭selinux:# vi /etc/sysconfig/selinux 修改“SELINUX=disabled”

安装Cluster

(1) 安装软件

# cd /redis/redis-3.0.0

# make

# make install

(2) 拷贝bin文件

# cp /redis/redis-3.2.1/src/redis-trib.rb /usr/local/bin/

# cp redis-cli /usr/local/bin/

# cp redis-server /usr/local/bin/

# which redis-trib.rb

/usr/local/bin/redis-trib.rb

(3) 配置通用config文件redis-common.conf

# vi /redis/redis-3.0.0/config/redis-common.conf


代码如下:

#GENERAL daemonize yes tcp-backlog 511 timeout 0 tcp-keepalive 0 loglevel notice databases 16 dir /redis/redis-3.0.0/data slave-serve-stale-data yes slave-read-only yes #not use default repl-disable-tcp-nodelay yes slave-priority 100 appendonly yes appendfsync everysecno-appendfsync-on-rewrite yes auto-aof-rewrite-min-size 64mb lua-time-limit 5000 cluster-enabled yes cluster-node-timeout 15000 cluster-migration-barrier 1 slowlog-log-slower-than 10000 slowlog-max-len 128 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes

(4) 节点1配置文件redis-6379.conf

# vi /redis/redis-3.0.0/config/redis-6379.conf


代码如下:

include /redis/redis-3.0.0/config/redis-common.conf port 6379 logfile "/redis/redis-3.0.0/log/redis-6379.log" maxmemory 100m # volatile-lru -> remove the key with an expire set using an LRU algorithm # allkeys-lru -> remove any key accordingly to the LRU algorithm # volatile-random -> remove a random key with an expire set # allkeys-random -> remove a random key, any key # volatile-ttl -> remove the key with the nearest expire time (minor TTL) # noeviction -> don‘t expire at all, just return an error on write operations maxmemory-policy allkeys-lru appendfilename "appendonly-6379.aof" dbfilename dump-6379.rdb #dir /redis/redis-3.0.0/data cluster-config-file nodes-6379.conf auto-aof-rewrite-percentage 80-100

(5) 节点2配置文件redis-6389.conf

# vi /redis/redis-3.0.0/config/redis-6389.conf


代码如下:

include /redis/redis-3.0.0/config/redis-common.conf port 6389 logfile "/redis/redis-3.0.0/log/redis-6389.log" maxmemory 100m # volatile-lru -> remove the key with an expire set using an LRU algorithm # allkeys-lru -> remove any key accordingly to the LRU algorithm # volatile-random -> remove a random key with an expire set # allkeys-random -> remove a random key, any key # volatile-ttl -> remove the key with the nearest expire time (minor TTL) # noeviction -> don‘t expire at all, just return an error on write operations maxmemory-policy allkeys-lru appendfilename "appendonly-6389.aof" dbfilename dump-6389.rdb cluster-config-file nodes-6389.conf auto-aof-rewrite-percentage 80-100

(6) 节点3配置文件redis-6399.conf

# vi /redis/redis-3.0.0/config/redis-6399.conf


代码如下:

include /redis/redis-3.0.0/config/redis-common.conf port 6399 logfile "/redis/redis-3.0.0/log/redis-6399.log" maxmemory 100m # volatile-lru -> remove the key with an expire set using an LRU algorithm # allkeys-lru -> remove any key accordingly to the LRU algorithm # volatile-random -> remove a random key with an expire set # allkeys-random -> remove a random key, any key # volatile-ttl -> remove the key with the nearest expire time (minor TTL) # noeviction -> don‘t expire at all, just return an error on write operations maxmemory-policy allkeys-lru appendfilename "appendonly-6399.aof" dbfilename dump-6399.rdb cluster-config-file nodes-6399.conf auto-aof-rewrite-percentage 80-100

(7) 启动redis节点

# redis-server redis-6379.conf

# redis-server redis-6389.conf

# redis-server redis-6399.conf

# redis-server redis-7379.conf

# redis-server redis-7389.conf

# redis-server redis-7399.conf

# ps -ef| grep redis

root 4623 1 0 11:07 ? 00:00:00 redis-server *:6379 [cluster]

root 4627 1 0 11:07 ? 00:00:00 redis-server *:6389 [cluster]

root 4631 1 0 11:07 ? 00:00:00 redis-server *:6399 [cluster]

root 4654 1 0 11:30 ? 00:00:00 redis-server *:7379 [cluster]

root 4658 1 0 11:30 ? 00:00:00 redis-server *:7389 [cluster]

root 4662 1 0 11:30 ? 00:00:00 redis-server *:7399 [cluster]

指定主从

redis-trib.rb create --replicas 1 172.31.103.211:6379 172.31.103.210:6379 172.31.103.209:6379 172.31.103.211:6389 172.31.103.210:6389 172.31.103.209:6389 前三个为主节点,后三个为从节点

(8) 通过redis-trib创建cluster

#--replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点

# redis-trib.rb create --replicas 1 10.27.17.115:6379 10.27.17.115:6389 10.30.191.77:6379 10.30.191.77:6389 10.27.16.140:6379 10.27.16.140:6389

>>> Creating cluster

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

192.168.3.88:6379

192.168.3.88:6389

192.168.3.88:6399

Adding replica 192.168.3.88:7379 to 192.168.3.88:6379

Adding replica 192.168.3.88:7389 to 192.168.3.88:6389

Adding replica 192.168.3.88:7399 to 192.168.3.88:6399

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

Can I set the above configuration? (type ‘yes‘ to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join......

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

M: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) master

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

M: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) master

replicates d1d124d35c848e9c8e726b59af669c9196557869

M: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) master

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

(9) 检查集群状态

连接任意节点,执行redis-trib.rb

# redis-trib.rb check 192.168.3.88:6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

管理cluster

(1) 添加master节点

添加的master节点配置在另一个服务器上,首先配置config文件

# vi /redis/redis-3.0.0/config/redis-6379.conf

# vi /redis/redis-3.0.0/config/redis-7379.conf

使用redis-trib.rb添加节点

在已有集群服务器(192.168.3.88)上执行

(注意:add-node的使用方法为new_host:new_port existing_host:existing_port,前面是新添加的节点信息,后面是已存在的节点信息)

# redis-trib.rb add-node 192.168.3.61:6379 192.168.3.88:6379

>>> Adding node 192.168.3.61:6379 to cluster 192.168.3.88:6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

Connecting to node 192.168.3.61:6379: OK

>>> Send CLUSTER MEET to node 192.168.3.61:6379 to make it join the cluster.

[OK] New node added correctly.

选择其中一个节点,检查集群状态,发现刚添加的节点已经在集群中了,角色是master,但是并没有slot分配到新加的节点上,后面要通过shard命令分配slot。

# redis-trib.rb check 192.168.3.88:6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: 89be535ff56586dcec56f14122add80d89a57bb3 192.168.3.61:6379

slots: (0 slots) master

0 additional replica(s)

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

主节点添加完毕后,需要给该主节点添加一个slave节点,添加过程和主节点一直,添加完成后需要在redis中进行设置。

# redis-trib.rb add-node 192.168.3.61:7379 192.168.3.88:6379

显示内容省略

链接到要添加的slave数据库中,执行replicate操作。后面的ID为Master 192.168.3.61:6379的ID,通过redis-trib.rb check可以看到。

# redis-cli -c -h 192.168.3.61 -p 7379

192.168.3.61:7379> cluster replicate 89be535ff56586dcec56f14122add80d89a57bb3

OK

根据check结果,可以看到新添加的slave以及成功和Master建立联系。

# redis-trib.rb check 192.168.3.88:6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.61:7379: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: 89be535ff56586dcec56f14122add80d89a57bb3 192.168.3.61:6379

slots: (0 slots) master

1 additional replica(s)

S: 92017f0258675b02a7799726339efabf7d005f8c 192.168.3.61:7379

slots: (0 slots) slave

replicates 89be535ff56586dcec56f14122add80d89a57bb3

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

(2) 数据分片

加入新的节点后,需要将其他的节点中的hash slot移动到新的节点中,以达到负载均衡的效果,指定集群中其中一个节点的地址

# redis-trib.rb reshard 192.168.3.6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.61:7379: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:5461-10922 (5462 slots) master

1 additional replica(s)

M: 89be535ff56586dcec56f14122add80d89a57bb3 192.168.3.61:6379

slots: (0 slots) master

1 additional replica(s)

S: 92017f0258675b02a7799726339efabf7d005f8c 192.168.3.61:7379

slots: (0 slots) slave

replicates 89be535ff56586dcec56f14122add80d89a57bb3

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

How many slots do you want to move (from 1 to 16384)?4096 --16384/4=4096.master建议为基数

What is the receiving node ID? 89be535ff56586dcec56f14122add80d89a57bb3 --新加的主节点ID

Please enter all the source node IDs.

Type ‘all‘ to use all the nodes as source nodes for the hash slots.

Type ‘done‘ once you entered all the source nodes IDs.

Source node #1:all --从所有其他master节点均匀把slot移动到新加的主节点

.....

.....

Moving slot 12284 from 192.168.3.88:6399 to 192.168.3.61:6379:

Moving slot 12285 from 192.168.3.88:6399 to 192.168.3.61:6379:

Moving slot 12286 from 192.168.3.88:6399 to 192.168.3.61:6379:

Moving slot 12287 from 192.168.3.88:6399 to 192.168.3.61:6379:

再次check,发现所有主节点的slot都变成4096了

# redis-trib.rb check 192.168.3.88:6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.61:7379: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:1365-5460 (4096 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:6827-10922 (4096 slots) master

1 additional replica(s)

M: 89be535ff56586dcec56f14122add80d89a57bb3 192.168.3.61:6379

slots:0-1364,5461-6826,10923-12287 (4096 slots) master

1 additional replica(s)

S: 92017f0258675b02a7799726339efabf7d005f8c 192.168.3.61:7379

slots: (0 slots) slave

replicates 89be535ff56586dcec56f14122add80d89a57bb3

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots:12288-16383 (4096 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

(3) 删除节点

删除主节点之前,需要先将slot迁移到其他主节点上

# redis-trib.rb reshard 192.168.3.88:6379

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.61:7379: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:7379: OK

>>> Performing Cluster Check (using node 192.168.3.88:6379)

M: 05fe758161e2cbe23240697f47f1cd2c937a675b 192.168.3.88:6379

slots:1365-5460,12288-16383 (8192 slots) master

1 additional replica(s)

S: 98dae5126228dea54d1321eeb357d8773bd2ee11 192.168.3.88:7389

slots: (0 slots) slave

replicates d1d124d35c848e9c8e726b59af669c9196557869

S: d013aee7cae8163f787cb6445778ff97bf66ce17 192.168.3.88:7399

slots: (0 slots) slave

replicates d64223d6695fcc7e1030f219f09d7488c438cf39

M: d1d124d35c848e9c8e726b59af669c9196557869 192.168.3.88:6389

slots:6827-10922 (4096 slots) master

1 additional replica(s)

M: 89be535ff56586dcec56f14122add80d89a57bb3 192.168.3.61:6379

slots:0-1364,5461-6826,10923-12287 (4096 slots) master

1 additional replica(s)

S: 92017f0258675b02a7799726339efabf7d005f8c 192.168.3.61:7379

slots: (0 slots) slave

replicates 89be535ff56586dcec56f14122add80d89a57bb3

M: d64223d6695fcc7e1030f219f09d7488c438cf39 192.168.3.88:6399

slots: (0 slots) master

1 additional replica(s)

S: 7f77ec03e40d0cc9f343d783a293ae8aa6c6e090 192.168.3.88:7379

slots: (0 slots) slave

replicates 05fe758161e2cbe23240697f47f1cd2c937a675b

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

How many slots do you want to move (from 1 to 16384)? 4906

What is the receiving node ID? 89be535ff56586dcec56f14122add80d89a57bb3

Please enter all the source node IDs.

Type ‘all‘ to use all the nodes as source nodes for the hash slots.

Type ‘done‘ once you entered all the source nodes IDs.

Source node #1:d1d124d35c848e9c8e726b59af669c9196557869

Source node #2:done

……

……

Moving slot 10920 from d1d124d35c848e9c8e726b59af669c9196557869

Moving slot 10921 from d1d124d35c848e9c8e726b59af669c9196557869

Moving slot 10922 from d1d124d35c848e9c8e726b59af669c9196557869

Do you want to proceed with the proposed reshard plan (yes/no)?yes

……

……

Moving slot 10920 from 192.168.3.88:6389 to 192.168.3.61:6379:

Moving slot 10921 from 192.168.3.88:6389 to 192.168.3.61:6379:

Moving slot 10922 from 192.168.3.88:6389 to 192.168.3.61:6379:

检查节点的slot是否完全迁移走,完成后就可以删除节点了

# redis-trib.rb check 192.168.3.88:6399

# redis-trib.rb del-node 192.168.3.88:6399 d64223d6695fcc7e1030f219f09d7488c438cf39

>>> Removing node d64223d6695fcc7e1030f219f09d7488c438cf39 from cluster 192.168.3.88:6399

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7379: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:7379: OK

Connecting to node 192.168.3.88:7399: OK

>>> Sending CLUSTER FORGET messages to the cluster...

>>> 192.168.3.88:7399 as replica of 192.168.3.88:6399

/usr/lib/ruby/gems/1.8/gems/redis-3.0.7/lib/redis/client.rb:97:in `call‘: ERR Can‘t forget my master!(Redis::CommandError)

from /usr/lib/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2432:in `method_missing‘

from /usr/lib/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize‘

from /usr/lib/ruby/1.8/monitor.rb:242:in `mon_synchronize‘

from /usr/lib/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize‘

from /usr/lib/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2431:in `method_missing‘

from /usr/local/bin/redis-trib.rb:1086:in `delnode_cluster_cmd‘

from /usr/local/bin/redis-trib.rb:1078:in `each‘

from /usr/local/bin/redis-trib.rb:1078:in `delnode_cluster_cmd‘

from /usr/local/bin/redis-trib.rb:1373:in `send‘

from /usr/local/bin/redis-trib.rb:1373

删除主节点之前,需要先删除主节点的slave节点,否则会报如上错误

# redis-trib.rb del-node 192.168.3.88:7399 d013aee7cae8163f787cb6445778ff97bf66ce17

>>> Removing node d013aee7cae8163f787cb6445778ff97bf66ce17 from cluster 192.168.3.88:7399

Connecting to node 192.168.3.88:7399: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.61:7379: OK

Connecting to node 192.168.3.88:7379: OK

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:6389: OK

>>> Sending CLUSTER FORGET messages to the cluster...

>>> SHUTDOWN the node.

# redis-trib.rb del-node 192.168.3.88:6399 d64223d6695fcc7e1030f219f09d7488c438cf39

>>> Removing node d64223d6695fcc7e1030f219f09d7488c438cf39 from cluster 192.168.3.88:6399

Connecting to node 192.168.3.88:6399: OK

Connecting to node 192.168.3.61:6379: OK

Connecting to node 192.168.3.88:6379: OK

Connecting to node 192.168.3.88:7389: OK

Connecting to node 192.168.3.88:7379: OK

Connecting to node 192.168.3.88:6389: OK

Connecting to node 192.168.3.61:7379: OK

>>> Sending CLUSTER FORGET messages to the cluster...

>>> SHUTDOWN the node.

原文地址:https://www.cnblogs.com/snowwhitecityofsky/p/9172912.html

时间: 2024-08-03 16:31:06

linux下安装redis 3.2.1的相关文章

Linux 下安装 Redis 服务器

本文简单介绍了 Linux 下安装 Redis 服务器的步骤,同时简要介绍服务器的配置.启动以及状态检测.另外还介绍了 32 位 CentOS 下安装 Redis 时遇到的一些问题的解决.        一. 查看 Linux 相关信息        版本查看cat /etc/issueCentOS release 5.5 (Final)        位数查看getconf LONG_BIT32        二. 安装 tcl        先装好 tcl,不然 redis 的 make t

linux 下安装redis以及php Redis扩展

1 [php] view plaincopy在CODE上查看代码片派生到我的代码片 2 linux 下安装redis以及php Redis扩展 3 4 环境配置: centos6.0 nginx/1.0.0 php/5.3.8 mysql/5.5.17 5 6 步骤一.下载redis 7 可以去http://redis.io/去下载最新版本 8 我用的是 redis 2.8.11 9 进入软件安装包存放目录: cd /var/install/software/ 10 wget http://do

windows和linux下安装redis

1.redis简介redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hashs(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis

Linux下安装redis

(redis下载地址http://redis.io/download ) 安装步骤: 1.首先需要安装gcc,把下载好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local文件夹下 2.进行解压 tar -zxvf redis-3.0.0-rc2.tar.gz  ,解压后会出现如下目录 3.进入到redis-3.0.0目录下,进行编译 make 4.进入到src下进行安装 make install  验证(ll查看src下的目录,有redis-server .red

linux下安装Redis以及phpredis模块

一:redis的安装 1. 首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载 2. 通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操作 3. 进入redis目录执行make 对Redis解压后文件进行编译 4. 编译完成之后,进入src文件夹,执行make install进行Redis安装,完成安装 二:redis的部署 安装成功后,下面对Redis 进行部署 1. 首先为了方便管理,将Redis文件中的配置文件和常用命令移动到统一文件

Linux下安装redis服务

一.安装Redis到/usr/local/redis 执行命令: 1. mkdir /usr/local/redis 2. cd /usr/local/src 3. wget http://download.redis.io/releases/redis-3.2.4.tar.gz 4. tar -xzf redis-2.6.14.tar.gz 5. ln -s redis-2.6.14 redis #建立一个链接 6. cd redis 7. make PREFIX=/usr/local/red

Linux 下安装Redis教程

第一部分:安装redis 希望将redis安装到此目录  1 /usr/local/redis 希望将安装包下载到此目录 1 /usr/local/src 那么安装过程指令如下: 1 2 3 4 5 6 7 $ mkdir /usr/local/redis   $ cd /usr/local/src   $ wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz   $ tar xzf redis-2.6.14.tar.gz    $

linux下安装redis集群(Master-Slave)

本文演示了redis在同一台linux上的安装及运行多个实例,并演示了主从复制,以及如何进行主从的切换. 1. 下载 $ wget http://download.redis.io/releases/redis-3.0.7.tar.gz 2. 解压缩 $ tar xzf redis-3.0.7.tar.gz 3. 编译 $ cd redis-3.0.7 $ make $make install $cp redis.conf /etc/ #该步骤将配置文件放入etc方便管理 特别说明: make

linux 下安装redis

redis在linux安装其实很简单,只是之前在安装的时候使用yum安装,但yum安装的时候下载速度忒慢了,等半天下载不下来就不想弄了, 今天看了写教程, 直接make安装了, 安装方法: 1.首先网上找到redis并载,版本无所谓,能用就行了:下载完上传到linux服务器: 2.tar zxvf 解压redis安装包(我的安装包是redis.tar.gz,所以用tar解压): 3.解压之后进入解压目录,然后make编译: 4.编译后会出现src目录, 看到src目录里面的redis-cli(r

Linux下安装Redis及Linux下php安装Redis扩展

下载源码:wget http://redis.googlecode.com/files/redis-2.8.19.tar.gz 1.解压安装:  wget http://download.redis.io/releases/redis-2.8.19.tar.gz   tar xzf redis-2.8.19.tar.gz   cd redis-2.8.19  make   make install  cp redis.conf /etc/ 参数介绍: make install命令执行完成后,会在