沈阳市建设监理协会网站,阿里云服务器配置网站,网站建设分金手指科捷11,wordpress 带宽购物目录 一.群集模式——Cluster
1.原理
2.作用
3.特点
4.工作机制
哈希槽
哈希槽的分配 哈希槽可按照集群主机数平均分配#xff08;默认分配#xff09;
根据主机的性能以及功能自定义分配
redis集群的分片 分片
如何找到给定key的分片
优势 二. 搭建Redis群集…目录 一.群集模式——Cluster
1.原理
2.作用
3.特点
4.工作机制
哈希槽
哈希槽的分配 哈希槽可按照集群主机数平均分配默认分配
根据主机的性能以及功能自定义分配
redis集群的分片 分片
如何找到给定key的分片
优势 二. 搭建Redis群集模式 关闭防火墙
安装redis
编辑
创建集群配置目录及文件
开启群集功能
启动redis节点
编辑 启动集群
测试集群 一.群集模式——Cluster
1.原理
集群即Redis Cluster是Redis 3.0开始引入的分布式存储方案。
集群由多个节点(Node)组成Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点只有主节点负责读写请求和集群信息的维护从节点只进行主节点数据和状态信息的复制。
哨兵模式解决了主从复制不能自动故障转移达不到高可用的问题但还是存在难以在线扩容Redis容量受限于单机配置的问题。Cluster模式实现了Redis的分布式存储即每台节点存储不同的内容来解决在线扩容的问题。
2.作用
数据分区数据分区(或称数据分片)是集群最核心的功能。集群将数据分散到多个节点一方面突破了Redis单机内存大小的限制存储容量大大增加另一方面每个主节点都可以对外提供读服务和写服务大大提高了集群的响应能力。Redis单机内存大小受限问题在介绍持久化和主从复制时都有提及例如如果单机内存太大bgsave和bgrewriteaof的fork操作可能导致主进程阻塞主从环境下主机切换时可能导致从节点长时间无法提供服务全量复制阶段主节点的复制缓冲区可能溢出。高可用集群支持主从复制和主节点的自动故障转移与哨兵类似当任一节点发生故障时集群仍然可以对外提供服务。
3.特点
Cluster采用无中心结构
所有的redis节点彼此互联(PING-PONG机制)内部使用二进制协议优化传输速度和带宽节点的fail是通过集群中超过半数的节点检测失效时才生效客户端与redis节点直连不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
4.工作机制
哈希槽
Redis集群引入了哈希槽的概念
● Redis集群有16384个哈希槽编号0-16383
● 集群的每个节点负责一部分哈希槽
● 每个key通过CRC16校验后对16384取余来决定放置哪个哈希槽通过这个值去找到所对应的节点然后直接跳转到这个对应的节点上进行存取操作。
哈希槽的分配 哈希槽可按照集群主机数平均分配默认分配
以3个节点组成的集群为例
节点A包含0-5460号哈希槽
节点B包含5461-10922号哈希槽
节点C包含10923-16383号哈希槽
根据主机的性能以及功能自定义分配
以3个节点组成的集群为例
节点A性能最差包含0-2000号哈希值
节点B性能中等包含2001-7000号哈希值
节点C性能最强包含7001-16383号哈希值
redis集群的分片 分片
使用Redis集群时我们会将存储的数据分散到多台redis机器上这称为分片。简言之集群中的每个Redis实例都认为是整个数据的一个分片。
如何找到给定key的分片
为了找到给定key的分片我们对key进行CRC16(key)算法处理并通过对总分片数量取模。然后使用确定性哈希函数这意味着给定的key将多次始终映射到同一个分片我们可以推断将来读取特定key的位置。
优势
最大优势方便扩缩容和数据分派查找。
这种结构很容易添加或者删除节点比如如果我想新添加个节点D我需要从节点A、B、C中取部分槽到D上如果我移除节点A需要将A中的槽移到B和C节点上然后将没有任何槽的A节点从集群中移除即可。由于从一个节点将哈希槽移动到另一个节点并不会停止服务所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。 二. 搭建Redis群集模式
redis的集群一般需要6个节点3主3从。方便起见这里在同一台服务器上模拟 以端口号进行区分3个主节点端口号6001/6002/6003对应的从节点端口号6004/6005/6006。
服务器主机名IP主端口从端口Node1节点node192.168.209.6060016004Node2节点node192.168.209.6160026005Node3节点node192.168.209.6360036006 关闭防火墙
[rootlocalhost ~]# systemctl stop firewalld.service
[rootlocalhost ~]# setenforce 0安装redis
传入安装包到/opt目录
yum install -y gcc gcc-c make
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
make
make PREFIX/usr/local/redis install
cd /opt/redis-5.0.7/utils
./install_server.sh
......
Please select the redis executable path []
#输入/uar/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/ 创建集群配置目录及文件
[rootnode ~]# cd /etc/redis
[rootnode redis]# mkdir -p redis-cluster/redis600{1..6}
#创建redis-cluster文件夹并在下面依次创建redis6001到redis6006文件夹
[rootnode redis]# for i in {1..6}docp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$icp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$idone
[rootnode redis]# ls -R redis-cluster/
#查看是否创建成功 开启群集功能
仅以redis6001为例其他5个文件夹的配置文件以此类推修改特别注意端口号的修改。
[rootnode redis]# cd redis-cluster/redis6001
[rootnode redis6001]# vim redis.conf ##69行注释掉bind项默认监听所有网卡
#bind 127.0.0.1
##88行修改关闭保护模式
protected-mode no
##92行修改redis监听端口
port 6001
##136行开启守护进程以独立进程启动
daemonize yes
##832行取消注释开启群集功能
cluster-enabled yes
##840行注销注释群集名称文件设置
cluster-config-file nodes-6001.conf
##846行注销注释群集超时时间设置
cluster-node-timeout 15000
##700行修改开启AOF持久化
appendonly yes 启动redis节点
分别进入那六个文件夹执行命令“redis-server redis.conf”来启动redis节点 [rootnode redis6001]# for d in {1..6}docd /etc/redis/redis-cluster/redis600$i^C
[rootnode redis6001]# for d in {1..6}docd /etc/redis/redis-cluster/redis600$dredis-server redis.confdone
[rootnode1 redis6006]# ps -ef | grep redis 启动集群
[rootnode redis6006]#redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1 测试集群 可以看到hash节点的起始编号和中止编号 槽号自动跳转了