redis主从+sentinel故障转移部署

redis的认识

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis集群原理:
redis集群好处: 容错,可解决单节点redis问题;可扩展性,多节点部署;性能提升。
1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2)节点的fail是通过集群中超过半数节点检测失效才生效。
3)客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个节点即可。
4)redis-cluster把所有的物理节点映射到[0-16383]个槽slot上,cluster负责维护node<->slot<->value Redis cluster中内置了16384个哈希槽,当需要在redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样就保证每个key都会对应到0-16383之间的哈希槽,redis会根据节点的数量大致均等的将哈希槽映射到不同的节点。



redis主从复制+sentinel故障转移

环境:
OS:centos
redis版本:Redis3.0以上
节点:
master 192.168.10.78 (redis+sentinel)
slave01 192.168.10.80 (redis+sentinel)
slave01 192.168.10.81 (redis+sentinel)

1.redis安装
yum install -y make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl

192.168.10.78主

cd/usr/local/redis-3.0.7/redis-master/
make
make install
make test(test可不操作)

192.168.10.80和192.168.10.80同理。

2.redis配置
以主机192.168.10.78主为例。

  echo vm.overcommit_memory=1 >> /etc/sysctl.conf
  sysctl vm.overcommit_memory=1   

其中, "0:表示内核将检查是否有足够的可用内存供应用进程使用,1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何"。

vim /usr/local/redis-3.0.7/redis-master/src/redis.conf
修改如下几行

    daemonize yes    //后台运行
    port 6379
    logfile "/var/log/redis.log"
    tcp-backlog 65535   # 提高tcp backlog的数量
    maxclients 20000    #此值不可设置的过大,以为每个socket连接会以“文件描述符”方式被系统打开,
                                       所以受Linux系统“文件描述符”限制。如果超过系统设置,server会拒绝连接。
    maxmemory 6gb    #最好是物理内存的3/4,与maxmemory-policy配合使用
    maxmemory-policy allkeys-lru    # Redis内存回收策略,内存不足时,数据清除策略。
                                                          lru = last recent updated,建议采用allkeys-lru内存回收策略。
    maxmemory-samples 3       #内存回收策略lru和ttl策略并非严禁策略,采用估算方式,
                                                   因此选择取样方式以便检查。选择3个key,从中淘汰不经常用的。
    slave-serve-stale-data yes   # 让Redis slave可以回复客户请求,及时它没有被完全同步(sync)。即如果当前server为slave,
                                                     当 slave 与 master 失去通讯,是否继续为客户提供服务。
    slave-read-only yes    # 禁止Slave有被不小心直接写入的可能,salve为只读方式。
   #关闭Redis往磁盘写入,提高性能
   #save 900 1
   #save 300 10
   #save 60 10000
     min-slaves-to-write 1     # 这里保障,redis master至少要有1个连接得上的slave才可被写入,用来减少replication丢数据的机会
     min-slaves-max-lag 10     # 这里保障,redis master会停止写入,如果在10秒内收不到从slave的replication确认回馈

192.168.10.80 和 192.168.10.81 配置同上,修改相应端口即可。
80: slaveof 192.168.10.78 6379
81: slaveof 192.168.10.78 6379

3.sentinel 配置
Redis Sentinel 是一个分布式系统,可监控(Monitoring)、提醒(Notification)和 自动故障迁移(Automatic failover)。
可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

192.168.10.78主要配置项说明:
vim /etc/sentinel.conf

port 26379    #指定sentinel的侦听端口(即与redis server或client建立tcp连接的端口)
dir /usr/local/redis-3.0.7/redis-master/src
sentinel monitor mymaster 127.0.0.1 6379 2   #指定sentinel要monitor的redis实例,包括一个redis实例的别名(alias)及redis实例的ip+port,该行最后的数字2表示至少2个setinel实例同时检测到redis server异常时,才将redis server的状态判决为real fail。
sentinel down-after-milliseconds mymaster 20000   #指定sentinel监控到redis实例持续异常多长时间后(20s),会判决其状态为down。
sentinel failover-timeout mymaster 60000   #若sentinel在该配置值内(60s)未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel parallel-syncs mymaster 1   #指定failover过程中,同时被sentinel reconfigure的最大slave实例数。由于reconfigure过程中,对应的slave会中断响应客户端请求,故为避免所有的slave同时不可用,该值需适当配小。

192.168.10.80从主要配置:

port 26380
dir /usr/local/redis-3.0.7/src
sentinel monitor mymaster 192.168.10.78 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

192.168.10.81从主要配置:

port 26381
dir /usr/local/redis-3.0.7/src
sentinel monitor mymaster 192.168.10.78 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

4.启动

redis
192.168.10.78:

cd /usr/local/redis-3.0.7/redis-master
./src/redis-server ./redis-6379.conf &

192.168.10.80:

cd /usr/local/redis-3.0.7
./src/redis-server ./redis-6380.conf &

192.168.10.81:

cd /usr/local/redis-3.0.7
./src/redis-server ./redis-6381.conf &

sentinel
192.168.10.78:

cd /usr/local/redis-3.0.7/redis-master
./src/redis-server ./sentinel-26379.conf --sentinel &

192.168.10.80:

cd /usr/local/redis-3.0.7/
./src/redis-server ./sentinel-26380.conf --sentinel &

192.168.10.81:

cd /usr/local/redis-3.0.7
./src/redis-server ./sentinel-26381.conf --sentinel &

5.测试
连接redis端口

./redis-cli -h 127.0.0.1 -p 6379
info replication

./src/redis-cli -h 127.0.0.1 -p 6379 info replication
./src/redis-cli -h 127.0.0.1 -p 26379 info Sentinel

内存使用情况查看:
redis-cli -h 127.0.0.1 info | grep memory

连接sentinel监控端口测试:
./redis-cli -h 127.0.0.1 -p 26379
SENTINEL get-master-addr-by-name mymaster

注意:
1、主从切换后,redis.conf、sentinel.conf内容都会改变reconfiguration,主要还想要原来的主从架构,要再修改配置文件;
2、master挂掉,sentinel已经选择了新的master,但是还没有将其改成master,但是已经将old master改成了slave。那么这时候如果重启old master,就会处于无主状态。所以一方面要等sentinel稳定后再启动old master,或者重新人工修改配置文件,重新启动集群。
3、再把服务已关闭的redis(old master)恢复服务状态,redis sentinel 集群服务,会把上次主redis重新加入服务中,但是他再以不是主的redis了,变成从的reids。
4、如果此后想再次让redis-0加入集群,你需要首先通过"INFO"指令找到当前的masterip + port,并在启动指令中明确指明slaveof参数:./redis-server --include /etc/redis.conf --slaveof 192.168.10.80 6380

原文地址:https://blog.51cto.com/10874766/2356895

时间: 2024-08-15 15:55:59

redis主从+sentinel故障转移部署的相关文章

Redis 主从+哨兵安装与部署

1 前言 redis集群常见的部署方式有: 采用主从复制 + sentinel(哨兵)监控的方式; 采用redis-cluster集群(去中心化分片集群)的方式 本文以笔者内部项目为例,采用主从复制+哨兵的方式部署. 2 版本说明 三台服务器(一主两从):192.168.1.60 为主服务器,192.168.1.59 和192.168.1.58 为从服务器 操作系统:CentOS Linux release 7.4.1708 (Core) JDK版本:jdk 1.8.0_171 REDIS版本:

redis主从分离讲解与部署

redis主从架构 -> 读写分离架构 -> 可支持水平扩展的读高并发架构 redis replication的核心机制 (1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量 (2)一个master node是可以配置多个slave node的 (3)slave node也可以连接其他的slave node (4)slave node做复制的时候,是不会block master node的正常工作的 (5)sl

redis主从+sentinel

redis作为nosql数据库主流产品之一,现在被广泛使用,如何保证redis的高可用和故障自动切换,本文介绍了redis的主从配置方法,及故障切换的sentinel搭建.如下: 环境说明: server 系统:CentOS 6.5 X64 redis软件说明:2.8.19版本 一:配置主从redis 1.架构: 主库:172.16.52.130 从库1:172.16.52.131 从库2:172.16.52.132 2.主从操作: tar xvf redis-2.8.19.tar.gz -C

redis-sentinel搭建redis主从故障转移

Redis-sentinel是Redis实例的监控管理.通知和实例失效备援服务,是Redis集群的管理工具.在一般的分布式中心节点数据库 中,Redis-sentinel的作用是中心节点的工作,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性. Redis-sentinel是Redis的作者antirez在今年6月份完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个 Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需

Redis Sentinel安装与部署,实现redis的高可用

前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服务,只要用于生产,就需要满足高可用:此文针对的是redis的高可用. 接下来会有系列文章,该系列是对spring-session实现分布式集群session的共享的完整阐述,同时也引伸出缓存的实现:而此篇是该系列的第一篇. github地址:https://github.com/youzhibing/redis 环境准备 redis版本:redis-3.0.0 linux:centos6.7 ip:192.168.11.202,

spring-data-redis,jedis和redis主从集成和遇到的问题

Redis主从加哨兵的部署详见http://www.cnblogs.com/dupang/p/6414365.html spring-data-redis和jedis集成代码总体结构 代码地址https://github.com/dupang/redistestwithspring pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM

Redis主从、sentinel故障自动切换

一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制非常简单. 二.redis主从复制特点 1.同一个Master可以拥有多个Slaves. 2.Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master->Slave->Slave模式: 3.Master以非阻塞的方式同步数据至slave,这将

redis演练(7) redis Sentinel实现故障转移

书接上文<redis演练(6) redis主从模式搭建>. <redis演练(6) redis主从模式搭建>中仅仅配置了redis主从环境.分别配置了2个主从结构. 分别是1.有向无环,2星型模型.配置起来非常简单.但是,遗留了一个尾巴,没有阐述.如果master宕掉了怎么办?redis如何实现fail-over故障转移?本文,就重点说一下这块.主要内容 手动实现fail-over效果 sentinel实现自动fail-over效果 手动实现fail-over效果 #有向无环模型(

redis主从集群搭建及容灾部署(哨兵sentinel)

Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 l  Redis安装 l  整体架构 l  Redis主从结构搭建 l  Redis容灾部署(哨兵sentinel) l  Redis常见问题 Redis安装 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 下载redis,选择合适的版本 [[email protected] software]# wget http:/