redis3.0集群搭建

可以考虑三个不同主机建立主节点,第四台主机上面建立三个不同端口的从节点。用以防止整个集群down掉,提高可用性。

----------------------------------------------------------------------------------------------------------

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。

Redis集群的重新分片操作是由Redis的集群管理软件redis-trib负责执行的,Redis提供了进行重新分片所需的所有命令,而redis-trib则通过向源节点和目标节点发送命令来进行重新分片操作。

Redis集群中的节点分为主节点和从节点,其中主节点用于处理槽,而从节点则用于复制某个主节点。

通过执行redis> MONITOR 命令 ,客户端可以将自己变为一个监视器,实时地接收并打印出服务器当前处理的命令请求的相关信息。

一、安装redis(略)和支持组件

yum install ruby rubygems -y

gem install redis    #安装redis 的api 接口

二、配置redis

redis-common.conf:

 1 #GENERAL  
 2 daemonize yes
 3 tcp-backlog 511  
 4 timeout 0  
 5 tcp-keepalive 0  
 6 loglevel notice  
 7 databases 16  
 8 dir /opt/redis/redis/data  
 9 slave-serve-stale-data yes  
10 #slave只读  
11 slave-read-only yes  
12 #not use default  
13 repl-disable-tcp-nodelay yes  
14 slave-priority 100  
15 #打开aof持久化  
16 appendonly yes  
17 #每秒一次aof写  
18 appendfsync everysec  
19 #关闭在aof rewrite的时候对新的写操作进行fsync  
20 no-appendfsync-on-rewrite yes  
21 auto-aof-rewrite-min-size 64mb  
22 lua-time-limit 5000  
23 #requirepass uuzz
24 #打开redis集群  
25 cluster-enabled yes  
26 #节点互连超时的阀值  
27 cluster-node-timeout 5000
28 cluster-migration-barrier 1  
29 slowlog-log-slower-than 10000  
30 slowlog-max-len 128  
31 notify-keyspace-events ""  
32 hash-max-ziplist-entries 512  
33 hash-max-ziplist-value 64  
34 list-max-ziplist-entries 512  
35 list-max-ziplist-value 64  
36 set-max-intset-entries 512  
37 zset-max-ziplist-entries 128  
38 zset-max-ziplist-value 64  
39 activerehashing yes  
40 client-output-buffer-limit normal 0 0 0  
41 client-output-buffer-limit slave 256mb 64mb 60  
42 client-output-buffer-limit pubsub 32mb 8mb 60  
43 hz 10  
44 aof-rewrite-incremental-fsync yes 


redis-6661.conf:

 1 #包含通用配置  
 2 include /opt/redis/redis-common.conf
 3 #监听tcp端口  
 4 port 6661
 5 #最大可用内存  
 6 maxmemory 1024m  
 7 #内存耗尽时采用的淘汰策略:  
 8 # volatile-lru -> remove the key with an expire set using an LRU algorithm  
 9 # allkeys-lru -> remove any key accordingly to the LRU algorithm  
10 # volatile-random -> remove a random key with an expire set  
11 # allkeys-random -> remove a random key, any key  
12 # volatile-ttl -> remove the key with the nearest expire time (minor TTL)  
13 # noeviction -> don't expire at all, just return an error on write operations  
14 maxmemory-policy allkeys-lru  
15 #aof存储文件  
16 appendfilename "appendonly-6661.aof"  
17 #rdb文件,只用于动态添加slave过程  
18 dbfilename dump-6661.rdb
19 #cluster配置文件(启动自动生成)  
20 cluster-config-file nodes-6661.conf  
21 #部署在同一机器的redis实例,把auto-aof-rewrite搓开,防止瞬间fork所有redis进程做rewrite,占用大量内存
22 auto-aof-rewrite-percentage 80-100
23 logfile "/opt/redis/log/redis-6661.log"

三、启动redis(略)并创建集群

redis-trib.rb create --replicas 1 10.1.1.28:6661 10.1.1.28:7771 10.1.1.29:8881 10.1.1.29:9991 10.1.1.28:6662 10.1.1.28:7772 10.1.1.29:8882 10.1.1.29:9992

执行以上命令后redis-trib会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中。选项 --replicas 1 表示我们希望为集群中的每个主节点创建1个从节点.

注意:同一组redis实例中的主和从如果全部挂掉的话,整个集群将会down,进行读写操作时将会提示如下:

(error) CLUSTERDOWN The cluster is down

输入 yes 并按下回车确认之后, 集群就会将配置应用到各个节点, 并连接起(join)各个节点 —— 也即是让各个节点开始互相通讯
 
检测集群是否正常:
#redis-trib.rb check  10.1.1.28:6661
 
查看集群中的master
#redis-cli -c -h 10.1.1.28 -p 6661 cluster nodes|grep master
 
查看集群中的slave
 
四、快速删除集群节点
1、停掉该端口上的redis实例
2、删除redis-6661.conf 中cluster-config-file  nodes-6661.conf指定的/opt/redis/data/nodes-6661.conf节点信息文件
 
五、附redis cluster命令行命令
集群(cluster)
CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 
节点(node)
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
槽(slot)
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
键 (key)
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。
 
 
 
 参考资料:https://redis.io/topics/config (redis.conf官方配置)
               http://www.redis.cn/topics/cluster-tutorial.html (redis cluster官方文档)
               http://www.aboutyun.com/thread-7155-1-1.html
               http://www.blogchong.com/post/redis_20141225.html
               http://www.cnblogs.com/Eivll0m/p/4869786.html
 
 
 
原文地址:https://www.cnblogs.com/wjoyxt/p/4897824.html