redis搭建哨兵模式(哨兵模式原理)
前言
环境:centos 7.9
介绍
我们知道redis一共有3中集群模式,1、主从模式。2、哨兵模式。3、Cluster模式。
主从复制模式缺点:master挂掉之后,集群无法使用,slave也不会自动成为新的master,slave会一直等待master正常,所以主从复制故障之后需要人为介入。
哨兵模式是为了解决主从复制模式的缺点的,即哨兵模式还是基于主从复制模式,只不过多了一个“哨兵”,当master挂掉之后,哨兵就会在在所有的从节点竞选出新的主节点。
哨兵模式原理
哨兵模式核心还是主从复制,只不过在相对于主从模式在主节点宕机导致不可写的情况下,多了一个竞选机制:在所有的从节点竞选出新的主节点。每一个哨兵都是一个独立的sentinel进程,作为进程,它会独立运行。
当master挂掉之后,哨兵会自动从slave中选一个作为master,若master重新启动,master则会转化为现有的master下的一个slave,当slave切换时,会通过发布订阅方式,将slave所对应的master更改。
哨兵本身也有单点故障的问题,所以在一个一主多从的Redis系统中,可以使用多个哨兵进行监控,哨兵不仅会监控主数据库和从数据库,哨兵之间也会相互监控。每一个哨兵都是一个独立的进程,作为进程,它会独立运行。
哨兵模式搭建
下面将以一主一从一哨兵进行搭建演示,当然,你也可以搭建一主带多从,多个哨兵的模式。
首先:搭建redis主数据库,即master,搭建方法请参考https://blog.csdn.net/MssGuo/article/details/114283015
,这里不在赘诉。
redis.conf配置文件要注意2个参数:
#表示监听本机哪个网卡地址,因为我们要让slave能连接master,所以让redis监听在一个外部网卡而不仅仅是127.0.0.1
bind 192.168.118.133
#设置密码
requirepass 123456
设置slave从服务器:
同理,正常搭建一个redis实例之后,修改redis.conf配置文件。主要修改下面这些参数:
vim redis.conf #编辑配置文件
/REPLICATION #在命令行模式下搜索REPLICATION,这段就是配置主从复制的,5.0之前的版本叫SLAVE
replicaof 192.168.118.133 6379 #找到replicaof参数,这个是配置master IP和端口的,5.0之前的版本叫slaveof
masterauth 123456 #如果master设置了密码,还要配置master的密码,这样slave才能连的上master
replica-read-only yes #slave只读,默认就是只读,保持默认即可,主从模式下master读写,slave只读
到这里,主从已经搭建完成,可以进入master,slave后输入:info Replication
,查看主从之间的相关信息,还可以在master写入一个数据之后查看slave是否正常同步到数据。
配置哨兵
这里仅配置一个哨兵,在master上配置一个哨兵,当然,如果你需要多个哨兵,还可以在每个slave上配置哨兵。
#在master上配置一个哨兵,如下:#复制哨兵的配置文件到redis安装目录下,与redis.conf配置文件放一块,在源码包里面有sentinel.conf文件
[root@Redis ~]# cp /root/redis-6.2.6/sentinel.conf /usr/local/redis-6.2.6/etc/
[root@Redis etc]# cd /usr/local/redis-6.2.6/etc/ && ll
total 108
-rw-r--r-- 1 root root 93767 Sep 9 18:35 redis.conf #这是我们redis主配置文件
-rw-r--r-- 1 root root 13768 Sep 9 21:45 sentinel.conf #这是我们的哨兵配置文件[root@Redis etc]# vim sentinel.conf #编辑哨兵配置文件,主要修改或启动下面这些参数
[root@Redis etc]# grep -Ev '$^|#' sentinel.conf
bind 192.168.118.133 #哨兵监听本机哪个端口
port 26379 #哨兵的默认端口是26379
daemonize yes #哨兵的启动模式,yes是后台启动
pidfile /opt/redis/logs/redis-sentinel.pid #哨兵的pid文件存放位置
logfile /opt/redis/logs/redis-sentinel.log #哨兵的日志文件存放位置
dir /tmp #哨兵进程的工作目录,默认就是/tmp #哨兵监听的master数据库,mymaster是为主数据库起的名称,可以随便起个名字,后面是master的ip和端口
# 最后面的1表示选举个数,含义是需要多少个哨兵认为master挂了才认定master挂掉,这里我设置为1是因为我只有一个哨兵,如果你配置
# 了多个哨兵,建议配置2以上数字。
sentinel monitor mymaster 192.168.118.133 6379 1
sentinel auth-pass mymaster 123456 #配置master的登陆密码,mymaster是你配置的master名称
sentinel down-after-milliseconds mymaster 30000 #30秒内master无响应则认为master挂掉
acllog-max-len 128 #保持默认即可#master重新选举之后,其它节点能同时并行进行数据同步的台数有多少台
#显然该值越大,则所有slave能同步完成的速度越快,但如果此时刚好有人访问slave数据,可能造成读取失败,最保守的值建议设为1
#即同一时间只能有一台进行数据同步,这样其它slave还能继续提供服务,但是所有的slave数据同步完成就会显得缓慢。
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000 #故障转移超时时间,指在该时间内如果故障转移没有成功,则会再发起一次故障转移
sentinel deny-scripts-reconfig yes #保持默认即可
SENTINEL resolve-hostnames no #保持默认即可
SENTINEL announce-hostnames no #保持默认即可
[root@Redis etc]#
启动哨兵
sentinel.conf 配置文件修改完成之后,开启哨兵进程:
[root@Redis bin]# ./redis-sentinel ../etc/sentinel.conf #指定哨兵配置文件启动
[root@Redis bin]# ps -ef | grep redis #查看进程,可以看到哨兵进程已经启动
root 71838 1 0 21:43 ? 00:00:08 ./redis-server 192.168.118.133:6379 #这是redis服务进程
root 93433 1 0 22:35 ? 00:00:00 ./redis-sentinel 192.168.118.133:26379 [sentinel] #这是哨兵进程[root@Redis bin]# tail -22f ../logs/redis-sentinel.log #查看哨兵日志,没有报错,说明哨兵启动正常
93433:X 09 Sep 2022 22:35:21.203 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
93433:X 09 Sep 2022 22:35:21.203 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=93433, just started
93433:X 09 Sep 2022 22:35:21.203 # Configuration loaded
93433:X 09 Sep 2022 22:35:21.204 * monotonic clock: POSIX clock_gettime
93433:X 09 Sep 2022 22:35:21.205 * Running mode=sentinel, port=26379.
93433:X 09 Sep 2022 22:35:21.206 # Sentinel ID is a39ed9dc9dd67d84a32eb135f957f8c060b662ee
93433:X 09 Sep 2022 22:35:21.206 # +monitor master mymaster 192.168.118.133 6379 quorum 1
93433:X 09 Sep 2022 22:35:21.207 * +slave slave 192.168.118.132:6379 192.168.118.132 6379 @ mymaster 192.168.118.133 6379
登陆哨兵
登录哨兵还是使用redis-cli命令,指定主机端口和26379端口即可:
[root@Redis bin]# ./redis-cli -h 192.168.118.133 -p 26379 #登录哨兵,没设密码所以不用输入密码# SENTINEL HELP可以查看哨兵使用命令帮助文档
192.168.118.133:26379> SENTINEL master mymaster #查看哨兵监听的master的信息,master的名称我们在配置文件定义为mymaster1) "name"2) "mymaster"3) "ip"4) "192.168.118.133"5) "port"6) "6379"7) "runid"8) "02f3d42a68a5358a44c1dea60a80e6b774092e67"9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "55"
19) "last-ping-reply"
20) "55"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "3349"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "354734"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "1"
33) "num-other-sentinels"
34) "0"
35) "quorum"
36) "1"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
192.168.118.133:26379>
192.168.118.133:26379> SENTINEL REPLICAS mymaster #查看master的slave的信息
1) 1) "name"2) "192.168.118.132:6379"3) "ip"4) "192.168.118.132"5) "port"6) "6379"7) "runid"8) "0f52d6e66dc478ddeb7f82cc3f9a2f0ba6467c31"9) "flags"10) "slave"11) "link-pending-commands"12) "0"13) "link-refcount"14) "1"15) "last-ping-sent"16) "0"17) "last-ok-ping-reply"18) "554"19) "last-ping-reply"20) "554"21) "down-after-milliseconds"22) "30000"23) "info-refresh"24) "9229"25) "role-reported"26) "slave"27) "role-reported-time"28) "722021"29) "master-link-down-time"30) "0"31) "master-link-status"32) "ok"33) "master-host"34) "192.168.118.133"35) "master-port"36) "6379"37) "slave-priority"38) "100"39) "slave-repl-offset"40) "55892"41) "replica-announced"42) "1"
192.168.118.133:26379>
验证
下面验证master挂掉之后,哨兵会不会将slave提升为新的master。
#关闭master ,模拟挂点,看看哨兵会如何操作
[root@Redis bin]# ./redis-cli -h 192.168.118.133 -p 6379 -a 123456 shutdown
[root@Redis bin]# ps -ef | grep redis
root 93433 1 0 22:35 ? 00:00:03 ./redis-sentinel 192.168.118.133:26379 [sentinel]
root 99823 79065 0 22:50 pts/0 00:00:00 grep --color=auto redis#登录slave,查看现在slave的角色
[root@node1 bin]# ./redis-cli -h 192.168.118.132 -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.118.132:6379> info Replication
# Replication
role:master #从已经变成master角色了
connected_slaves:0
master_failover_state:no-failover
master_replid:9aa2e88aa729a454dae63f4a8c03cb2dcac40606
master_replid2:4976935598fb02dc112bddd37068f5f5b45f085f
master_repl_offset:82267
second_repl_offset:69050
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:82267
192.168.118.132:6379> [root@Redis bin]# ./redis-server ../etc/redis.conf #重新之前挂点的master,看看是不是变成slave了
[root@Redis bin]# ps -ef | grep redis
root 93433 1 0 22:35 ? 00:00:04 ./redis-sentinel 192.168.118.133:26379 [sentinel]
root 101580 1 0 22:54 ? 00:00:00 ./redis-server 192.168.118.133:6379[root@Redis bin]# ./redis-cli -h 192.168.118.133 -p 6379 -a 123456192.168.118.133:6379> info Replication
# Replication
role:slave #角色变成slave,我们也没有该redis.conf配置文件
master_host:192.168.118.132
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:1
slave_repl_offset:1
master_link_down_since_seconds:-1
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:fbec000371f598d941c57b877b0d4b71065448cc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.118.133:6379> #这时如何重启新的master会怎么样,因为新的master的配置文件里面肯定有关于slave的配置
192.168.118.132:6379> SHUTDOWN #关闭redis
[root@node1 bin]# ./redis-server ../etc/redis.conf #重新启动redis
[root@node1 bin]# ./redis-cli -h 192.168.118.132 -p 6379 -a 123456 #登陆redis
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.118.132:6379> info Replication
# Replication
role:master #还是master角色,说明即使redis.conf配置文件配置了slave的相关信息,但是该节点受哨兵管理,主从仍是正常的
connected_slaves:0
master_failover_state:no-failover
master_replid:7b55a5e55c316d416ad225ef96fe69cf302bf3fd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.118.132:6379>
总结
1、先搭建好redis主从复制模式,因为哨兵是基于主从复制模式的;
1、可以配置多个哨兵,解决哨兵单点故障问题;
2、可以在master节点上启动哨兵,如果需要多个哨兵,则可以在slave上也启动哨兵;
2、复制哨兵的配置文件到redis安装目录下,与redis.conf配置文件放一块,在源码包里面有sentinel.conf文件;
3、修改sentinel.conf文件对应的参数,主要是定义其监控的master节点ip端口密码等
4、启动哨兵:[root@Redis bin]# ./redis-sentinel ../etc/sentinel.conf #指定哨兵配置文件启动
5、登陆哨兵:[root@Redis bin]# ./redis-cli -h 192.168.118.133 -p 26379 #登录哨兵,没设密码所以不用输入密码
6、验证master挂掉,发现slave自动成为了新的master,而且当就的master故障恢复启动之后,就的master会自动成为slave角色;
7、在不该变redis.conf配置文件的情况下,重启新的master节点,发现其重启后仍是master节点,即使redis.conf配置了它是salve,这一点与没有哨兵模式的主从模式有所不同,在redis仅仅是主从模式时,重启master就是master角色,重启slave就是slave角色,因为配置文件就是这样定义的。
redis搭建哨兵模式(哨兵模式原理)相关推荐
- Redis搭建主从同步流程及原理
目录 一.关于 Redis 主从复制 1.1 关于 Redis 的主从复制 1.2 Redis 主从架构 1.3 优缺点 二.配置 Redis 主从复制 2.1 准备事项 2.2 同步服务器的时区和时 ...
- Redis单机模式主从模式哨兵模式集群模式搭建
文章目录 一.Redis下载及安装 1.1.下载 1.2.环境安装 1.3.编译安装 1.4.修改配置 1.5.启动Redis 1.6.验证Redis是否启动 1.7.进入到Redis客户端 1.8. ...
- redis搭建主从哨兵模式+分片集群部署(redis系列二)
前言:在前一章了解redis的基本介绍后,这一章主要介绍redis的实战部署,文章有点长请一步步耐心看完,我相信肯定会有收获的,这里用的资源包是2022年最新的redis版本可能会跟旧版本不同,在此章 ...
- Redis(主从复制、哨兵模式、集群)概述及部署
Redis(主从复制.哨兵模式.集群)概述及部署 前言 一.主从复制 (1)主从复制原理 (2)主从复制作用 (3)主从复制流程 (4)搭建主从复制 ①修改master节点配置文件 ②修改Slave节 ...
- Redis(十八)——Sentinel 哨兵模式
文章目录 Redis(十八)--Sentinel 哨兵模式 1.哨兵模式概述 2.搭建 Sentinel 集群 3.sentinel 集群测试 4.哨兵模式的所有配置详解 Redis(十八)--Sen ...
- 【Redis】Redis主从架构和哨兵模式
文章目录 主从架构 为什么需要Redis主从架构? 搭建主从架构(一主二从) 主从一致原理 复制积压缓冲区 全量复制 增量复制 在主从架构中出现了宕机的情况 为什么主从库之间的复制不使用 AOF? 哨 ...
- Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式
redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...
- Redis集群之哨兵模式
本文来说下Redis集群之哨兵模式 文章目录 概述 哨兵模式 什么是哨兵 实现原理 哨兵选举过程 master选举过程 cluster集群模式 cluster集群模式是怎么存放数据的 键是如何和163 ...
- Redis进阶篇主从复制----哨兵模式
主从复制是什么 主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 作用 读写分离,性能扩展 容灾快速恢复 当一个从数 ...
- Redis的主从复制和 哨兵模式
前言 持久化解决了单机redis的数据保存问题,但是redis还是存在以下两个问题: (1)假如某天这台redis服务器挂了,redis服务将彻底丧失 (2)redis的读和写都集中到一台机上,如果请 ...
最新文章
- python工具之myql数据库操作
- IDA Pro 修改默认名称
- ElementUI的el-form表单验证报错[Element Warn][Form]model is required for validate to work!
- Windows 8系统平台上应用软件安装心得
- 无根二叉树_无根Podman如何工作?
- 联想A208T ROOT
- 指针 | golang之指针的学习
- Objective-C SQLiteHelper
- 【转】XSD (xml Schema Definition)
- 太极发送卡片软件_太极APP的入门级使用方法
- 软件评测师考试(再来看一遍书,整理知识点)
- galgame安卓_史上最强教程!教你如何在安卓和ios上运行GALgame!
- python绘图画猫咪_Turtle库画小猫咪
- 【报告分享】代餐行业营销洞察报告-丁香医生(附下载)
- 基于微信云开发的商家转账至零钱
- PhotonServer-创建APPServer和Client类
- python实现归一化与标准化
- K8S章节2 — k8s集群中通过rook方式部署ceph
- Android TabLayout修改指示器宽度方案汇总
- PDA 无线网络设置
热门文章
- Xcelsius 的苦难日子
- 最新十大透支健康行业(2019年版)
- 【程序员学理财】有哪些普通人应该知道的经济学常识?
- 企业项目管理八大经典法宝
- flowable-6.7(一)从工作流与BPMN到flowable
- 【转】为什么linux系统变慢了
- Windows 10, version 21H2 (released Nov 2021) 简体中文版、英文版(企业版)下载
- php blowfish 解密,php blowfish加密解密算法
- 广告词 android,广告语猜猜看
- Cannot determine archive format of /tmp/pip-req-build-