接上一节内容,本节我们将初步测试一下这个Redis集群【集群存值变化,以及主节点的挂掉和重启时,对应集群状态变化】。

1、测试连接集群

按照redis cluster的特点,它是去中心化去中间件,每个节点都是对等的。所以,你连接哪个节点都可以获取和设置数据,我们来试一下。

redis-cli是redis默认的客户端工具,启动时加上`-c`参数,就可以连接到集群【“-c”,这个参数表示我们将打开集群的一个客户端】。

连接任意一个节点端口:

(8)Redis-Cluster集群理论及实践【中】

存入一个值:

(8)Redis-Cluster集群理论及实践【中】 

由先前的理论知识,Redis集群在分配key的时候,它会使用CRC16('my_name')%16384算法计算出一个结果值,根据这个值与节点哈希槽的范围进行比对,进而决定将这个key 放到哪个节点,这里分配到了12803 slot 就分配到了6383(10923-16383)这个节点上。

Redirected to slot [12803] located at 192.168.72.134:6383

Redis cluster采用的方式比较直接,它直接跳转到6383这个节点上,而不是停留在自身的6381节点。

 

现在我们连接6385这个节点,从这个节点客户端查询刚才存入的值:

(8)Redis-Cluster集群理论及实践【中】

我们在6385这个节点客户端上,同样是获取my_name的值,而它同样也是跳转到了6383节点上。

test others:

(8)Redis-Cluster集群理论及实践【中】

可以看出,数据都会在集群的主节点之间相互跳转进行存储。

2、测试集群中的master主节点宕机

模拟其中一台Master主服务器节点已死的情况,那就6384节点宕机:

(8)Redis-Cluster集群理论及实践【中】

(8)Redis-Cluster集群理论及实践【中】

可以看到,集群中6384这个节点已死,因为6384的从节点只有6381,理论上,肯定6381就会被选举称Master节点了,那么我们检查一下集群节点状态:

./redis-trib.tb check 192.168.72.134:6381

(8)Redis-Cluster集群理论及实践【中】

果然,6381被选举出来,成了替代6384的主节点了。那我们来获取原先存在6384节点的数据:

(8)Redis-Cluster集群理论及实践【中】

数据并没有丢失,而是从6381上面获取了。

3、测试集群中的宕机master节点重启

这个时候,突然集群中刚才宕机的6384节点又重启了,那么6384这个节点还会自动加入到集群中吗?此时,6384这个节点在集群中充当什么角色呢?

重新启动 6384节点:

(8)Redis-Cluster集群理论及实践【中】

我们看到,集群中6384这个节点已经重启,现在查询一下集群节点状态:

./redis-tirb.tb check 192.168.72.134:6384

 (8)Redis-Cluster集群理论及实践【中】

6384节点重启了,但是它却成为6381的从节点,验证了之前我们的理论分析结果图:

(8)Redis-Cluster集群理论及实践【中】

即,集群中master节点挂掉之后,它名下slave节点将被选举顶替master成为新的主节点;

如果已挂的master节点再次启动加入集群,这个时候将作为新的从节点分配给已选举出的新master节点。

4、测试集群中的slave从节点宕机和重启

这里关于slave节点的挂掉和重启时,集群状态变化,可参考上述测试进行,不再赘述。

从节点宕机,因为其并未分配哈希槽,并不影响其附属的master节点状态。

从节点重启,集群将根据现有master节点下从节点存活情况,灵活地安排重启节点附加给没有slave节点的master上。

 

下一节,我们测试在集群中新增、删除master/slave节点时,集群的变化情况。

相关文章: