……1.前言……

 

        有了redis做缓存数据库,读写效率瞬间提高。但是需要考虑一个问题,redis之所以效率高,功能强大,是由于其将所有数据都存储在内存中,为了让redis重启之后仍能保证数据不丢失,需要将数据从内存中持久化到硬盘中。这样速度就会变慢了。这时可以使用redis集群缓解问题。当一个节点挂掉或者不可访问时, 为了保证可用性,Redis集群使用了主从模式,一个主节点对应一个或多个从节点。 

 

 

Radis集群 原理介绍及搭建过程-LMLPHP

 

 

……2.原理介绍……

       

       如果在集群建立的时候(或者建完后),我们为每个主节点都添加了从节点, 比如像这样,集群包含主节点A B C, 以及从节点A1 B1 C1, 那么即使B挂掉系统也可以继续正确工作。B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。 

 

集群原理:

 

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot(插槽)上,cluster 负责维护node<->slot<->value

 

 

……3.搭建过程……

 

现在我们开始建立集群吧。

 

1.你需要ruby环境。

      因为redis-trib.rb是由ruby语言编写的所以需要安装ruby环境。redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。

 

2.设置端口。

       在redis目录下建立三个文件夹,用端口号命名方便。分别拷贝redis.conf文件到对应的文件夹。同时修改配置文件中,设置不同的端口号6379、6380、6381

 

3.开启集群

       在redis.conf 文件中,cluster-enabled yes去掉注释。

 

4.指定集群的配置文件。

    cluster-config-file "nodes-xxxx.conf",目录下出现dump.rdb这个文件了。

 

5.启动服务:

 cd 6379 && redis-server redis.conf && cd ..
 cd 6380 && redis-server redis.conf && cd ..
 cd 6381 && redis-server redis.conf && cd ..

你就会看到三个端口已经启动了。

 

Radis集群 原理介绍及搭建过程-LMLPHP

 

6.创建集群:

       在redis源码的src目录下  执行: 

       $ ./redis-trib.rb create --replicas 0 192.168.139.128:6379 192.168.139.128:6380 192.168.139.128:6381

      这样它会为我们创建好节点,自动分配slot。redis集群的核心是slot,根据slot的值可以找到对应redis数据的存储节点上。

Radis集群 原理介绍及搭建过程-LMLPHP

Radis集群 原理介绍及搭建过程-LMLPHP

 

问题:

 

1.报错:create ERR Slot 16295 is already busy (Redis::CommandError)” 

   解决:经检查,这是由于上一次配置集群失败时留下的配置信息导致的。 只要把redis.conf中定义的 cluster-config-file 所在的文件删除,重新启动redis-server及运行redis-trib即可。

 

Radis集群 原理介绍及搭建过程-LMLPHP

 

 

2.查询报错:MOVED 5798 192.168.139.128:6380

   解决:name的hash槽信息在6380,现在使用redis-cli连接的6379,无法完成set操作,需要客户端跟踪重定向。
redis-cli -c

Radis集群 原理介绍及搭建过程-LMLPHP

 

Radis集群 原理介绍及搭建过程-LMLPHP

 

 

……4.思考总结……

 

     1.如果节点下线,就会导致slot区域有空档,集群将不可用。为了保护节点,可以使用“主从模式”实现节点的高可用性,当A节点宕机,集群就会将slave转变为master继续完成集群。

     2.人工监控故障是低效率不安全的,我们可以采用nagios或者zabbix来监控redis,zabbix是插件型的监控系统,可以自己写一个脚本模板来监控想要监控的设备。在zabbix_agentd.conf中添加插件即可。

 

--------------------- 本文来自 我是周洲 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhou2s_101216/article/details/61203825?utm_source=copy

10-03 18:57