Redis-5.0.3集群的搭建

一、概述
Redis3.0版本之后支持Cluster.

1.redis cluster的现状
目前redis支持的cluster特性:
1):节点自动发现
2):slave->master 选举,集群容错
3):Hot resharding:在线分片
4):进群管理:cluster xxx
5):基于配置(nodes-port.conf)的集群管理
6):ASK 转向/MOVED 转向机制.
2.redis cluster 架构
1)redis-cluster架构图
Redis-5.0.3集群的搭建
架构细节:

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

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

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

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

  1. redis-cluster选举:容错
    Redis-5.0.3集群的搭建
    (1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.
b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

实验环境:rhel7.3
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要
在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令.
Redis 集群的优势:
自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

redis集群的搭建

1.将之前做的redis关掉,然后依次解决日志出现的警告信息

[[email protected] redis]# /etc/init.d/redis_6379 stop
[[email protected] redis]# sysctl -w vm.overcommit_memory=1
vm.overcommit_memory = 1

2.搭建集群环境使用7001到7006搭建六个集群节点

[[email protected] ~]# mkdir /usr/local/rediscluster
[[email protected] ~]# cd /usr/local/rediscluster/
[[email protected] rediscluster]# mkdir 700{1..6}
[[email protected] rediscluster]# ls
7001  7002  7003  7004  7005  7006

3.每个节点的目录在里边写配置文件redis.conf

[[email protected] rediscluster]# cd 7001/
[[email protected] 7001]# vim redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout  5000
appendonly yes
pidfile "/usr/local/rediscluster/7001/redis.pid"
logfile "/usr/local/rediscluster/7001/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7001"
[[email protected] 7001]# redis-server redis.conf 

以上只展示一个目录的操作步骤,其他6个目录作法一样,不再赘述 ,唯一不同就是每个配置文件要写对应的号。(例如7002目录下的配置文件中相应的号就是7002)
4. ps ax查看到6个端口的进程已经开启
Redis-5.0.3集群的搭建
5.创建集群

[[email protected] redis-5.0.3]# redis-cli --cluster create --cluster-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

6.查看集群是否建立成功以及各个节点对应关系

[[email protected] redis-5.0.3]# redis-cli --cluster info 127.0.0.1:7001

Redis-5.0.3集群的搭建
7001,7002,7003是master,分别对应的slave是7006,7005,7004
如:

[[email protected] redis-5.0.3]# redis-cli -c -p 7001
127.0.0.1:7001> info

Redis-5.0.3集群的搭建
7.给集群中添加节点
先创建两个新的节点

[[email protected] ~]# cd /usr/local/rediscluster/
[[email protected] rediscluster]# mkdir 7007
[[email protected] rediscluster]# mkdir 7008
[[email protected] rediscluster]# cd 7007/
[[email protected] 7007]# cp ../7001/redis.conf  .
[[email protected] 7007]# 
[[email protected] 7007]# vim redis.conf 
port 7007
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout  5000
appendonly yes
pidfile "/usr/local/rediscluster/7007/redis.pid"
logfile "/usr/local/rediscluster/7007/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7007"
[[email protected] 7007]# redis-server redis.conf
7008一样

Redis-5.0.3集群的搭建
添加节点7007(master的添加方法)

[[email protected] 7007]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

再次查看节点7007已经添加进去

[[email protected] 7007]# redis-cli --cluster check 127.0.0.1:7001

Redis-5.0.3集群的搭建
添加节点7008(slave的添加方法,master为7007)

[[email protected] 7007]# redis-cli --cluster add-node --cluster-slave --cluster-master-id 3ca6aa2607f46486708f5504f325ce90887a9b41 127.0.0.1:7008 127.0.0.1:7007

再次检查,7008节点添加成功

[[email protected] 7007]# redis-cli --cluster check 127.0.0.1:7001

Redis-5.0.3集群的搭建
8.给新的节点(7007)中添加哈希槽
##3ca6aa2607f46486708f5504f325ce90887a9b41 是7007的id,在上图中可以看到
从所有节点中向7007分配300个哈希槽

[[email protected] 7008]# redis-cli --cluster reshard --cluster-from all --cluster-to 3ca6aa2607f46486708f5504f325ce90887a9b41 --cluster-slots 300  --cluster-yes 127.0.0.1:7001

检查

[[email protected] 7008]# redis-cli --cluster check 127.0.0.1:7001

Redis-5.0.3集群的搭建
均匀分配哈希槽

[[email protected] 7008]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001

检查

[[email protected] 7008]# redis-cli --cluster check 127.0.0.1:7001

Redis-5.0.3集群的搭建
9.无中心检测
Redis-5.0.3集群的搭建
数据保存到了7007上
Redis-5.0.3集群的搭建
不管从那个节点进去redis查看刚才插入的数据都会传到7007节点上

10.测试故障时slave的继位
如:
down掉7001节点,他的slave就会成为主节点
Redis-5.0.3集群的搭建
查看集群状态
Redis-5.0.3集群的搭建
若将节点7006也down掉,集群将不可用
Redis-5.0.3集群的搭建
集群将不可用
Redis-5.0.3集群的搭建