千家信息网

redis学习9---一主二从三哨兵环境配置

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis
千家信息网最后更新 2025年11月08日redis学习9---一主二从三哨兵环境配置

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。


sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。


Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。Sentinel由一个或多个Sentinel 实例 组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。


Sentinel工作方式(每个Sentinel实例都执行的定时任务)

1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个PING命令。

2)如果一个实例(instance)距离最后一次有效回复PING命令的时间超过 own-after-milliseconds 选项所指定的值,则这个实例会被Sentinel标记为主观下线。

3)如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4)当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线。

5)在一般情况下,每个Sentinel 会以每10秒一次的频率向它已知的所有Master,Slave发送 INFO 命令。

6)当Master被Sentinel标记为客观下线时,Sentinel 向下线的 Master 的所有Slave发送 INFO命令的频率会从10秒一次改为每秒一次。

7)若没有足够数量的Sentinel同意Master已经下线,Master的客观下线状态就会被移除。 若 Master重新向Sentinel 的PING命令返回有效回复,Master的主观下线状态就会被移除。


环境:

主机IP:

192.168.121.121

192.168.121.122

192.168.121.123


系统:centos7.6


上传源码包到主机

redis-4.0.11.tar.gz


1、三台主机编译

yum install gcc gcc-c++ -y


tar -zxf redis-4.0.11.tar.gz -C /data/usr/src

cd /data/usr/src/redis-4.0.11/

make && make install PREFIX=/data/usr/redis


2、三台主机可拷贝配置文件

mkdir /data/usr/redis/{conf,data,logs}

cp *.conf /data/usr/redis/conf


编辑配置文件

cd /data/usr/redis/conf


2.1、配置redis


主节点:

vi redis.conf


bind 127.0.0.1 192.168.121.121

protected-mode no

daemonize yes

slave-priority 100

appendonly yes

dir /data/usr/redis/data

requirepass "Redis2019!"

masterauth "Redis2019!"

logfile "/data/usr/redis/logs/redis.log"


两个从节点:

bind 127.0.0.1 192.168.121.122

protected-mode no

daemonize yes

slave-priority 90

appendonly yes

dir /data/usr/redis/data

slaveof 192.168.121.121 6379

requirepass "Redis2019!"

masterauth "Redis2019!"

logfile "/data/usr/redis/logs/redis.log"


bind 127.0.0.1 192.168.121.123

protected-mode no

daemonize yes

slave-priority 90

appendonly yes

dir /data/usr/redis/data

slaveof 192.168.121.121 6379

requirepass "Redis2019!"

masterauth "Redis2019!"

logfile "/data/usr/redis/logs/redis.log"


2.2、配置哨兵

vi sentinel.conf

protected-mode no

daemonize yes

logfile "/data/usr/redis/logs/sentinel.log"

sentinel monitor mymaster 192.168.121.121 6379 2 #设置 主名称 ip地址 端口号 参入选举的哨兵数

sentinel auth-pass mymaster Redis2019!


最后两条配置要按照先后顺序


3、启动


将redis服务启动:先启动master再启动slave


/data/usr/redis/bin/redis-server /data/usr/redis/conf/redis.conf


查看redis服务状态

/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 6379 -a Redis2019! info replication

/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 6379 -a Redis2019! info replication

/data/usr/redis/bin/redis-cli -h 192.168.121.123 -p 6379 -a Redis2019! info replication


启动sentinel服务:先启动redis服务再启动sentinel服务,关闭则是反过来的,先关闭sentinel服务,再关闭redis服务。


/data/usr/redis/bin/redis-sentinel /data/usr/redis/conf/sentinel.conf


查看哨兵服务状态

/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 26379 info sentinel

/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 26379 info sentinel

/data/usr/redis/bin/redis-cli -h 192.168.121.123 -p 26379 info sentinel


4、测试

4.1、同步测试

主节点:

192.168.121.121:6379> set name kkk


从节点:

192.168.121.122:6379> keys *

1) "name"

192.168.121.122:6379> get name

"kkk"


192.168.121.123:6379> keys *

1) "name"

192.168.121.123:6379> get name

"kkk"


4.2、从库只读测试

192.168.121.122:6379> set bname yyy

(error) READONLY You can't write against a read only slave.


192.168.121.123:6379> set bname yyy

(error) READONLY You can't write against a read only slave.


4.3、冗余测试

测试停止主redis,发现其中一个从变为主,启动停止的服务后发现为从服务,主服务不变。


停止一个节点sentinel服务,之后再停止主服务,发现其中一个从服务升级为主服务

停止哨兵服务命令

/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 26379 shutdown

停止redis服务命令

/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 6379 -a Redis2019 shutdown


停止第二个哨兵服务,再停止redis主服务,发现剩下的redis服务中并没有产生主服务,说明哨兵服务最少要有两个,最好是三个及以上。


5、问题处理

5.1、执行 make PREFIX=/data/usr/redis install 报错


cc: error: ../deps/hiredis/libhiredis.a: No such file or directory

cc: error: ../deps/lua/src/liblua.a: No such file or directory


cd deps/

ls

hiredis jemalloc linenoise lua Makefile README.md update-jemalloc.sh


cd hiredis

make


cd linenoise

make


cd lua

make


cd lua

make

编译报错

Please do

make PLATFORM

where PLATFORM is one of these:

aix ansi bsd freebsd generic linux macosx mingw posix solaris

See INSTALL for complete instructions.

[root@slave1 lua]# make PLATFORM

make: *** No rule to make target `PLATFORM'. Stop.


执行下面命令编译

make generic


5.2、启动哨兵出错

./redis-sentinel sentinel.conf


*** FATAL CONFIG FILE ERROR ***

Reading the configuration file, at line 92

>>> 'sentinel auth-pass mymaster Redis2019'

No such master with specified name.


出现错误:

sentinel monitor mymaster 192.168.121.123 6379 2

sentinel auth-pass mymaster Redis2019


上边的配置要按照顺序,错误是因为上边一条的配置在下面造成的。


参考:

https://www.cnblogs.com/kevingrace/p/9004460.html

https://blog.csdn.net/qq_40476230/article/details/85845166


服务 下线 哨兵 配置 命令 服务器 状态 主观 实例 节点 测试 主机 多个 方案 标记 集群 频率 监视 客观 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山西统一软件开发设施品质保障 网络安全技术防护体系风险评估 金龙集团服务器招聘 医保局网络安全情况的报告 网络安全产品需要数据库吗 软件开发类论文答辩评语 幻塔为什么有时候连接不上服务器 管理学网络技术计划案例 域服务器管理上网行为 服务器网卡电源管理 工程公司软件开发合同 阜新市戴尔服务器回收 易软服务器地址是多少 北京华为信息与网络技术学院 实用计算机网络技术考试试题 常青藤网络安全系统 服务器迁移问题 联盟服务器和军团要塞哪个好 扬州玉泰软件开发 人人网数据库下载 响应的数据库必须是 工程软件开发技术基础知识 苹果无法连接服务器ip怎么设置 网络有时访问不了数据库 云南酷酷的科技互联网公司 损失数据库主要包括哪些内容 郑州网络安全竞赛 服务器带内 带外管理 中国有影响力人物数据库张绍桥 腾讯云服务器只有管理员界面
0