概述

Redis集群提供一个在多个Redis节点数据自动共享的方式,简单来说就是添加服务器的数量,达到

  • 高可用,让Redis服务长时间有效运行,不会因为硬件/软件问题导致不可用
  • 可扩展性,动态添加节点/删除节点,达到增加性能/减少服务器资源
  • 分布式,节点可以不是
  • 容错,若其中一台服务器故障挂了Redis也能继续使用(前提是有从节点并且可用)

Redis集群数据分片

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.

Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:

  • 节点 A 包含 0 到 5500号哈希槽.
  • 节点 B 包含5501 到 11000 号哈希槽.
  • 节点 C 包含11001 到 16384号哈希槽

这种结构的好处就是非常容易增加/删除节点,并且不会影响集群的使用

  • 增加节点,将原来节点的分配部分哈希槽给新节点
  • 删除节点,将删除的节点哈希槽分配给现有的节点上即可

Redis集群节点通讯

因为Redis集群是把数据分布存放在不同客户端,这样做的好处就是减少每台机器的压力,提高并发处理能力,因为我们只要进入任一节点,即可使用整个集群,这就需要节点之间互相通讯,这个是Redis内部处理。

每一个Redis集群节点都是需要两个端口,一个用于客户端连接,一个用于节点数据传输(Ping-Pong机制),数据端口是在客户端口的基础上加10000,例如,端口6379,数据端口16379,所以在多台机器部署集群需要注意防火墙是否把数据屏蔽 。

环境准备

1.安装Redis  下载地址

2. 安装Ruby,因为Redis集群管理是用ruby开发  下载地址

3. 下载edis-trib.rb文件,放在Redis安装文件夹内   下载地址

4. 安装Ruby的Redis驱动,直接在cmd执行(安装的时候把Ruby放在环境变量,否则进到Bin执行)    

gem install redis

出现Successfully installed 代表安装成功

【Redis】集群教程(Windows)-LMLPHP

搭建Redis集群

Redis集群至少需要3个节点,就按最少的3个节点搭建一个集群

1. 准备3个配置文件,修改各自的端口和appendfilename,当然如果在3台机器上运行,什么都不需要修改

port 6379
cluster-enabled yes
cluster-config-file nodes.6379.conf
cluster-node-timeout 5000
appendonly yes
appendfilename "appendonly.6379.aof"

2. 准备bat文件启动3个redis节点(非必须,可以手动cmd启动,配置相应配置文件),bat文件需要在redis安装目录执行

title redis-cluster
start redis-server.exe redis.6379.conf
start redis-server.exe redis.6380.conf
start redis-server.exe redis.6381.conf

【Redis】集群教程(Windows)-LMLPHP

3. 用redis-trib创建集群,在cmd执行

redis-trib.rb create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381

执行完成,输入yes更新配置文件,最终输出各个节点信息,哈希槽分配情况。

 【Redis】集群教程(Windows)-LMLPHP

至此,Redis集群已经搭建好,这里只有3个主节点,若想从节点,只需多加3个Redis节点,命令加上--replicas参数就可以。

测试Redis集群

进入redis-cli集群模式

redis-cli -c

【Redis】集群教程(Windows)-LMLPHP

可以看出,写入读取,Redis根据Key计算的hash值在各个节点自动重定向

打开刚刚开启的几个Redis实例,可以看出他们之前一直在不断通讯

 【Redis】集群教程(Windows)-LMLPHP

转发请标明出处:https://www.cnblogs.com/WilsonPan/p/12643221.html

04-08 17:59