redis7底子篇3 redis的集群模式3
目录一 集群模式
1.1 redis的集群模式
1.2 redis的哈希槽位slot的概念
1.3 redis的哈希槽位slot的作用
1.4 redis的槽位映射的三种方式
1.5 为何redis的最大哈希槽为16384?
二 集群模式 的搭建
2.1 redis的集群模式
2.2 redis集群实例摆设
2.3 redis集群3主3从读写案例
2.4 redis集群主从容错切换案例
2.4.1 具体实施步调
2.5 redis集群主从扩容案例
2.5.1 具体实施步调
2.6 redis集群主从缩容案例
2.6.1 具体实施步调
一 集群模式
1.1 redis的集群模式
Redis集群模式,实现数据集在多个节点进行共享,支持多个master节点。
Redis集群支持多个master,每个master节点又可以挂载多个slave;由于cluster自带sentinel的故障转移机制,内置高可以用的支持,无必要去利用哨兵模式。
客户端与redis的节点毗连,不必要毗连集群中所有的节点,只必要恣意毗连集群中的一个可用节点即可。
Redis集群不保证强一致性,这意味着在特定的条件下,redis集群可能会丢掉一些被系统收到的写入哀求命令。
1.2 redis的哈希槽位slot的概念
Redis槽位(Slot)是Redis集群中的一个重要概念,它是一个0到16383之间的整数,用于表现一个数据分片。Redis集群将所有的键均匀分布在16384个槽位上,每个槽位存储一个或多个键。这种分片机制旨在将数据分散存储在多个节点上,以提高数据的并发访问能力和存储容量。
Redis槽位的重要作用是实现数据分片,从而支持Redis集群的横向扩展。通过将数据分散存储在多个节点上,Redis集群可以或许:
提高并发访问能力:多个节点可以同时处理哀求,提高系统的吞吐量。
增强存储容量:随着节点的增长,集群的总存储容量也会相应增长。
实现负载均衡:数据均匀分布在各个节点上,克制单点过载。
1.3 redis的哈希槽位slot的作用
Redis集群中没有利用一致性hash,而是利用hash槽的概念,redis集群中有16384个哈希槽,每个key通过CRC16校验后对16384取模得到hash值,来决定存储到那个槽,集群中的每个节点负责一部分hash槽。
利用redis集群时我们将数据分散到多台redis实例上,每个实例上的数据为整个数据的一个分片。如下:
https://i-blog.csdnimg.cn/direct/0e6fe8d3029f4e2ab9fafdd0989a6cfa.png
最大的优势:方便扩容和数据分派查找;无论添加或删除或改变某个节点的哈希槽的数量不会造成集群不可用状态。
1.4 redis的槽位映射的三种方式
Redis的slot的槽位映射,一样平常有3种模式:
1.哈希取模 hash(key/3);对机器节点数进行取模,缺点:新增机器或者宕机,必要重新盘算。
2.一致性hash:一致性Hash算法是对2^32取模。缺点:数据的分布和节点的位置有关,因为这些节点不是均匀的分布在哈希环上的,以是数据在进行存储时达不到均匀分布的效果。即一致性hash算法存在数据倾斜标题。
3.hash槽:Redis集群并没有利用一致性hash而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。HASH_SLOT = CRC16(key) mod 16384
1.5 为何redis的最大哈希槽为16384?
Redis集群的最大槽数设计为16384个是基于性能、资源利用和现实利用情况的综合考虑。这个数值既保证了集群的稳定性和性能,又克制了不必要的资源浪费。2的14方为此值。为什么 Redis 集群的最大槽数是 16384 个?_为什么redis集群的最大槽数是16384个-CSDN博客
二 集群模式 的搭建
2.1 redis的集群模式
集群模式架构图:3主3从
https://i-blog.csdnimg.cn/direct/b4bc02ded6f941318820212e3207c6aa.png
2.2 redis集群实例摆设
由于环境资源限定,搭建3台虚拟机,在每台上利用两个不同端口进行区分,构建成6台机器。
1.IP:192.168.111.175+端口6381/6382
设置文件:vim /myredis/cluster/redisCluster6381.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6381
logfile "/myredis/cluster/cluster6381.log"
pidfile /myredis/cluster6381.pid
dir /myredis/cluster
dbfilename dump6381.rdb
appendonly yes
appendfilename "appendonly6381.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000
设置文件:vim /myredis/cluster/redisCluster6382.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6382
logfile "/myredis/cluster/cluster6382.log"
pidfile /myredis/cluster6382.pid
dir /myredis/cluster
dbfilename dump6382.rdb
appendonly yes
appendfilename "appendonly6382.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6382.conf
cluster-node-timeout 5000
2.IP:192.168.111.172+端口6383/6384
设置文件:vim /myredis/cluster/redisCluster6383.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6383
logfile "/myredis/cluster/cluster6383.log"
pidfile /myredis/cluster6383.pid
dir /myredis/cluster
dbfilename dump6383.rdb
appendonly yes
appendfilename "appendonly6383.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6383.conf
cluster-node-timeout 5000
设置文件:vim /myredis/cluster/redisCluster6384.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6384
logfile "/myredis/cluster/cluster6384.log"
pidfile /myredis/cluster6384.pid
dir /myredis/cluster
dbfilename dump6384.rdb
appendonly yes
appendfilename "appendonly6384.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6384.conf
cluster-node-timeout 5000
3.IP:192.168.111.174+端口6385/6386
设置文件:vim /myredis/cluster/redisCluster6385.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6384
logfile "/myredis/cluster/cluster6385.log"
pidfile /myredis/cluster6384.pid
dir /myredis/cluster
dbfilename dump6385.rdb
appendonly yes
appendfilename "appendonly6385.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6385.conf
cluster-node-timeout 5000
设置文件:vim /myredis/cluster/redisCluster6386.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6386
logfile "/myredis/cluster/cluster6386.log"
pidfile /myredis/cluster6386.pid
dir /myredis/cluster
dbfilename dump6386.rdb
appendonly yes
appendfilename "appendonly6386.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6386.conf
cluster-node-timeout 5000
4.启动各个节点实例
redis-server /myredis/cluster/redisCluster6381.conf
redis-server /myredis/cluster/redisCluster6382.conf
redis-server /myredis/cluster/redisCluster6383.conf
redis-server /myredis/cluster/redisCluster6384.conf
redis-server /myredis/cluster/redisCluster6385.conf
redis-server /myredis/cluster/redisCluster6386.conf
5.设置主从关系
redis-cli -a 111111 --cluster create --cluster-replicas 1 192.168.111.175:6381 192.168.111.175:6382 192.168.111.172:6383 192.168.111.172:6384 192.168.111.174:6385 192.168.111.174:6386
效果截图
https://i-blog.csdnimg.cn/direct/e9dc33afd2c74e58b07bb1c56d021003.png
检察终极结果
https://i-blog.csdnimg.cn/direct/db0664b8015646a8a1fb01cfb5e6c558.png
6.登录192.168.111.175,利用端口6381登录
https://i-blog.csdnimg.cn/direct/42eeb124c1bc4120a93903784cc2c2fa.png 输入命令 info replication
https://i-blog.csdnimg.cn/direct/eed7573cb794453ba9cab1c8048f50d2.png
输入命令 cluster info
https://i-blog.csdnimg.cn/direct/3695ec29c1ca4fab879f737898df67c2.png
输入命令 cluster nodes
https://i-blog.csdnimg.cn/direct/e612e32eff814a149262949e60944388.png
2.3 redis集群3主3从读写案例
对6381进行读写操作
https://i-blog.csdnimg.cn/direct/fb0bbfbb2a0f430abfc53f266618804c.png
可以看到报错,肯定注意槽位的范围区间,必要路由到位,路由到位,路由到位,路由到位。登录时间,加入参数-c,优化路由,
https://i-blog.csdnimg.cn/direct/d204567e72044196b03acd9562a1c9fe.png
再检察节点信息
https://i-blog.csdnimg.cn/direct/fe7bee2386b742038bfc407205c95c69.png 检察某个key对应的槽位: cluster keyslot key名称
https://i-blog.csdnimg.cn/direct/f96f6143ce5b4958a5a9e8e93a7080dc.png
2.4 redis集群主从容错切换案例
2.4.1 具体实施步调
1.现在检察到6384是6381的从节点,假设将6381删除掉,6384会自动切换成主节点。
https://i-blog.csdnimg.cn/direct/5fbd0e4b747b4321aa320dd6c1327328.png
2.关闭6381节点服务,通过cluster nodes 检察,6384切换到主节点
https://i-blog.csdnimg.cn/direct/1fd4ad119565423eb1a5f0b88b48b090.png
3.登录6384节点检察,info cluster
https://i-blog.csdnimg.cn/direct/729dd908dc054c2891ebf9fbe7c08796.png
4.换一个节点,这里利用6382登录,检察集群状态:
https://i-blog.csdnimg.cn/direct/15be399b80f0434e86935d1237a6134b.png
5.在192.168.111.175机器上重新启动6381服务,可以看到6381启动乐成后变成了从节点。
https://i-blog.csdnimg.cn/direct/06d3e03274cc486191cce2dae1dadb26.png 6.检察6381节点信息;6381是以从节点角色进行回归。
https://i-blog.csdnimg.cn/direct/373bb596e41f495cad206b369e3188ab.png
7,主从调换顺序:将6381和6384调换主从角色。登录6381,执行命令 cluster failover
https://i-blog.csdnimg.cn/direct/7fccaa0a53724a8e816656cb954779a6.png
2.5 redis集群主从扩容案例
2.5.1 具体实施步调
https://i-blog.csdnimg.cn/direct/0b400841e2294a709009817acf78a8c2.png
1.在192.68.111.174机器上新建端口6387,6388两个服务实例
Vim /myredis/cluster/redisCluster6387.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6387
logfile "/myredis/cluster/cluster6387.log"
pidfile /myredis/cluster6387.pid
dir /myredis/cluster
dbfilename dump6387.rdb
appendonly yes
appendfilename "appendonly6387.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6387.conf
cluster-node-timeout 5000
Vim /myredis/cluster/redisCluster6388.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6388
logfile "/myredis/cluster/cluster6388.log"
pidfile /myredis/cluster6388.pid
dir /myredis/cluster
dbfilename dump6388.rdb
appendonly yes
appendfilename "appendonly6388.aof"
requirepass 111111
masterauth 111111
cluster-enabled yes
cluster-config-file nodes-6388.conf
cluster-node-timeout 5000
2.启动6387和6388这两个服务实例节点,此时他们都是master节点
https://i-blog.csdnimg.cn/direct/33fced2ba2d14706a01a1fa816c27e93.png
3.将新增的6387作为master节点加入原有集群:
redis-cli -a 暗码 --cluster add-node 自己现实IP地址:6387 自己现实IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli -a 111111 --cluster add-node 192.168.111.174:6387 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/388f535a27ab41c8ac06af6187955422.png
4.未分配hash槽查抄集群状态前
redis-cli -a 暗码 --cluster check 真实ip地址:6381
redis-cli -a 111111 --cluster check 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/25c10cdd75a441bfa7bc8b9b1793675c.png
5.重新分派槽号
命令:redis-cli -a 暗码 --cluster reshard IP地址:端口号
redis-cli -a 暗码 --cluster reshard 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/11545922c8f240189a93401834bd57b9.png
6.再次检察集群状态:可以看到分配到4096个槽位
redis-cli --cluster check 真实ip地址:6381
redis-cli -a 111111 --cluster check 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/7dec9c6d7a614979a727dc4ba4db8b81.png
表明为何分配的槽位不是连续的:
https://i-blog.csdnimg.cn/direct/8b784d2ce69d41b4a6a8185e6076a340.png 7.为主节点6387分配从节点6388
命令:redis-cli -a 暗码 --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
redis-cli -a 111111 --cluster add-node 192.168.111.174:6388 192.168.111.174:6387 --cluster-slave --cluster-master-id 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f-------这个是6387的编号,按照自己现实情况
https://i-blog.csdnimg.cn/direct/dd83cb6376414ff6b789eaceb4d8e3f0.png
8.再次检察集群状态
redis-cli --cluster check 真实ip地址:6381
redis-cli -a 111111 --cluster check 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/5292388bfdbd42e4b2b685b963792a61.png
2.6 redis集群主从缩容案例
2.6.1 具体实施步调
https://i-blog.csdnimg.cn/direct/04d79078e0a64eefa50637b5988c2d70.png
1.检察6378和6388现在状态
https://i-blog.csdnimg.cn/direct/268f1b6a23ad4d4f9765dbfd07065902.png
2.获取从节点6388的节点id
redis-cli -a 暗码 --cluster check 192.168.111.174:6388
https://i-blog.csdnimg.cn/direct/30fae36ffbad409a9686c8ec9319c0d8.png
3.删除从节点
命令:redis-cli -a 暗码 --cluster del-node ip:从机端口 从机6388节点ID
redis-cli -a 111111 --cluster del-node 192.168.111.174:6388 218e7b8b4f81be54ff173e4776b4f4faaf7c13da
https://i-blog.csdnimg.cn/direct/945f00008f7b44758ab9fb8d40f03a10.png
4.检察节点:在192.168.174节点选择一个端口实例,检察集群状态
redis-cli -a 111111 --cluster check 192.168.111.174:6385, 可以看到6387的slave为0。
https://i-blog.csdnimg.cn/direct/f63cc3e06f2c4cdf97503234f3c3a1d1.png 5.将6387的槽号清空,重新分配,将空出的槽位号分配给6381.
redis-cli -a 111111 --cluster reshard 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/255bdbe36ea74e229b90e038a86a04d1.png
https://i-blog.csdnimg.cn/direct/d3137264b9764dfcbd2e87e992ae3630.png
6.再次检察集群状态
redis-cli -a 111111 --cluster check 192.168.111.175:6381
4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端
https://i-blog.csdnimg.cn/direct/7ce87f4b71d841af8ef58a5c3e87969d.png
7.删除节点实例6387
命令:redis-cli -a 暗码 --cluster del-node ip:端口 6387节点ID
redis-cli -a 111111 --cluster del-node 192.168.111.174:6387 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f
https://i-blog.csdnimg.cn/direct/c5f38d74d30c49a7a3a1cacdbebd7e49.png
8.末了一次 执行检察集群状态
redis-cli -a 111111 --cluster check 192.168.111.175:6381
https://i-blog.csdnimg.cn/direct/1e3b5bd775764bf29b559a7d29f1b613.png
9.检察节点6387是否可以对写: 可以看到已经不可用。
https://i-blog.csdnimg.cn/direct/9b2308620d754d038473556fb37fb478.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]