前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis高可用-Cluster

Redis高可用-Cluster

作者头像
数据库架构之美
发布2021-03-16 10:56:07
3860
发布2021-03-16 10:56:07
举报

Redis有三种高可用方案:主从,哨兵(sentinel),集群(cluster)。哨兵和集群模式都是基于redis主从来实现的,普通的redis主从无法实现自动的高可用切换。

哨兵模式是在redis主从节点外围部署哨兵集群,哨兵集群是一类特殊的redis,是基于quorum协议的监控集群,至少需要三个节点,哨兵集群会对redis主从节点状态进行监控,如果设定值个数(一般使用多数派)的哨兵监控到主节点的失败,会协商进行主从切换。一套哨兵集群可以监控多套redis主从,具体配置步骤不再赘述。

集群模式也称为redis cluster,redis cluster是一个多节点分布式缓存,架构与分布式数据库有些类似,redis key的crc16值被hash到16384个slot中,所以每个节点存储一部分redis数据,所有节点组成完整的redis集群。客户端可以对每个redis节点进行读写,但是同一时刻只能操作一个key。

redis集群的优势在于可以快速的实现扩缩容,可以在线的新增和删除节点。另外不同于sentinel模式,redis cluster中所有服务器都可以看做主节点,都可以进行读写,所有服务器的资源得到了利用。在高可用方案,每个redis主节点在另外的服务器上都会有一到多个备份的副本,并且基于多数派实现了主节点失败时的自动切换,可以容纳集群少数节点同时失败。

下面以两台机器为例简单看下redis cluster的搭建步骤

两台机器分别创建redis目录:

代码语言:javascript
复制
[root@db1 ~]# mkdir /redis-cluster/7001
[root@db1 ~]# mkdir /redis-cluster/7002
[root@db1 ~]# mkdir /redis-cluster/7003
[root@db2 ~]# mkdir /redis-cluster/7004
[root@db2 ~]# mkdir /redis-cluster/7005
[root@db2 ~]# mkdir /redis-cluster/7006

将编译好的redis二进制包(编译过程略,默认redis源码包里也有编译好的二进制文件)拷贝到7001目录中,一般我习惯使用的目录结构如下

redis-cluster/

└── 7001

├── bin

├── data

├── etc

└── log

编辑配置文件

代码语言:javascript
复制
vi /redis-cluster/7001/etc/redis.conf
bind 0.0.0.0
port 7001
pidfile /var/run/redis_7001.pid
loglevel notice
logfile "/redis-cluster/7001/log/redis_7001.log"
dir /redis-cluster/7001/data
cluster-config-file /redis-cluster/nodes-7001.conf
daemonize yes
supervised no
appendonly yes
cluster-enabled yes
cluster-node-timeout 5000
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
appendfilename "appendonly.aof"
appendfsync everysec

按照一样的步骤拷贝配置其他五个节点,然后启动六个redis节点,可以放在脚本中

代码语言:javascript
复制
[root@db1 ~]# /redis/redis-cluster/7001/bin/redis-server /redis/redis-cluster/7001/etc/redis.conf
[root@db1 ~]# /redis/redis-cluster/7002/bin/redis-server /redis/redis-cluster/7002/etc/redis.conf
[root@db1 ~]# /redis/redis-cluster/7003/bin/redis-server /redis/redis-cluster/7003/etc/redis.conf
[root@db2 ~]# /redis/redis-cluster/7004/bin/redis-server /redis/redis-cluster/7004/etc/redis.conf
[root@db2 ~]# /redis/redis-cluster/7005/bin/redis-server /redis/redis-cluster/7005/etc/redis.conf
[root@db2 ~]# /redis/redis-cluster/7006/bin/redis-server /redis/redis-cluster/7006/etc/redis.conf

执行命令进行集群创建

代码语言:javascript
复制
[root@db1 ~]# redis-cli --cluster create  192.168.1.1:7001 192.168.1.1:7002 192.168.1.1:7003 192.168.1.2:7004 192.168.1.2:7005 192.168.1.2:7006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.2:7006 to 192.168.1.1:7001
Adding replica 192.168.1.1:7003 to 192.168.1.2:7004
Adding replica 192.168.1.2:7005 to 192.168.1.1:7002
M: 5fca048d05b26211e5ccb8b932b6327d31773822 192.168.1.1:7001
   slots:[0-5460] (5461 slots) master
M: 4f98b53609307f11674b60bd84caecce3ff8d18e 192.168.1.1:7002
   slots:[10923-16383] (5461 slots) master
S: fddf4c97eeb6f59d0de9e45cb0899b309e90d537 192.168.1.1:7003
   replicates 84e20fd036d2b1c37d0071a632b08138490f0173
M: 84e20fd036d2b1c37d0071a632b08138490f0173 192.168.1.2:7004
   slots:[5461-10922] (5462 slots) master
S: 9769e3b34a0bdee505bba06a8dc924928917671b 192.168.1.2:7005
   replicates 4f98b53609307f11674b60bd84caecce3ff8d18e
S: 9c6d002711965fbcbc945fa6ba99ab18b4c04810 192.168.1.2:7006
   replicates 5fca048d05b26211e5ccb8b932b6327d31773822
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 192.168.1.1:7001)
M: 5fca048d05b26211e5ccb8b932b6327d31773822 192.168.1.1:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 84e20fd036d2b1c37d0071a632b08138490f0173 192.168.1.2:7004
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: fddf4c97eeb6f59d0de9e45cb0899b309e90d537 192.168.1.1:7003
   slots: (0 slots) slave
   replicates 84e20fd036d2b1c37d0071a632b08138490f0173
S: 9769e3b34a0bdee505bba06a8dc924928917671b 192.168.1.2:7005
   slots: (0 slots) slave
   replicates 4f98b53609307f11674b60bd84caecce3ff8d18e
M: 4f98b53609307f11674b60bd84caecce3ff8d18e 192.168.1.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 9c6d002711965fbcbc945fa6ba99ab18b4c04810 192.168.1.2:7006
   slots: (0 slots) slave
   replicates 5fca048d05b26211e5ccb8b932b6327d31773822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

集群相关检查命令

代码语言:javascript
复制
[root@db1 redis-cluster]# redis-cli -p 7001 cluster info
[root@db1 redis-cluster]# redis-cli -p 7001 cluster nodes
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库架构 微信公众号,前往查看

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

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

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