千家信息网

redis主从+sentinel故障转移部署

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,redis的认识redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集
千家信息网最后更新 2025年12月01日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/makemake installmake 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/srcsentinel 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 26380dir /usr/local/redis-3.0.7/srcsentinel monitor mymaster 192.168.10.78 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 60000sentinel parallel-syncs mymaster 1

192.168.10.81从主要配置:

port 26381dir /usr/local/redis-3.0.7/srcsentinel monitor mymaster 192.168.10.78 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 60000sentinel 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 6379info 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

节点 内存 集群 配置 服务 实例 策略 客户 数据 文件 方式 状态 端口 系统 主从 故障 选择 同时 客户端 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 农行数据库中无记录 德州企业管理软件开发费用 乌班图系统搭建PPTP服务器 联想ts530服务器内存 软件开发 需求规范 华为管理服务器ip sql数据库占用433端口 提供软件开发并销售硬件 江苏高科技网络技术生产厂家 软件开发环境与工具判断题 垃圾分类执法对象基础数据库 运维如何确定服务器的数量 网络安全与执法可以考一建吗 美国参议院网络安全 有数据库中级证能评职称吗 服务器被肉鸡 库比提诺网络安全公司 大数据环境下网络安全的展望 数据库查询并且是什么 日本哪家云数据库好用 互联网科技公司税务筹划 北京智能软件开发质量保障 在数据库规范化例题怎么做 珠海格力嵌入式软件开发 高斯数据库技术技巧 梦辰服务器起床挂 向境外提供软件开发服务费 软件开发中的前端技术有哪些 惠山区软件开发电话多少 软件开发需要用到哪几个证书
0