系列文章目录
!!!是的没错,胖友们,保姆教程系列又更新了!!!
保姆教程系列一、Redis部署 so easy
保姆教程系列二、Redis高可用(主从同步+哨兵模式)
保姆教程系列三、Redis高可用(Cluster集群模式)
文章目录
- 系列文章目录
- 前言
- 集群简介
- 实现思路
- 一、准备工作
- 1.1 关闭防火墙
- 1.2 伪集群搭建
- 1.3 修改redis配置
- 二、搭建集群
- 2.1 一键启动redis服务
- 2.3 关联集群
- 三、集群测试
- 3.1 连接客户端
- 3.2 查看集群信息
- 3.3 数据测试
- 模式区别
- 总结
前言
请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、
上篇我们介绍到 保姆教程系列二、Redis高可用(主从同步+哨兵模式)
提示:以下是本篇文章正文内容,下面案例可供参考
集群简介
集群,即Redis Cluster
,是Redis 3.0开始引入的分布式存储方案。
集群由多个节点(Node)组成,Redis的数据分布在这些节点中。
集群最核心的功能:数据分区(或称数据分片)是集群最核心的功能
。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加:另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
实现思路
Redis集群一般需要6个节点,3主3从,本文使用一台服务器,模拟三主三从
- Redis集群高可用(cluster模式)至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群
- 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。
- 在此搭建伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(6379-6384),当然实际生产环境的Redis集群搭建和这里是一样的。
一、准备工作
注意:准备一台服务器并搭建redis服务 友情链接:
Centos下安装redis
1.1 关闭防火墙
#查看防火墙是否开启
firewall-cmd --state 结果:not running没有运行
#关闭防火墙
systemctl stop firewalld.service
1.2 伪集群搭建
注意:确保实例端口不冲突!!!
1.3 修改redis配置
注意:修改所有集群服务的配置文件端口,使其不一致,请注意端口及文件存放路径!!!
#修改redis.conf
bind 0.0.0.0 #限定redis访问网卡
port 6739 # 绑定端口号
daemonize yes #用来指定redis是否要用守护进程的方式启动,默认为no
protected-mode no #设置为后台启动
requirepass admin123 #redis登录密码
logfile /usr/local/redis/log/redis_6379.log #redis日志文件
pidfile /usr/local/redis/log/redis_6379.pid #当redis以守护进程方式运行
cluster-enabled yes #开启集群配置
cluster-node-timeout 15000 #集群超时毫秒
cluster-config-file /usr/local/redis/conf/cloud-nodes-6379.conf #集群节点配置文件名
二、搭建集群
2.1 一键启动redis服务
(1)创建启动脚本
#创建脚本
vim start_cloud.sh
脚本内容:
#!/bin/env bash
#实例1
./usr/local/redis01/binredis-server /usr/local/redis01/conf/redis.conf &
#实例2
./usr/local/redis02/binredis-server /usr/local/redis02/conf/redis.conf &
#实例3
./usr/local/redis03/binredis-server /usr/local/redis03/conf/redis.conf &
#实例4
./usr/local/redis04/binredis-server /usr/local/redis04/conf/redis.conf &
#实例5
./usr/local/redis05/binredis-server /usr/local/redis05/conf/redis.conf &
#实例6
./usr/local/redis06/binredis-server /usr/local/redis06/conf/redis.conf &
echo "启动成功"
(2)为脚本授权
chmod +x start_cloud.sh
2.3 关联集群
注意:此处不要用127.0.0.1, 请用真实IP地址!!!
#获取集群指令
redis-cli --cluster help
#关联集群
./redis-cli -h 192.168.248.131 -p 6379 -a admin123 --cluster create --cluster-replicas 1 192.168.248.131:6379 192.168.248.131:6380 192.168.248.131:6381 192.168.248.131:6382 192.168.248.131:6383 192.168.248.131:6384
输入命令后开始分配哈希槽(slots),分配主从节点,然后提示是否确认此分配,输入yes
节点分配说明:
一个集群至少要有三个主节点
--replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上
,存储的数据(key-value)是均匀分配到不同的节点的:
哈希槽(slots)说明:
一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,
集群使用公式CRC16(key) % 16384来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
集群中的每个节点负责处理一部分哈希槽。
举个例子: 如果一个集群可以有主节点, 其中:
集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行CRC16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
综上所述,每个Redis集群理论上最多可以有16384个节点。
至此Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了:0-5460、5461-10922、10933-16383
三、集群测试
3.1 连接客户端
注意:在任意一个客户端执行命令即可!!!
#(-a访问服务端密码 -h -p 表示ip地址和端口 -c采用集群策略连接,设置数据会自动切换到相应的写主机)
./redis-cli -c -h 127.0.0.1 -p 6379 -a admin123
3.2 查看集群信息
#查看集群信息
cluster info
#查看节点列表
cluster nodes
输出详解:
第一串字符表示节点id
master : 主节点
slave:表示从节点 后面跟着的id 表示是这个主节点的从节点
myself:本机
最后的数字表示主机连接的槽(slots)
3.3 数据测试
#存储数据
set name 123456
可见存储数据时,已经存储到redis实例6380中,已经将数据插入第2段5798哈希槽位中
模式区别
哨兵模式(sentinal)
哨兵模式是由客户端本地来维护redis结点之间的信息,而集群模式是由结点来维护所有结点之间的连接关系
sentinal哨兵模式存在缺陷,在水平拓展redis结点的情况下,需要客户端在本地维护分片机制(客户端与redis结点之间存在耦合),并且如果此时需要再继续进行拓展,那么就会有一个数据迁移的过程,这个过程是繁琐的。
集群(cluster模式)
数据分区(或称数据分片)是集群最核心的功能
。
数据依照slot存储分布在多个节点,节点间数据共享,能够动态调整数据分布;可扩展性;无中心架构;高可用性;能够降低运维成本,有效提高系统的可用性以及扩展性。
而集群模式却不需要客户端来进行分片机制的维护,并且每个客户端中都维护了整个集群网络的信息,进行客户端与redis集群之间的解耦,并且更加易于拓展。
总结
我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!
参考链接、参考链接、参考链接、