Redis-Cluster集群搭建

Redis集群数据分区方案

当一台redis存储数据量不够时,可以让多台Redis来存储数据,每一台只负责存储一部分数据
1.客户端分区
客户端分区方案的代表为Redis Sharding. Redis Sharding是Redis Cluster出来之前,业·界普遍使用的Redis多实例集群方法。Java的Redis客户端驱动库Jedis,支持RecedisSharding功能,即Shardedledis以及结合缓存池的ShardedJedisPool
在这里插入图片描述

  • 优点:不使用第三方中间件,分区逻辑可控,配置简单,节点之间无关联,容易线性扩展,灵活性强。
  • 缺点客户端无法动态增删服务节点,客户端需要自行维护分发逻辑,客户端之间无连接共享,会造成连接浪费。

2.代理分区
代理分区常用房还是有Twemproxy和Codis
在这里插入图片描述
3.Redis-Cluster
高可用方式

  1. Sentinel (哨兵机制)支持高可用
    前面介绍了主从机制,但是从运维角度来看,主节点出现了问题我们还需要通过人工干预的方式把从节点设为主节点,还要通知应用程序更新主节点地址,这种方式非常繁琐笨重,而且主节点的读写能力都十分有限,有没有较好的办法解决这两个问题,哨兵机制就是针对第,一个问题的有效解决方案,第二个问题则有赖于集群!哨兵的作用就是监控Redis系统的运行状况,其功能主要是包括以下三个
  • 监控(Monitoring)哨兵(sentinel)会不断地检查你的Master和Slave是否运作正常。
  • 提醒(Notification)当被监控的某个Redis.出现问题时,
  • 哨兵(sentinel)可以通过API向管理员或者其他应用程序发送通知。自动故障迁移(Automatic failover): 当主数据库出现故障时自动将从数据库转换为主数据库。

Redis的官方多机部署方案, Redis Clster,一组Redis Cluster是由多个Redis实例组成,官方推荐我们使用6实例,其中3个为主节点, 3个为从结点。一旦有主节点发生故障的时候,Redis Cluster可以选举出对应的从结点成为新的主节点,继续对外服务,从而保证服务的高可用性。那么对于客户端来说,知道知道对应的key是要路由到哪一个节点呢? Redis Cluster把所有的数据划分为16384个不同的槽位,可以根据机器的性能把不同的槽位分配给不同的Redis实例,对于Redis.实例来说,他们只会存储部分的Redis数据,当然,槽的数据是可以迁移的,不同的实例之间,可以通过一定的协议,进行数据迁移。

Redis-Cluster集群架构
在这里插入图片描述

Redis-Cluster集群架构

1.docker拉取镜像

docker pull redis

2.创建对应外部挂载目录
在这里插入图片描述

3.创建配置文件

port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000 
cluster-announce-ip 192.168.0.177
cluster-announce-port 7001 
cluster-announce-bus-port 17001 
appendonly yes

其他节点的只需要修改端口和ip

4.启动

docker run -p 7001:7001 -p 17001:17001  --name redis-7001 \
	-v /home/redis/node-7001 /data:/data \
	-v /home/redis/node-7001 /conf/redis.conf:/etc/redis/redis.conf \
	-d redis redis-server /etc/redis/redis.conf;

脚本启动

for port in $(seq 7001 7006); \
do \
mkdir -p /home/redis/node-${port}/conf
touch /home/redis/node-${port}/conf/redis.conf 
cat << EOF >/home/redis/node-${port}/conf/redis.conf
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000 
cluster-announce-ip 192.168.0.177
cluster-announce-port ${port} 
cluster-announce-bus-port 1${port} 
appendonly yes
EOF
docker run -p ${port}:${port} -p 1${port}:1${port}  --name redis-${port} \
	-v /home/redis/node-${port}/data:/data \
	-v /home/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
	-d redis redis-server /etc/redis/redis.conf; \
done

注意:Redis-Cluster集群节点连接时不能设置密码参数,所以在启动redis的时候也不能设置密码,后续可以在启动后设置

5.进入容器

docker exec -it redis-7001 bash

6.建立集群

redis-cli  --cluster create 192.168.0.177:7001 192.168.0.177:7002 192.168.0.177:7003 192.168.0.177:7004 192.168.0.177:7005 192.168.0.177:7006 --cluster-replicas 1
#随机挑取任意节点作为主节点
#--cluster-replicas 1代表每个主节点必须有有一个副本节点也就是从节点,

在这里插入图片描述
这里集群建立好了,对应关系如下
7001-7005、7003-7004、7002-7006

7.查看集群状态

查看集群状态
cluster info
查看节点状态
cluster nodes

8.进入redis-cli

进入单节点
redis-cli -h 192.168.0.177 -p 7001

进入集群模式
redis-cli -c -h 192.168.0.177 -p 7001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员劝退师-TAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值