redis 部署模式

在好多前辈的基础上总结写下此篇,对他人的付出表示感谢!
参考链接:
redis原理及实现
redis主从集群搭建及容灾部署(哨兵sentinel)
redis 架构模式
下载安装地址

部署模式 单机、主从、哨兵、Cluster四种部署模式

  • 1、 单机

启动一个单一的节点即可,但缺乏高可用机制,redis进程若死掉,所有的请求会直逼db,db压力骤增。

  • 2、 主从模式(replication)

增加一个或多个slave,当主redis发生问题时,可以选一个slave顶上去。这和传统的mysql主从一样。
在这里插入图片描述

读压力缓解,未解决写压力

windows
redis-server.exe redis.conf
linux 没测过
./redis-server ./redis.conf
ps axu|grep redis

用redis-cli连接并测试

windows
redis-cli.exe -h 127.0.0.1 -p 6379 -a zhaoxpwd!!
set name zhaox
get name
linux 没测过
 ./redis-cli -a zhaoxpwd!! -p 6379

在这里插入图片描述

  • 2 搭建slave启动slave

slave的配置和master基本一致,只需要修改相应的pidfile,端口,日志文件名,并配置master的地址端口和密码
配置文件redis_slave.conf(和master不同的地方)

# pid file
pidfile /var/run/redis_slave.pid
# 监听端口
port 8003
# 指明日志文件名
logfile "./redis6371.log"
# 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 127.0.0.1 6379
# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth zhaoxpwd!!

启动slave服务并查看日志及数据同步
在这里插入图片描述
在这里插入图片描述

连接slave并进行测试,看到数据已经同步至slave。

windows
redis-server.exe redis_slave1.conf
linux
./redis-server ./redis_slave1.conf
./redis-cli -a zhaoxpwd!! -p 6371
get name 

在这里插入图片描述
查看主从关系
info replication
在这里插入图片描述
主挂掉之后的关系
在这里插入图片描述

  • 3、 哨兵模式

  • 1 搭建sentinel启动 sentinel

-
启动哨兵服务

windows 
redis-server.exe .\sentinel1\sentinel1.conf --sentinel
redis-server.exe .\sentinel2\sentinel2.conf --sentinel
redis-server.exe .\sentinel3\sentinel3.conf --sentinel

在这里插入图片描述
在这里插入图片描述
将主6379的master服务停掉之后 测试结果如下,哨兵已自动进行切换。
在这里插入图片描述
查看slaves信息
sentinel slaves redismaster
在这里插入图片描述
sentinel masters
发现slave变为master
在这里插入图片描述

  • 2 sentinel的用途

  1. 监控:监控主从是否同步
  2. 通知:出现问题时,可以通知相关人员
  3. 故障迁移:自动主从切换
  4. 统一的配置管理:连接者询问sentinel取得主从的地址
  • 3 sentinel使用raft算法核心原则

  1. 所有sentinel都有选举的领头羊的权利
  2. 每个sentinel都会要求其他sentinel选举自己为领头羊(主要由发现redis客观下线的sentinel先发起选举)
  3. 每个sentinel只有一次选举的机会
  4. 采用先到先得的原则
  5. 一旦加入到系统了,则不会自动清除(这一点很重要, why?)
  6. 每个sentinel都有唯一的uid,不会因为重启而变更
  7. 达到领头羊的条件是 N/2 + 1个sentinel选择了自己
  8. 采用配置纪元,如果一次选举出现脑裂,则配置纪元会递增,进入下一次选举,所有sentinel都会处于统一配置纪元,以最新的为标准。
    在这里插入图片描述
    理论上使用额外的进程来替换keepalived的功能,对redis进程的存活性进行判断。在哨兵模式下,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。
    最大问题: 哨兵数量太多,至少需要3个节点。
    在对redis进行仲裁的时候,需要n/2+1个节点投票才能确认,这也是分布式系统的一般做法(quorum),和zookeeper类似,哨兵节点可以做成奇数个,非常合适。
    哨兵模式可以通过sentinel monitor配置同时检测多套集群,在集群数量适中的时候,比较好用。
    缺点:
    哨兵的启动,必须在master存活的情况下才能正常运行;另外,如果你的redis配置文件中使用rename屏蔽了一些危险命令时,哨兵也不能启动。客户端在连接redis时,就不能再直接连redis的实例,它需要从哨兵转上一圈,以便获取一些变更信息。
  • 4 哨兵模式redis主挂了怎么操作?

  • 哨兵模式当主挂了,可以选举其他的进行代替,哨兵模式的实现原理就是三个定时任务监控。
  • 1 每隔10s,每个S节点(哨兵节点)会向主节点和从节点发送info命令获取最新的拓扑结构。
  • 2 每隔2s,每个S节点会向某频道上发送该S节点对于主节点的判断以及当前Sl节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他S节点以及它们对主节点的判断(做客观下线依据)。
  • 3 每隔1s,每个S节点会向主节点、从节点、其余S节点发送一条ping命令做一次心跳检测(心跳检测机制),来确认这些节点当前是否可达。当三次心跳检测之后,就会进行投票,当超过半数以上的时候就会将该节点当做主
  • 4、集群

在这里插入图片描述

  • 可在多台机器上,部署多个redis实例,每个实例存储一部分数据,同时每个redis主实例可以挂redis从实例,自动确保如果redis主实例挂了,会自动切换到redis从实例上来。如果数据量少,主要是承载高并发高性能的场景,单机就够了,一个master多个slaves,自已弄个sentinel集群去保证redis主从架构的高可用性。
  • redis cluster
    自动将数据进行分片,每个master上放一部分数据。提供内置的高可用支持,部分master不可用时,还是可以继续工作的。redis cluster架构下,每个redis要开放两个端口号,6379另一个加1w就是16379。
    16379端口是用来进行节点通信的,也就是cluster bus的东西,cluster bus用来进行故障检测、配置更新、故障转移授权。采用gossip协议,用于节点间的高效数据交换,占用更少的网络带宽和处理时间。
  • redis集群内节点通过ping/pong消息实现节点通信,消息不但可以传播节点槽信息,还可以传播其他状态,
    如:主从状态、节点故障等。因此故障发现也是通过消息传播机制实现的,主要环节包括:主观下线(sfail)和客观下线(ofail)。
    主观下线:集群中每个节点都会定期向其它节点发送ping消息,接收节点回复pong消息作为响应。如果通信一直失败,则发送节点会把接收节点标记为主观下线(pfail)状态。
    客观下线:超过半数、对该节点做客观下线。主节点选举出某一主节点作为领导者,来进行故障转移。
    故障转移(选举从节点作为新主节点)。
  • 搭建流程

linux搭建集群流程 windows下搭建有些问题,现在的redis新版本在windows下用不了。linux下环境弄好了再测
# 是否安装 gcc
gcc-v 
# 安装gcc
yum install gcc-c++
wget wget http://download.redis.io/releases/redis-3.0.0.tar.gz
tar xzf redis-3.0.3.tar.gz
cd redis-3.0.0
make
# it's a good idea to run 'make test' 编译成功
make install PREFIX=/usr/local/redis
# 发现多了redis目录
ll usr/local 
cd /usr/local/redis/bin 
ls 
./redis-server redis.conf

# 建立集群
mkdir redis-cluster
# 需要复制到6个目录中redis01 redis02 redis03 redis04 redis05 redis06 
# 对应端口号7001-7006
cp -r redis/bin redis-cluster/redis01
rm -rf dump.rdb
# 修改端口 默认6379
port 7001 
cluster-enabled yes

# 批处理文件
start-allredis.sh 
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
# 修改脚本权限 
chmod +X start-allredis.sh 
ll 
./start-allredis.sh 
准备工作完毕!!
# 1、搭建集群需要脚本工具的运行环境
yum install ruby 
gem install redis-3.0.0.gem 
# cp脚本到redis-cluster
cd redis/src
cp redis-trib.rb /usr/local/redis-cluster
# 使用ruby脚本搭建集群
./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
# 2、另外一种创建集群的方式
redis-cli --cluster create 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 127.0.0.1:7006
ps -aux|grep redis 
# 连接测试 一定要加-c,不然节点之间无法自动跳转的。存储的key-value是均匀分配到不同的节点的
./redis-cli -p 7001 -c 
set key1 value1 
set key2 value2 

# 查看当前集群信息
cluster info 
# 查看集群中有多少节点
cluster nodes 
  • 5、缓存击穿

  • 定义
    在请求数据的时候,很多数据在缓存中查询不到,直接进行db查询。
  • 解决办法
    对相关数据进行查询的时候只查询缓存,如果是一些特殊的可以进行db查询。也可以加入布隆过滤器进行查询。
  • 6、缓存雪崩

  • 定义
    一次性加入缓存的数据过多,导致内存过高,从而影响内存的使用导致服务宕机。
  • 解决办法
  • 1、redis集群,通过集群方式数据将数据放置。
  • 2、后端服务降级和限流,当一个接口请求次数过多,那么就会添加过多数据,可以对服务进行限流,限制访问数量,这样就可以减少问题的出现。
一些命令保存下方便下次用
redis-server.exe redis.conf
redis-cli.exe -h 127.0.0.1 -p 26371 -a zhaoxpwd!!
redis-cli.exe -h 127.0.0.1 -p 26372 -a zhaoxpwd!!

redis-cli.exe -h 127.0.0.1 -p 6379 -a zhaoxpwd!!
redis-cli.exe -h 127.0.0.1 -p 6371 -a zhaoxpwd!!
redis-cli.exe -h 127.0.0.1 -p 6372 -a zhaoxpwd!!

info replication
sentinel masters
sentinel slaves redismaster
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值