Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:
自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:
节点 A 包含 0 到 5500号哈希槽.
节点 B 包含5501 到 11000 号哈希槽.
节点 C 包含11001 到 16384号哈希槽.
[root@server1 redis]# cd /usr/local/
[root@server1 local]# mkdir cluster
[root@server1 local]# cd cluster/
[root@server1 cluster]# mkdir 700{1..6}
[root@server1 cluster]# cd 7001/
[root@server1 7001]# vim redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7001/redis.pid
logfile /usr/local/cluster/7001/redis.log
添加命令
[root@server1 ~]# cd redis-4.0.8/src/
[root@server1 src]# cp redis-trib.rb /usr/local/bin/
[root@server1 ~]# yum install -y rubygems-1.3.7-5.el6.noarch.rpm libyaml-0.1.3-4.el6_6.x86_64.rpm
[root@server1 ~]# yum install ruby-2.2.3-1.el6.x86_64.rpm -y
[root@server1 ~]# gem install --local redis-4.0.1.gem
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 1 seconds
1 gem installed
[root@server1 ~]# redis-trib.rb 可以使用
搭建集群:
[root@server1 7001]# /etc/init.d/redis_6379 stop
[root@server1 7001]# vim redis.conf
[root@server1 7001]# /etc/init.d/redis_6379 stop
[root@server1 7001]# vim redis.conf
[root@server1 7001]# cat redis.log
[root@server1 7001]# echo 511 > /proc/sys/net/core/somaxconn
[root@server1 7001]# sysctl -w vm.overcommit_memory=1
vm.overcommit_memory = 1
[root@server1 7001]# vim /etc/sysctl.conf #在最后加入上边的参数
[root@server1 7001]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
对其他节点进行同样的配置:
[root@server1 7001]# cp redis.conf ../7002
[root@server1 7001]# cp redis.conf ../7003
[root@server1 7001]# cp redis.conf ../7004
[root@server1 7001]# cp redis.conf ../7005
[root@server1 7001]# cp redis.conf ../7006
进入对应的目录修改端口号和文件名
分别启动
redis-server redis.conf
最后查看进程:
创建集群分配哈希槽
[root@server1 7006]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
[root@server1 7006]# redis-cli -c -p 7001
127.0.0.1:7001> INFO
127.0.0.1:7001> set name kobe
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get name
"kobe"
[root@server1 7006]# redis-cli -c -p 7002
Could not connect to Redis at 127.0.0.1:7002: Connection refused
Could not connect to Redis at 127.0.0.1:7002: Connection refused
not connected>
[root@server1 7006]# redis-cli -c -p 7005
127.0.0.1:7004> get name
-> Redirected to slot [5798] located at 127.0.0.1:7005
"kobe"
7005已经成为新的master
重新激活7002:
[root@server1 cluster]# cd 7002
[root@server1 7002]# redis-server s
7002继承slave角色
破坏其中一个master后,对应的slave机会自动接管master,但当一组master和slave都down掉后,集群无法使用