当前位置: 首页 > ds >正文

redis哨兵

一、理论
哨兵(sentinel)主要负责监控主从节点运行是否正常,以及当主节点出现故障时自动将一个从节点转换为新的主节点。哨兵是一个独立的进程。

哨兵架构
    s1    s2    s3
        
        m
    r1        r2

s1、2、3是哨兵。
m是主。
r1、2是从1、从2。

哨兵之间相互监视,s1监视r1,s2监视主,s3监视r2.

启用哨兵只需要在配置文件中添加如下配置
sentinel monitor master-name ip port quorum

sentinel monitor是配置哨兵的命令,master-name是主节点的名称,ip port是IP地址和端口号,最后的quorum用来表示执行故障恢复操作之前至少需要几个哨兵节点同意。

哨兵建立后会定时执行3个任务
1、每10秒哨兵会向主节点和从节点发送info命令。
2、每2秒哨兵会向主节点和从节点发送自己的信息。
3、每1秒哨兵会向主节点、从节点和其他哨兵发送ping命令。
二、实践

1、环境
sentinel01	192.168.10.101
sentinel02	192.168.10.102
sentinel03	192.168.10.103
master		192.168.10.104
slave01		192.168.10.105
slave02		192.168.10.1062、主从
104、105、106
[root@master ~]# dnf -y install gcc*
[root@master ~]# tar  zxf redis-6.2.4.tar.gz -C /usr/src/
[root@master ~]# cd /usr/src/redis-6.2.4/
[root@master redis-6.2.4]# make && make PREFIX=/usr/local/redis install
[root@master redis-6.2.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@master redis-6.2.4]# mkdir /etc/redis
[root@master redis-6.2.4]# cp /usr/src/redis-6.2.4/redis.conf /etc/redis/6379.conf
[root@master redis-6.2.4]# cat /etc/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf[Install]
WantedBy=multi-user.target[root@master redis-6.2.4]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.10.104  # 75行,添加本机地址。
port 6379	# 98行默认存在(redis端口号)。
daemonize yes # 257行进行修改(启用守护进程)。
pidfile /var/run/redis_6379.pid  # 289行默认存在(PID文件)。
loglevel notice 	# 297行默认存在(日志级别)
logfile "/var/log/redis_6379.log" # 203行进行添加(日志文件)。[root@master redis-6.2.4]# systemctl daemon-reload
[root@master redis-6.2.4]# systemctl start redis
[root@master redis-6.2.4]# netstat -anpt | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      8328/redis-server 1 
tcp        0      0 192.168.10.104:6379     0.0.0.0:*               LISTEN      8328/redis-server 1 105、106
[root@slave01 redis-6.2.4]# vim /etc/redis/6379.conf  replicaof 192.168.10.104 6479	# 指定主ip及端口
#这样子改完并重启后,主上查看不到连接,connected_slaves显示为0.从上查看信息,显示自己是从,主是104,端口也正确。纳闷。看了看两者之间的区别发现,命令行敲完显示master_link_status:up,而修改配置文件后显示master_link_status:down
# 在replicaof <masterip> <masterport>的下方写就可以使用了。127.0.0.1:6379> slaveof 192.168.10.104 6379
OK
# 执行完此命令后,即可在主上查看到。104
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.105,port=6379,state=online,offset=14,lag=0
slave1:ip=192.168.10.106,port=6379,state=online,offset=14,lag=0
master_failover_state:no-failover
master_replid:f138246ee00f415b4bb715077987a3a2593cfc07
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14105、106127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.10.104
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:182
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:f138246ee00f415b4bb715077987a3a2593cfc07
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:182127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.10.104
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:182
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:f138246ee00f415b4bb715077987a3a2593cfc07
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1823、哨兵
101、102、103
[root@sentinel01 ~]# dnf -y install gcc*[root@sentinel01 ~]# tar zxf redis-6.2.4.tar.gz -C /usr/src/
[root@sentinel01 ~]# cd /usr/src/redis-6.2.4/
[root@sentinel01 redis-6.2.4]# make && make install
[root@sentinel01 redis-6.2.4]# mkdir /etc/redis
[root@sentinel01 redis-6.2.4]# cp /usr/src/redis-6.2.4/redis.conf /etc/redis/6379.conf[root@sentinel01 redis-6.2.4]# vim /etc/redis/6379.conf
bind 0.0.0.0  # 75行
daemonize yes	# 257行
sentinel monitor master 192.168.10.104 6379 2   # 末尾添加,2表示主节点故障后,至少需要两个哨兵节点同意,才能判断主节点故障。[root@sentinel01 redis-6.2.4]# cat /etc/systemd/system/redis.service 
[Unit]
Description=redis
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-sentinel /etc/redis/6379.conf[Install]
WantedBy=multi-user.target[root@sentinel01 redis-6.2.4]# ps -aux | grep redis
root        8552  0.8  0.2  69812  9428 ?        Ssl  15:38   0:00 /usr/local/bin/redis-sentinel 0.0.0.0:6379 [sentinel]127.0.0.1:6379> info sentinel	# 查看哨兵节点状态
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=192.168.10.104:6379,slaves=2,sentinels=34、故障转移
主上创建数据,从上能看到。104127.0.0.1:6379> set aaa 1OK127.0.0.1:6379> get aaa"1"
105、106127.0.0.1:6379> get aaa"1"
关闭主104[root@master redis-6.2.4]# systemctl stop redis观察哨兵信息,发现主切换为106101127.0.0.1:6379> info sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=master,status=ok,address=192.168.10.106:6379,slaves=2,sentinels=3从上查看主是谁,发现是106105127.0.0.1:6379> info replication	# Replicationrole:slavemaster_host:192.168.10.106master_port:6379master_link_status:upmaster_last_io_seconds_ago:0master_sync_in_progress:0slave_repl_offset:42579slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:79d8b586ae2fb1ea21ddeb7090049a22efa70e06master_replid2:f138246ee00f415b4bb715077987a3a2593cfc07master_repl_offset:42579second_repl_offset:36215repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:42579106上查看信息,发现自己成为了主。106127.0.0.1:6379> info replication# Replicationrole:masterconnected_slaves:1slave0:ip=192.168.10.105,port=6379,state=online,offset=43573,lag=0master_failover_state:no-failovermaster_replid:79d8b586ae2fb1ea21ddeb7090049a22efa70e06master_replid2:f138246ee00f415b4bb715077987a3a2593cfc07master_repl_offset:43573second_repl_offset:36215repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:43573重启104,发现它变为了从。104[root@master redis-6.2.4]# systemctl start redis127.0.0.1:6379> info replication# Replicationrole:slavemaster_host:192.168.10.106master_port:6379master_link_status:upmaster_last_io_seconds_ago:0master_sync_in_progress:0slave_repl_offset:54586slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:79d8b586ae2fb1ea21ddeb7090049a22efa70e06master_replid2:0000000000000000000000000000000000000000master_repl_offset:54586second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:54284repl_backlog_histlen:303主上创建数据,从上能查看到。106127.0.0.1:6379> set bbb 2OK104、105127.0.0.1:6379> get bbb"2"

http://www.xdnf.cn/news/12525.html

相关文章:

  • Day46
  • 【Go语言基础【6】】字符串格式化说明
  • ai流式文字返回前端和php的处理办法
  • Mac下Android Studio扫描根目录卡死问题记录
  • 从0开始学习R语言--Day18--分类变量关联性检验
  • python打卡day46@浙大疏锦行
  • Charles 全流程指南:安装、设置、抓包与注意事项
  • PDF 转 Markdown
  • 【JVM】Java虚拟机(一)——内存结构
  • SSH实现服务器之间免密登录
  • python 爬虫工具 mitmproxy, 几问几答,记录一下
  • 关于华为仓颉编程语言
  • 从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
  • [大A量化专栏] 夏普比率
  • 动力电池点焊机:驱动电池焊接高效与可靠的核心力量|比斯特自动化
  • 【ubuntu】虚拟机安装配置,sh脚本自动化,包含 apt+时间同步+docker+mysql+redis+pgsql
  • 如何理解OSI七层模型和TCP/IP四层模型?HTTP作为如何保存用户状态?多服务器节点下 Session方案怎么做
  • 大模型低秩微调技术 LoRA 深度解析与实践
  • MySQL全文索引
  • pg数据库表里面id值,使用sql语句赋值,唯一性
  • 小知识点一:无刷电机
  • rocketmq延迟消息的底层原理浅析
  • 多航态无人艇航态变换姿态控制系统设计与实现_可复现,有问题请联系博主
  • HZOJ新手村前段时间的刷题的笔记
  • 国内软件源镜像站一览表(2025年状态更新)
  • 使用Python做bootloader下载程序
  • Linux系统删除文件后的恢复方法
  • 1.2 fetch详解
  • 【高等数学】函数项级数
  • Langchain构建聊天机器人