前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis集群-Redis(六)

redis集群-Redis(六)

作者头像
用户9919783
发布2023-09-05 14:27:33
1560
发布2023-09-05 14:27:33
举报

上篇文章介绍了哨兵架构以及集群搭建。

哨兵架构&redisCluster-Redis(五)

一、redisCluster

接着上篇文章继续讲解,前面一个linux服务器已经有了8001和8004节点,现在继续新增两个linux服务器,并且分别加上两个节点。

安装redis

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

tar -zvxf redis-5.0.7.tar.gz

# 进入redis文件

make

make install

# 改为守护线程方式启动

daemonize yes

安装集群

另两台分别建立8002,8005,8003,8006的redis

port 8002

dir /home/keying/Desktop/redis-5.0.7/redis-cluster/8002/

#集群启动命令

cluster-enabled yes

cluster-config-file node-8002.conf

cluster-node-timeout 5000

# bind 127.0.0.1

# 关闭保护模式

protected-mode no

appendonly yes

(配置如上,记得分别改成自己的端口号)

可以用帮助命令:redis-cli --cluster help

这时候我们搭建了6个redis,需要查看cluster指令帮助文档,如何建立集群。

命令:

src/redis-cli --cluster create --cluster-replicas 1 192.168.81.128:8001 192.168.81.129:8002 192.168.81.130:8003 192.168.81.128:8004 192.168.81.129:8005 192.168.81.130:8006

有密码的话加上:

src/redis-cli --cluster -a keying create --cluster-replicas 1 192.168.81.128:8001 192.168.81.129:8002 192.168.81.130:8003 192.168.81.128:8004 192.168.81.129:8005 192.168.81.130:8006

当出现上面绿色字体就代表集群搭建成功。

通过命令进入8001redis:

src/redis-cli -c -h 192.168.81.128 -p 8001

用cluster info 和 cluster nodes查看集群信息

可以看到有三个master和三个slave

所以cluster_size是3,cluster_knows_nodes是6

(由上可以看出来,正常前面的会是主结点)

为了防止机器损坏,主从结点都是在不同的机器,这就是错峰链接。

这些集群信息都会写入config文件,为什么呢?

如果整个集群都关闭,下次启动集群则是按配置文件里的主从关系来重启。

执行set:

192.168.81.128:8001> set keying 1

-> Redirected to slot [9901] located at 192.168.81.128:8002

OK

192.168.81.128:8002>

这个行为叫做“跳转重定位”:

我们可以看到redis集群通过取模获取到槽位9901,9901是在8002端口的redis。

所以set完之后,直接从8001跳转到8002

槽位的获取:HASH_SLOT=CRC16(key)mod 16384

重新选举:

当我们把某个主节点停机,他的从结点是会重新选举成主节点的,大家可以自己试试。

RedisCluster由多个主从分布式集群,高可用,分片,复制特征。这种可以水平扩展,官方推荐不超过1000个从结点。

Cluster-node-timeout:

5s超时时间,这个不能设置太小,太小的话,直接选举新的master,导致多个master,防止网络抖动连接异常而导致问题。

集群脑裂问题

Redis集群过半机制会有脑裂问题,导致多个master对外提供服务,一旦网络分区恢复正常,会有大量数据丢失。可以加上redis配置:

# 写数据最少同步slave数量

min-slave-to-write 1

注意:这个配置会影响集群可用性,当slave要是少于1,就算集群leader正常也不能提供服务。

(这个尽量少用,根据场景来,作为缓存,少量丢失数据并没有影响,但是如果slave宕机而导致不可以才是不允许的)

小集群挂了如何还能对外服务?

cluster-require-full-converage no

如果配置yes,挂了一个则不可以服务

Redis批量操作

要注意key前缀保持一致,保证落在同一个槽位。

mset {user1}:1:name keying {user1}:1:age 18

这样的话算哈希值就只用user1,防止keying和age落在不同的槽位,如果落在不同槽位,其中一个槽位宕机,则set失败。

如何新增集群node呢?

Src/redis-cli --cluster add-node 192.168.0.0:8007 192.168.0.0:8001

后面8001代表存活的任意节点都可以,前面8007代表新增的节点。

这时候gossip会发送meet请求,把8007加入集群。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档