redis集群-Redis(六)
继续上一篇文章的,我们讨论Redis集群的搭建和管理。RedisCluster是Redis实现的分布式集群解决方案。
采用多主从分布式集群结构,提供高可用和复制能力,适合水平扩展场景。
官方建议从节点数量不超过1000个。
搭建集群时,必须按顺序添加服务器、安装Redis、配置端口和集群模式。
集群启动命令包括设置集群启用、配置文件路径、集群节点超时、关闭保护模式、启用持久化等。
集群搭建完成后,可以使用 src/redis-cli--clustercreate--cluster-replicas1 命令指定集群中的各个节点来初始化集群。
如果需要输入密码,请在命令后面添加`-akeing`参数。
集群搭建成功后,通过 src/redis-cli-c-h192.168.81.128-p8001 命令进入集群,使用 clusterinfo 和 clusternodes 命令查看集群状态。
集群信息会保存在配置文件中,以便集群重启时可以根据主从关系恢复集群状态。
在集群中执行setkeying1操作,通过哈希槽计算原理(“HASH_SLOT=CRC16(key)mod16384”)将数据存储到特定节点上。
当主节点宕机时,从节点会自动提升为主节点,维持集群的高可用性。
将“Cluster-node-timeout”参数配置为5秒,以保证集群在节点切换时的稳定性,避免网络抖动导致的错误选择。
Redis集群可能存在裂脑问题,即多个主节点同时对外提供服务,网络分区恢复正常后数据丢失。
为了避免这个问题,你可以配置`min-slave-to-write1`来限制写操作的同步从节点的最小数量,但要注意这个配置可能会影响集群的可用性。
对于节点挂掉后仍需要对外提供服务的小型集群,可以通过配置 cluster-require-full-converageno 来实现。
在进行Redis批量操作时,key前缀要保持一致,保证数据存储在同一个slot中,避免因数据分布不均匀而导致操作错误。
如果需要添加新的集群节点,请使用命令`src/redis-cli--clusteradd-node192.168.0.0:8007192.168.0.0:8001`,其中8007代表新节点,8001是存活节点之一。
集群将通过Gossip协议添加新节点。
Redis 集群配置
Redis集群实现了Redis的水平扩展。通过启动N个Redis节点,每个节点存储总数据的1/N。
集群通过分区提供一定程度的可用性,即使集群中的某些节点发生故障或无法通信,集群也可以继续处理查询命令。
集群中的所有Redis节点相互互连(PING-PONG机制),内部使用二进制协议来优化传输速度和带宽。
Redis集群内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,Redis首先使用crc16算法计算出该key的结果,然后将结果的其余部分计算到16384。
每个键对应一个编号在 0 到 16383 之间的哈希位置,Redis 会将哈希位置大致相等地映射到不同的节点,具体取决于 节点数量。
Redis集群的高可用体现在以下几个方面: 1、集群中某个节点的主节点出现故障后,其从节点自动提升为主节点,集群继续提供服务; 集群关闭后,某个节点下的Redis全部down掉,集群将不可用;3. 当故障节点恢复后,集群自动恢复正常; 4、即使集群一半宕机,只要哈希槽完好,集群仍然可以正常运行。
Redis集群资源配置示例如下:在CentOS Linux版本7.3.1611(Core)上,部署4个Redis节点,端口号分别为6379、6380、6381、6382。
Redis集群的配置步骤包括:依赖项(使用yum安装ruby和rebygems),安装Redis和Ruby接口 (使用gem安装redis)、安装并初始化Ruby版本、修改redis.conf、复制配置到其他节点、启动Redis实例、启用防火墙、创建集群、检查集群、停止集群。
部署Redis集群时,需要注意以下问题: 1、Redis集群的总线端口为Redis客户端端口加10000。
例如客户端通信端口为6379,则集群的总线端口为16379; 。
配置防火墙时,必须在集群总线端口和客户端端口上启用相应的永久端口规则。
验证集群搭建成功的方法包括:通过redis-cli连接集群主节点,运行命令查看集群信息、节点列表、集群状态节点、key槽、槽中键值对的数量等。
关闭集群时,必须在每个节点上运行 shutdown 命令。
添加主节点或从节点涉及启动节点、将节点添加到集群以及分配哈希槽,而删除节点则涉及删除从节点和主节点。