Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Redis 常用架构及其特点

[1]单机架构
内存容量有限 2、处理能力有限 3、无法高可用
[2]主从复制架构
无法保证高可用
没有解决 master 写的压力
[3]哨兵+主从架构
哨兵:是一个分布式系统中监控 redis 主从服务器并在主服务器下线时自动进行故障转移。(监控主从状态,2.当被监控的服务器出现故障时,进行消息发送3.服务器不正常时,自动故障迁移。)
特点是:保证了高可用,监控各个点,自动故障迁移。缺点没有解决master的压力。
[4]twemproxy(开源redis或memcache代理程序)+哨兵主从架构
1.支持多种算法的负载
2、支持失败节点自动删除
3、后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致
缺点:增加了新的 proxy,需要维护其高可用。
[5]redis自动的cluster直连型集群架构
从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接
1、无中心架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。
2、数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
3、可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。
4、高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本
5、实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master 的角色提升。
缺点:
1、资源隔离性较差,容易出现相互影响的情况。
2、数据通过异步复制,不保证数据的强一致性

[1].redis主从+Sentinel实现主从的高可用。【缺点不能解决master的压力】

主从同步:
Slave服务启动,主动连接Master,并发送SYNC命令,请求初始化同步
Master收到SYNC后,执行BGSAVE命令生成RDB文件,并缓存该时间段内的写命令
Master完成RDB文件后,将其发送给所有Slave服务器,
Slave服务器接收到RDB文件后,删除内存中旧的缓存数据,并装载RDB文件
Master在发送完RDB后,即刻向所有Slave服务器发送缓存中的写命令
至此初始化完成,后续进行增量同步
哨兵高可用:
https://blog.csdn.net/woxingwosu0100/article/details/78466066

部署说明:

redis服务器:
master:127.0.0.1:6379
slave1:127.0.0.1:6389
slave2:127.0.0.1:6399
Sentinel服务器
sentinel01:127.0.0.1:2637
sentinel02:127.0.0.1:26389
sentinel03:127.0.0.1:26399

开始部署

mkdir -p /app/redis/redis_cluster/redis-master/{install,conf,data,log}
mkdir -p /app/redis/redis_cluster/redis-salve{1,2}
mkdir -p /app/redis/redis_cluster/redis-sentinel{1,2}
cd /app/redis/redis_cluster/redis-master/install/
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -xvzf redis-5.0.3.tar.gz && cd redis-5.0.3 make && make install PREFIX=/app/redis/redis_cluster/redis-master/
cp -a /app/redis/redis_cluster/redis-master /app/redis/redis_cluster/redis-salve1 &&
cp -a /app/redis/redis_cluster/redis-master /app/redis/redis_cluster/redis-salve2 &&
cp -a /app/redis/redis_cluster/redis-master /app/redis/redis_cluster/redis-sentinel1 &&
cp -a /app/redis/redis_cluster/redis-master /app/redis/redis_cluster/redis-sentinel2 &&
cp -a /app/redis/redis_cluster/redis-master /app/redis/redis_cluster/redis-sentinel3

master配置

cat >/app/redis/redis_cluster/redis-master/conf/redis-master.conf< 
   

slave1配置如下

cat >/app/redis/redis_cluster/redis-salve1/conf/redis-slave1.conf< 
   

slave2配置如下

cat >/app/redis/redis_cluster/redis-salve2/conf/redis-slave2.conf< 
   

redis-sentinel1配置

cat >/app/redis/redis_cluster/redis-sentinel1/conf/redis-sentinel1.conf< 
   

redis-sentinel2配置

cat >/app/redis/redis_cluster/redis-sentinel2/conf/redis-sentinel2.conf< 
   

redis-sentinel3配置

cat >/app/redis/redis_cluster/redis-sentinel3/conf/redis-sentinel3.conf< 
   

启动redis-master,slave1-3,sentinel1-3

/app/redis/redis_cluster/redis-master/bin/redis-server /app/redis/redis_cluster/redis-master/conf/redis-master.conf
/app/redis/redis_cluster/redis-salve1/bin/redis-server /app/redis/redis_cluster/redis-salve1/conf/redis-slave1.conf
/app/redis/redis_cluster/redis-salve2/bin/redis-server /app/redis/redis_cluster/redis-salve2/conf/redis-slave2.conf
/app/redis/redis_cluster/redis-sentinel1/bin/redis-sentinel /app/redis/redis_cluster/redis-sentinel1/conf/redis-sentinel1.conf
/app/redis/redis_cluster/redis-sentinel2/bin/redis-sentinel /app/redis/redis_cluster/redis-sentinel2/conf/redis-sentinel2.conf
/app/redis/redis_cluster/redis-sentinel3/bin/redis-sentinel /app/redis/redis_cluster/redis-sentinel3/conf/redis-sentinel3.conf

进入master查看:redis-cli -h127.0.0.1 -p6379

role:master 自己为master
分别有两个从:slave0,slave1

Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用_第1张图片

 

进入slave1查看:redis-cli -h127.0.0.1 -p6389

role:slave自己是从
主的ip:127.0.0.1端口6379

Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用_第2张图片

进入sentinel节点查看:redis-cli -h 127.0.0.1 -p 26379

主的ip端口为:127.0.0.1:6379 分别有两个从和3个哨兵sentinel

Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用_第3张图片

测试主从切换:停掉主master

[root@h redis_cluster]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> shutdown
查看哨兵sentinel此时主已经变成6389

Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用_第4张图片

查看从:6389

此时自己是从slave变为了master
connected_slaveds:1目前正常连接的从只有1个端口为6399

Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用_第5张图片

添加添加数据测试主从同步

127.0.0.1:6389> set name "wyl"
OK
127.0.0.1:6389> exit
重启主:此时发现之前的6379已经变为从,查看数据已经同步成功

 

Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用_第6张图片

再次查看redis-slave2

[root@h redis_cluster]#  redis-cli -h 127.0.0.1 -p 6389 info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6399,state=online,offset=1433716,lag=0
slave1:ip=127.0.0.1,port=6379,state=online,offset=1433716,lag=1
master_replid:8a7895f2efd0f2c5c437032263ef71d3491f9015
master_replid2:85f869f0df4fa27eb22a1323445832df92128ead
master_repl_offset:1433716
second_repl_offset:1415058
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:385141
repl_backlog_histlen:1048576
#正常连接的从为2个自己为主

 

 

 

转载于:https://my.oschina.net/wangyunlong/blog/3030679

你可能感兴趣的:(Redis-5.0.3-[2]-主从之-Sentinel(哨兵)高可用)