参考资料:https://blog.csdn.net/men_wen/article/details/72724406

之前环境使用的keepalived+redis vip集群模式,现在我们服务切换到阿里云,尝试着使用一下哨兵的集群模式,期间遇到了很多坑,查了很多资料总算成功搭建完毕。

后期使用的稳定性还有待确认,暂时记录一下流程做备忘。

  

  • 环境描述:阿里云主机3台(专有网络,开放6379端口,实现内网高可用性)搭建此环境至少三台服务器并且台数是基数,因为涉及到选举问题,我使用的云服务直接yum安装redis 和 redis-sentinel服务
  1. 192.168.1.66 (redis主)服务部署    redis主服务 redis-sentinel哨兵服务
  2. 192.168.1.67 (redis从)服务部署    redis主服务 redis-sentinel哨兵服务
  3. 192.168.1.68 (redis从)服务部署    redis主服务 redis-sentinel哨兵服务

准备工作:安装软件~

yum install redis redis-sentinel
cp /etc/redis-sentinel.conf /etc/back_redis-sentinel.conf
cp /etc/redis.conf /etc/back_redis.conf

  

 一、配置Redis主服务

  • redis主配置文件:(/etc/redis.conf)
bind 0.0.0.0
protected-mode no
port 6379
pidfile "/var/run/redis/redis.pid"
loglevel notice
logfile "/tmp/log/redis/redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
dir "/tmp/lib/redis"
masterauth "11111111"
requirepass "11111111"

  

  • redis从配置文件
bind 0.0.0.0
protected-mode no
port 6379
pidfile "/var/run/redis/redis.pid"
loglevel notice
logfile "/tmp/log/redis/redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
dir "/tmp/lib/redis"
masterauth "11111111"
requirepass "11111111"
slaveof 192.168.1.66 6379

配置完毕后,启动服务测试是否能正常通信。如有报错请先处理不通的问题,部分错误可以见下方错误摘记

[root@itvcloud-yunwei Icloud]# redis-cli -h 172.17.189.87    #主备相互测试畅通,Pong为正常
172.17.189.87:6379>
172.17.189.87:6379>
172.17.189.87:6379> auth mypasswd
OK
172.17.189.87:6379> ping
PONG

  

二、配置哨兵模式

  • redis-sentinel配置文件
// Sentinel节点的端口
port 26379
dir /var/redis/data/
logfile "26379.log" // 当前Sentinel节点监控 192.168.1.66:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor mymaster 192.168.1.66 6379 2 //每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000 //当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1 //故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000
  • 启动服务后redis-sentinel配置文件会变更为
port 26379
protected-mode no
bind 0.0.0.0
sentinel myid 2c3a6184def1f66f8e97f864e17257aa29c8bbea
sentinel auth-pass mymaster 11111111
sentinel config-epoch mymaster 229
sentinel leader-epoch mymaster 229
logfile "/var/log/redis/sentinel.log"
daemonize yes
pidfile "/var/run/redis/sentinel.pid"
# Generated by CONFIG REWRITE
dir "/tmp"

  

有几点需要注意:

1.遇到的问题是哨兵模式检测主服务一直是odown状态,出现故障后也无法自动切换,检测不到主服务状态

解决办法:redis-sentinel.conf 配置protected-mode no,此选项会影响哨兵模式之间的通信,关闭安全模式即可,或者增加bind 0.0.0.0

2.密码添加注意需要在redis.conf配置密码,在redis-sentinel.conf理也需要配置密码,否则会影响切换

3.(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. 这个错误是没有给redis存储dump文件目录的权限, chown -R redis.redis /var/lib/redis

粗略记录仅供自己做备忘。

4.相互之间端口都互通,ping状态为pong,客户端状态为master_link_status:down ,此状态下数据无法著丛复制,查看master 报错 Can't save in background: fork: Cannot allocate memory,

解决办法: vi /etc/sysctl.conf 添加 vm.overcommit_memory = 1 ; sysctl -p使配置生效  原因可以参考:https://blog.csdn.net/zqz_zqz/article/details/53384854

redis集群sentinel哨兵模式的搭建与实际应用的更多相关文章

  1. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  2. redis集群之哨兵模式【原】

    redis集群之哨兵(sentinel)模式 哨兵模式理想状态 需要>=3个redis服务,>=3个redis哨兵,每个redis服务搭配一个哨兵. 本例以3个redis服务为例: 一开始 ...

  3. Redis集群--Redis集群之哨兵模式

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 搭建R ...

  4. docker 搭建 redis 集群(哨兵模式)

    文件结构 1. redis-sentinel 1-1. docker-compose.yml 1-2. sentinel 1-2-1 docker-compose.yml 1-2-2 sentinel ...

  5. Spring Boot集成Redis集群(Cluster模式)

    目录 集成jedis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 集成spring-data-redis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 异常处理 同样的, ...

  6. Windows系统搭建Redis集群三种模式(零坑、最新版)

    目录 主从复制 修改配置文件 启动各节点 验证 哨兵模式 修改配置文件 启动实例 验证 集群模式 修改配置文件 启动实例 验证 主从复制 新建以下三个目录,用来部署一主二从 redis 的安装在另外一 ...

  7. redis(5)--redis集群之哨兵机制

    哨兵机制 在前面讲的master/slave模式,在一个典型的一主多从的系统中,slave在整个体系中起到了数据冗余备份和读写分离的作用.当master遇到异常终端后,需要从slave中选举一个新的m ...

  8. Redis集群与分布式介绍以及搭建Redis-Cluster

    1 Redis集群 1.1 什么是集群 集群就是很多服务器组成的一个网络.指的是将多台服务器集中在一起,实现同一业务. 1.2 为什么要集群 一台服务器不能满足开发需要的时候,需要多台服务器来支持.这 ...

  9. Redis集群主备模式部署

    网上有非常多用Ruby安装Redis-cluster的文章.可是在实际环境下不想安装Ruby,所以本文主要介绍了用Redis命令部署Redis集群.而且为集群中每个master实例添加一个slave实 ...

随机推荐

  1. 【2018 ICPC亚洲区域赛南京站 A】Adrien and Austin(博弈)

    题意: 有一排n个石子(注意n可以为0),每次可以取1~K个连续的石子,Adrien先手,Austin后手,若谁不能取则谁输. 思路: (1) n为0时的情况进行特判,后手必胜. (2) 当k=1时, ...

  2. 竞赛题解 - NOIP2018 保卫王国

    \(\mathcal{NOIP2018}\) 保卫王国 - 竞赛题解 按某一个炒鸡dalao名曰 taotao 的话说: \(\ \ \ \ \ \ \ \ \ "一道sb倍增题" ...

  3. [读书笔记] Spring MVC 学习指南 -- 第一章

    控制反转(Inversion of Control, IoC)/ 依赖注入: 比如说,类A依赖于类B,A需要调用B的某一个方法,那么在调用之前,类A必须先获得B的一个示例引用. 通常我们可以在A中写代 ...

  4. ACM 2003~2005

    ACM 2003 求实数的绝对值 import java.util.Scanner; public class Lengxc { public static void main(String[] ar ...

  5. 扩展运算符及其在vuex的辅助函数里的应用详解

         一.扩展运算符   <1>为什么扩展运算符会诞生?              因为箭头函数没有arguments,所以才有了扩展运算符       <2>在箭头函数里 ...

  6. JSON API免费接口 各种提供JSON格式数据返回服务网站的API接口

    这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID& ...

  7. 可以提高php编程效率的20个要点

    整理了可以提高php编程效率的20个要点,发博客记录一下,需要的朋友可以参考.    1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id' ...

  8. Scala基本语法总结(一)

    Scala基本语法总结 时隔快一年了,又捡起scala,不是想学的有多么的精通,只是想把之前遇到的知识点和实践中遇到的重点进行归纳总结,对以后的面试或许有点帮助吧! 一.scala开发环境的配置 我这 ...

  9. 树莓派如何连接WIFI

    hello,大家好,我是叶秋! 上一期呢,给大家介绍了如何给树莓派安装系统,有细心的朋友就会发现上一期安装系统的文章漏了一点点知识,不知道机智的你是否有发现呢~~(尴尬

  10. C语言实验报告(五) 用自定义函数求2~n之间的素数

    #include<stdio.h>#include <math.h>int main(){  int i,n;  printf("input n:");  ...