一:哨兵主要作用

监控:监控redis主库及从库运行状态;

通知:如果redis发生故障转移,可以通过邮件通知管理员;

自动故障转移:一旦发现主库宕机,则在从库中通过选举新的master进行故障转移。

二:工作原理

哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。

每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方宕机了,这种宕机称为”主观认为宕机” Subjective Down,简称sdown)。

若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master真正宕机,即客观上认为宕机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

三:部署

master: 192.168.1.247

slave1: 192.168.1.110

slave2: 192.168.1.211

1. Redis服务安装

这里Redis版本为5.0.5。

Redis的安装步骤为:下载、解压、编译、配置、启动。

以下以247服务器安装为例,其他类似。

1.1 安装所需环境和工具

centos
yum -y install wget vim tcl gcc make ubuntu
apt-get install wget vim tcl gcc make

1.2 下载Redis

cd /home/
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

1.3 解压

tar -zxvf redis-5.0.5.tar.gz

1.4 编译

cd redis-5.0.5/
make install PREFIX=/home/redis/

1.5 拷贝配置文件到Redis程序目录

cp redis.conf /home/redis/bin
cp sentinel.conf /home/redis/bin

redis.conf是Redis服务的配置文件;sentinel.conf是哨兵服务的配置文件。

1.6 修改配置文件

mkdir -p /home/redis/run
mkdir -p /home/redis/log
mkdir -p /home/redis/working
vim /home/redis/bin/redis.conf

通用配置

 # 需要不同服务器的节点连通,就不能设置为 127.0.0.1
bind 0.0.0.0
# 需要不同服务器的节点连通,这个就要设置为 no
protected-mode no
port 6379
# 密码
requirepass "ABC!!123"
# 主节点认证,主从节点均需要配置
masterauth "ABC!!123"
tcp-backlog 511
timeout 0
tcp-keepalive 300
# 设置后台运行redis
daemonize yes
supervised no
dir "/home/redis/working"
pidfile "/home/redis/run/redis_6379.pid"
logfile "/home/redis/log/redis.log"
loglevel notice
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

从节点配置

replicaof 192.168.1.211 6379

1.7 启动服务

cd /home/redis/bin
./redis-server redis.conf

1.8 使用 ps -ef|grep redis 查看是否都启动成功,IP和端口号都正确

使用info Replication查看主从复制状态

cd /home/redis/bin
./redis-cli -p 6379
auth ABC!!123
info Replication

主节点

从节点(这里从节点端口用的6377)

2.哨兵配置

哨兵模式采用一主二从三哨兵模式。

2.1 修改配置

cd /home/redis/bin
vim sentine.conf
# 保护模式默认关闭
protected-mode no
# 绑定监听IP
bind 0.0.0.0
# 哨兵端口
port 26379
# 后台运行
daemonize yes
# pid
pidfile "/home/redis/run/redis-sentinel.pid"
# log
logfile "/home/redis/log/redis-sentinel.log"
# 工作目录
dir "/home/redis/working"
# 设置初始master以及法定认为下线人数:
sentinel monitor redis-master 192.168.1.211 6379 2
# 配置认证密码
sentinel auth-pass redis-master ABC!!123
# 设置初始master以及法定认为下线人数:
sentinel down-after-milliseconds redis-master 30000
# 指定在故障转移期间,多少个slave向新的master同步得数量,如果slave是提供查询服务,则应该设置小一点更好
sentinel parallel-syncs redis-master 1
# 指定故障转移超时时间,默认为3分钟
sentinel failover-timeout redis-master 180000
# 禁止修改脚本,避免脚本重置
sentinel deny-scripts-reconfig yes

2.2 启动

./redis-sentinel sentinel.conf

3.验证

3.1查看哨兵信息

随意登录一台主机执行 info Sentinel命令,下面以连接211机器为例。

cd /home/redis/bin
./redis-cli -p 26379 info Sentinel

输出信息如下:

SpringBoot配置Redis哨兵模式

application.yml 添加Redis配置

spring:
redis:
database: 1
password: ABC!!123
# 哨兵模式
sentinel:
master: redis-master
nodes: 192.168.1.211:26379,192.168.1.247:26379,192.168.1.110:26379

Redis哨兵模式搭建的更多相关文章

  1. 【运维技术】redis(一主两从三哨兵模式搭建)记录

    redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...

  2. 【Redis】Redis Sentinel 哨兵模式搭建

    Redis Sentinel介绍 Redis Sentinel是Redis的官方高可用性解决方案 Redis Sentinel为Redis提供高可用性.实际上,这意味着使用Sentinel可以创建一个 ...

  3. Redis进阶:Redis的哨兵模式搭建

    Redis进阶:Redis的哨兵模式搭建 哨兵机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备 ...

  4. 搭建redis哨兵模式

    搭建redis哨兵模式,一主两从三哨兵   1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...

  5. Linux基于Docker的Redis主从复制、哨兵模式搭建

    本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...

  6. spring整合redis(哨兵模式)

    首先服务器搭建哨兵模式(我这里使用的是Windows8系统),感谢两位博主,少走不少弯路,在此给出链接:服务器哨兵模式搭建和整合哨兵模式 什么一些介绍就不介绍了,可以看一下连接,比较详细,初次接触,当 ...

  7. Redis哨兵模式高可用解决方案

    一.序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务. 1.目标与收获 一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使 ...

  8. Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步

    Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.

  9. Redis哨兵模式大key优化

    目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中.        涉及到的key如下: 0,hash,duser_record, ...

  10. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

随机推荐

  1. 【第4个渗透靶机项目】 Tr0ll

    每天都要加油哦! 0x00  信息搜集 首先找到一下靶机的ip,并扫描端口. 靶机和kali都是桥接. 那么先看一下kali的ifconfig信息. nmap -sn 192.168.0.0/24  ...

  2. Spring源码之XML文件中Bean标签的解析2

    读取XML文件,创建默认bean标签对象的核心代码 在DefaultBeanDefinitionDocumentReader类中的如下方法中: protected void processBeanDe ...

  3. Postfix + Extmail 企业邮件服务器搭建

    ExtMail套件用于提供从浏览器中登录.使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面.它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的I ...

  4. ASP.NET Core必备知识之Autofac

    使用Autofac替换掉微软的DI 本文的项目为ASP.NET Core3.1,传统三层架构 在这就不过多介绍Autofac,直接上代码 Autofac官网:https://autofac.org/ ...

  5. RSAToken 的签名算法 SHA256withRSA、数字签名

    数字签名的意义,看下百科:数字签名sign可不是对数据的加密和解密,而是生成签名和验证签名. https://baike.baidu.com/item/%E6%95%B0%E5%AD%97%E7%AD ...

  6. Codeforces Round #884 (Div. 1 + Div. 2) A-E

    比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...

  7. NC17877 整数序列

    题目链接 题目 题目描述 给出一个长度为n的整数序列 \(a_1,a_2,...,a_n\) ,进行 \(m\) 次操作,操作分为两类. 操作1:给出 \(l,r,v\) ,将 \(a_l,a_{l+ ...

  8. ARM 中常用的汇编指令解释汇总

    前言 嵌入式项目中经常涉及到需要通过分析编译后的汇编文件,来确定异常代码,对一些常用的指令进行了汇总. 一.处理器内部数据传输指令 在ARM架构中,包括Cortex-A7处理器内部,有一些专门用于数据 ...

  9. 深入 Nginx 之架构篇[转]

    前言 最近在读 Nginx 相关的书籍,做一下读书笔记. Nginx 作为业界知名的高性能服务器,被广泛的应用.它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计.事件驱动架构.请求 ...

  10. java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现

    前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...