Redis实现消息队列与分布式数据库集群搭建

1. 目的

掌握Redis集群搭建的原理和方法。能够采用Redis-Cluster方式对分布式数据库集群的搭建与配置。

2.实验原理

Redis有三种集群方式:主从复制,哨兵模式和cluster集群
(1)主从复制
实现读写分离,主机主要负责写,但主机也可读;从机只能读。实现读请求的负载均衡。
(2)哨兵模式
添加哨兵节点与主机保持心跳连接,在主机宕机后,从多个从机中选出一个更好的从机作为新的主机,解决单点失效的问题。
(3)Redis-Cluster集群
融合了主从复制模式,集群中的单个节点本质就是一个主从复制模式。集群中每个节点互联形成一个无中心化集群的结构。既保证了数据安全性和可用性,又对数据库实现了横向扩展。

3.实验任务

Redis集群至少需要6个节点,3个主节点,3个从节点。这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,通过修改端口号的方式启动多个redis服务,当然实际生产环境的Redis集群搭建和这里是一样的。

3.1 任务1:集群环境搭建

(1)先创建目录结构

mkdir -p /usr/local/src/redis-7.2.4/6999/data
mkdir -p /usr/local/src/redis-7.2.4/7001/data
mkdir -p /usr/local/src/redis-7.2.4/7002/data
mkdir -p /usr/local/src/redis-7.2.4/7003/data
mkdir -p /usr/local/src/redis-7.2.4/7004/data
mkdir -p /usr/local/src/redis-7.2.4/7005/data

(2)复制配置文件

cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/src/redis-7.2.4/6999/redis.conf
cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/src/redis-7.2.4/7001/redis.conf
cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/src/redis-7.2.4/7002/redis.conf
cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/src/redis-7.2.4/7003/redis.conf
cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/src/redis-7.2.4/7004/redis.conf
cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/src/redis-7.2.4/7005/redis.conf

(3)分别启动并修改每个 redis.conf:

vim /usr/local/src/redis-7.2.4/6999/redis.conf
vim /usr/local/src/redis-7.2.4/7001/redis.conf
vim /usr/local/src/redis-7.2.4/7002/redis.conf
vim /usr/local/src/redis-7.2.4/7003/redis.conf
vim /usr/local/src/redis-7.2.4/7004/redis.conf
vim /usr/local/src/redis-7.2.4/7005/redis.conf

📌 1. redis.conf for 6999

port 6999
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/src/redis-7.2.4/6999/data
logfile "/usr/local/src/redis-7.2.4/6999/redis.log"
bind 127.0.0.1
protected-mode no

📌 2. redis.conf for 7001

port 7001
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/src/redis-7.2.4/7001/data
logfile "/usr/local/src/redis-7.2.4/7001/redis.log"
bind 127.0.0.1
protected-mode no

📌 3. redis.conf for 7002

port 7002
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/src/redis-7.2.4/7002/data
logfile "/usr/local/src/redis-7.2.4/7002/redis.log"
bind 127.0.0.1
protected-mode no

📌 4. redis.conf for 7003

port 7003
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/src/redis-7.2.4/7003/data
logfile "/usr/local/src/redis-7.2.4/7003/redis.log"
bind 127.0.0.1
protected-mode no

📌 5. redis.conf for 7004

port 7004
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/src/redis-7.2.4/7004/data
logfile "/usr/local/src/redis-7.2.4/7004/redis.log"
bind 127.0.0.1
protected-mode no

📌 6. redis.conf for 7005

port 7005
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/src/redis-7.2.4/7005/data
logfile "/usr/local/src/redis-7.2.4/7005/redis.log"
bind 127.0.0.1
protected-mode no

(4)启动实例

redis-server /usr/local/src/redis-7.2.4/6999/redis.conf
redis-server /usr/local/src/redis-7.2.4/7001/redis.conf
redis-server /usr/local/src/redis-7.2.4/7002/redis.conf
redis-server /usr/local/src/redis-7.2.4/7003/redis.conf
redis-server /usr/local/src/redis-7.2.4/7004/redis.conf
redis-server /usr/local/src/redis-7.2.4/7005/redis.conf

(5)创建集群

redis-cli --cluster create \
127.0.0.1:6999 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

在这里插入图片描述
注:我的7000端口被占用了,我的图使用的是6999端口。

输入 yes 完成集群配置。
在这里插入图片描述

(6)测试

redis-cli -c -p 6999 set testkey "hello"
redis-cli -c -p 6999 get testkey

3.2 任务2:测试集群的读写分离

登录主节点进行写数据操作,登录从节点,查询数据,是否能查询主节点的数据,如果有就实现主从节点的读写分离。登陆从节点测试是否可以写数据。
Redis Cluster 中主从的基本读写行为
✅ 写操作只能在主节点执行;
✅ 默认情况下,读操作也会被主节点处理;
❌ 从节点不能写数据;
❌ 从节点默认不会自动响应读请求,除非启用 readonly 模式

(1)查看主从关系

redis-cli -c -p 6999 cluster nodes

在这里插入图片描述

节点地址节点ID(简略)类型主节点ID(如是slave)Slot 负责区间
127.0.0.1:6999a8ece3…✅ 主节点-0–5460
127.0.0.1:70012daab5…✅ 主节点-5461–10922
127.0.0.1:700285e4b9…✅ 主节点-10923–16383
127.0.0.1:7003e9551b…🔁 从节点主:7001 → 2daab5...(无)
127.0.0.1:70043e9eb2…🔁 从节点主:7002 → 85e4b9...(无)
127.0.0.1:70054229ae…🔁 从节点主:6999 → a8ece3...(无)

(2)在主节点写入数据

redis-cli -c -p 6999

连接后写入数据

 set user:1 walter

写入结果如下:
在这里插入图片描述
(3)在从节点读取数据(默认会被 MOVED 拒绝,进行跳转)
在这里插入图片描述
重定位到了主节点
(4)从节点默认不会自动响应读请求,除非启用 readonly 模式
在这里插入图片描述
使用了,就可以响应读的请求

3.3 任务3:测试集群的自动备份与容灾

登录主节点进行数据写入,然后登录其他任何从节点,查看存放在主节点数据是否存在,如果存在则实现自动容灾备份。
(1)连接主节点

redis-cli -c -p 6999

写入数据

set backup:test "disaster-proof"

获取槽号
在这里插入图片描述
(2)找出这个 key 所属主节点及其从节点

redis-cli -p 6999 cluster nodes

在这里插入图片描述
根据节点关系,可得7005为6999的从节点。
(3)模拟主节点宕机 + 验证容灾
杀死主节点进程
在这里插入图片描述
登录从节点验证
在这里插入图片描述
自此备份容灾验证完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值