首页 > 代码库 > redis3

redis3


前言:

参考文档

Redis官方集群指南:Redis cluster tutorial a“ Redis

Redis官方集群规范:Redis Cluster Specification a“ Redis

Redis集群指南(中文翻译,紧供参考):集群教程 — Redis 命令参考

Redis集群规范(中文翻译,紧供参考):Redis 集群规范


1、安装步骤

1、依赖包

yum install -y gcc tcl

2、安装

cd /usr/local/

cp /tmp/redis-3.2.9.tar.gz .

tar -zxvf redis-3.2.9.tar.gz

make && make install

mkdir -p /data/service/redis/redis_cluster/

cd /data/service/redis/redis_cluster/

mkdir -p 7111 7112 7113 7114 7115 7116

mkdir /data/service/redis/redis_cluster/7111/log/

mkdir /data/service/redis/redis_cluster/dumps

3、修改配置文件,将配置文件拷贝到每个目录。

port 7111

pidfile "/data/service/redis/redis_cluster/7111/redis_7111.pid"


loglevel verbose

logfile "/data/service/redis/redis_cluster/log/redis_7111.log"


daemonize yes

databases 16

timeout 0

#客户端连接超时时间,0表示关闭


tcp-backlog 511

#确定tcp连接中已完成队列的长度。

tcp-keepalive 60

#检测客户端健康状态的时间,建议60s,单位是s。

#maxmemory 8gb

#使用内存最大值,多余的使用swap


cluster-enabled yes

cluster-config-file "/data/service/redis/redis_cluster/7111/nodes.conf"

cluster-node-timeout 5000

dir "/data/service/redis/redis_cluster/dumps"


appendonly yes

#aof重写

appendfilename "7111.aof"

appendfsync everysec

#每秒写入一次,最优。

no-appendfsync-on-rewrite no

#在在aof-rewrite期间,不暂缓appendfsync文件同步。

auto-aof-rewrite-percentage 100

#当前写入日志文件的大小超过上一次rewrite之后的文件大小的百分之100时就是2倍时触发Rewrite

auto-aof-rewrite-min-size 512mb

#当aof大于512m 才写入硬盘。

#aof-rewrite-incremental-fsyn yes

#aof rewrite 过程,默认文件是增量同步策略。


lua-time-limit 5000

#一个Lua脚本最长的执行时间,单位为毫秒,默认是5000


#notify-keyspace-events ""

#按键通知事件,默认关闭


bind 10.32.5.63

protected-mode no

masterauth "$1$9a$A3v2uy9"

requirepass "$1$9a$A3v2uy9"


cluster-migration-barrier 1

slowlog-log-slower-than 10000

slowlog-max-len 128

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


4、创建集群

yum -y install ruby

yum install ruby rubygems

gem install redis

修改密码文件

/usr/lib/ruby/gems/1.8/gems/redis-3.3.3/lib/redis/client.rb

     # :password => nil,

      :password => ‘$1$9a$A3v2uy9‘,

cd /usr/local/redis/src

./redis-trib.rb create --replicas 1 10.32.5.63:7111 10.32.5.63:7112 10.32.5.63:7113 10.32.5.63:7114 10.32.5.63:7115 10.32.5.63:7116 10.32.5.63:7117 10.32.5.63:7118 10.32.5.63:7119 10.32.5.64:7121 10.32.5.64:7122 10.32.5.64:7123 10.32.5.64:7124 10.32.5.64:7125 10.32.5.64:7126 10.32.5.64:7127 10.32.5.64:7128 10.32.5.64:7129


5、创建启动脚本


6、登录

redis-cli -c -h 10.32.5.63 -p 7111 -a ‘$1$9a$A3v2uy9‘

7、集群客户端

10.32.5.64:7124> GET foo

"bar"

10.32.5.64:7122>

[root@l-redis33 ~]# redis-cli -c -h 10.32.5.63 -p 7111 -a ‘$1$9a$A3v2uy9‘

10.32.5.63:7111> get foo

-> Redirected to slot [12182] located at 10.32.5.64:7124

"bar"

8、重新划分100个槽位,到本节点。

 ./redis-trib.rb reshard 10.32.5.63:7111

9、计数器

    计数器的值只能增加,不能减少。

10、故障转移测试。

    1、查看主节点

[root@l-redis33 src]# redis-cli -h 10.32.5.63 -p 7111 -a ‘$1$9a$A3v2uy9‘ cluster nodes |grep master

9a731c78db51c7d9af039c9e1b8240b2bc6174d5 10.32.5.63:7111 myself,master - 0 0 1 connected 1820-3640

16cd1198a3317d32682e0b17edcd842bc61306ef 10.32.5.63:7112 master - 0 1499051510616 2 connected 5461-7281

de651d85822eb2caaa0054b72bb765e950ec66d9 10.32.5.64:7121 master - 0 1499051511617 10 connected 0-1819

ef2d23168a9e4856ef94e19074fa55f239b880ad 10.32.5.64:7123 master - 0 1499051511718 12 connected 7282-9101

851818450b44a179fa25a0ed0667de5f0e618cd3 10.32.5.63:7113 master - 0 1499051511717 3 connected 9102-10922

7b226249af22cfa67bfb15e676c8934e6e4c691d 10.32.5.64:7124 master - 0 1499051511718 13 connected 10923-12742

166116e0e76a2699d4471319306dfc99e246f760 10.32.5.64:7125 master - 0 1499051510115 14 connected 14564-16383

a83ec82fd0e3053e0882337a72c7affb70563d8a 10.32.5.63:7114 master - 0 1499051511117 4 connected 12743-14563

4c402d2324a94228d3cd63235c0acd4ba3547d03 10.32.5.64:7122 master - 0 1499051510617 11 connected 3641-5460


    2、关闭一个主节点

[root@l-redis33 src]# redis-cli -c -h 10.32.5.63 -p 7112 -a ‘$1$9a$A3v2uy9‘ debug segfault

Error: Server closed the connection


    3、检查主节点

[root@l-redis33 src]# redis-cli -h 10.32.5.63 -p 7111 -a ‘$1$9a$A3v2uy9‘ cluster nodes |grep master

9a731c78db51c7d9af039c9e1b8240b2bc6174d5 10.32.5.63:7111 myself,master - 0 0 1 connected 1820-3640

53494b5e18c726b8f75001c069940e740c6dcb6d 10.32.5.64:7127 master - 0 1499051716944 19 connected 5461-7281

16cd1198a3317d32682e0b17edcd842bc61306ef 10.32.5.63:7112 master,fail - 1499051659552 1499051657348 2 disconnected

de651d85822eb2caaa0054b72bb765e950ec66d9 10.32.5.64:7121 master - 0 1499051717946 10 connected 0-1819

ef2d23168a9e4856ef94e19074fa55f239b880ad 10.32.5.64:7123 master - 0 1499051718446 12 connected 7282-9101

851818450b44a179fa25a0ed0667de5f0e618cd3 10.32.5.63:7113 master - 0 1499051718446 3 connected 9102-10922

7b226249af22cfa67bfb15e676c8934e6e4c691d 10.32.5.64:7124 master - 0 1499051718948 13 connected 10923-12742

166116e0e76a2699d4471319306dfc99e246f760 10.32.5.64:7125 master - 0 1499051718948 14 connected 14564-16383

a83ec82fd0e3053e0882337a72c7affb70563d8a 10.32.5.63:7114 master - 0 1499051717445 4 connected 12743-14563

4c402d2324a94228d3cd63235c0acd4ba3547d03 10.32.5.64:7122 master - 0 1499051718948 11 connected 3641-5460

[root@l-redis33 src]#

    从节点升级为主节点。启动7112,发现7112变成从节点。

[root@l-redis33 src]# redis-cli -h 10.32.5.63 -p 7111 -a ‘$1$9a$A3v2uy9‘ cluster nodes

53494b5e18c726b8f75001c069940e740c6dcb6d 10.32.5.64:7127 master - 0 1499052056521 19 connected 5461-7281

53494b5e18c726b8f75001c069940e740c6dcb6d 0 1499052058824 19 connected


cluster nodes 命令的输出有点儿复杂, 它的每一行都是由以下信息组成的:

  • 节点 ID :例如 3fc783611028b1707fd65345e763befb36454d73 。

  • ip:port :节点的 IP 地址和端口号, 例如 127.0.0.1:7000 , 其中 :0 表示的是客户端当前连接的 IP 地址和端口号。

  • flags :节点的角色(例如 master 、 slave 、 myself )以及状态(例如 fail ,等等)。

  • 如果节点是一个从节点的话, 那么跟在 flags 之后的将是主节点的节点 ID : 例如 127.0.0.1:7002 的主节点的节点 ID 就是 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 。

  • 集群最近一次向节点发送 PING 命令之后, 过去了多长时间还没接到回复。

  • 节点最近一次返回 PiNG 回复的时间。

  • 节点的配置纪元(configuration epoch):详细信息请参考 Redis 集群规范 。

  • 本节点的网络连接情况:例如 connected 。

  • 节点目前包含的槽:例如 127.0.0.1:7001 目前包含号码为 5960 至 10921 的哈希槽。


11、添加节点到集群

    1、配置启动新节点

    2、添加主节点

/redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7111

    3、添加作为从节点,作为随机的从节点。

./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000

    4、指定做为从节点

./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000

    5、新添加节点为空主机,使用replicate复制到副本中。如果丐姐蒂娜是从属节点,但是要将其作为不通的主节点的副本移动。此功能也起作用。

    添加从节点:

redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
redis-cli -p 7000 cluster nodes | grep slave | grep 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
f093c80dde814da99c5cf72a7dd01590792b783b 127.0.0.1:7006 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617702 3 connected
2938205e12de373867bf38f1ca29d31d0ddb3e46 127.0.0.1:7002 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617198 3 connected

12、删除节点:

    1、删除从节点
       ./redis-trib del-node 127.0.0.1:7000 `<node-id>`

        2、删除主节点

            1、减少主节点数量,先把主节点变成为空节点

            2、删除主节点的另一种方法是在其从站之一上执行手动故障切换,并在将节点变为新主节点的从属节点后将其删除

         

13、副本迁移。


CLUSTER REPLICATE <master-node-id>


14、升级Redis群集中的节点


15、迁移到Redis群集


本文出自 “itboy的博客园” 博客,转载请与作者联系!

redis3