环境准备

在物理机上启动3台虚拟机,IP地址分别为:192.168.56.4192.168.56.5192.168.56.6

1.确保3台虚拟机的网络是相互联通的。

2.确保已经在3台虚拟机上安装了redis(本示例中使用redis-6.2.4),参考centos 6.8安装redis

3.sentinel部署架构设计如下:

启动master

192.168.56.4上修改redis配置文件内容如下:

daemonize yes
protected-mode no
port 6379
bind 192.168.56.4
loglevel debug
logfile /var/log/redis-sentinel.log

启动redis服务。

查看redis服务状态:

$ redis-cli -h 192.168.56.4 -p 6379
192.168.56.4:6379> info replication
# Replication
role:master # master节点
connected_slaves:0
master_failover_state:no-failover
master_replid:f2816f8d2bae0165e69939f2c68c7893d404afd6
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

启动slave

192.168.56.5上修改redis配置文件内容如下:

daemonize yes
protected-mode no
port 6379
bind 192.168.56.5
loglevel debug
logfile /var/log/redis-sentinel.log
replicaof 192.168.56.4 6379

启动redis服务。

查看redis服务状态:

$ redis-cli -h 192.168.56.5 -p 6379
192.168.56.5:6379> info replication
# Replication
role:slave # slave节点
master_host:192.168.56.4
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:154
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:021abd5cacf2b45ade959fdcb0e50012e108bf6a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:154
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:154

现在再来看master节点在状态:

192.168.56.4:6379> info replication
# Replication
role:master
connected_slaves:1 # 已经有slave节点连接上了
slave0:ip=192.168.56.5,port=6379,state=online,offset=28,lag=1 # slave节点信息
master_failover_state:no-failover
master_replid:021abd5cacf2b45ade959fdcb0e50012e108bf6a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

启动哨兵

分别在三台主机上配置Redis Sentinel。

以修改master节点上的哨兵配置为例,配置内容如下:

port 26379
bind 192.168.56.4 # 注意修改IP地址
daemonize yes
logfile /var/log/redis-sentinel.log
sentinel monitor mymaster 192.168.56.4 6379 2 # sentinel监听的master节点都是相同的

完成哨兵配置修改后,依次启动各个主机上的哨兵。

$ src/redis-server sentinel.conf --sentinel

在本示例中先启动master节点的sentinel:

1648:X 21 Oct 2022 15:04:25.238 # Sentinel ID is 0e8299513272360c51c2b0a27fecd7c3e47b2ac9
1648:X 21 Oct 2022 15:04:25.238 # +monitor master mymaster 192.168.56.4 6379 quorum 2
1648:X 21 Oct 2022 15:04:25.239 * +slave slave 192.168.56.5:6379 192.168.56.5 6379 @ mymaster 192.168.56.4 6379

依次启动其他两台节点的sentinel,这时在master节点的sentinel日志中会看到如下信息:

# 有新的sentinel节点加入了
1648:X 21 Oct 2022 15:07:31.510 * +sentinel sentinel c31a742dd7b0485beff0463fcc0a15d17f31170b 192.168.56.5 26379 @ mymaster 192.168.56.4 6379
1648:X 21 Oct 2022 15:12:01.193 * +sentinel sentinel 1a0cf759c9bcde9d06e29d99064f26eb11454a09 192.168.56.6 26379 @ mymaster 192.168.56.4 6379

同时,在各个sentinel节点上都能看到自己的启动日志:

# 192.168.56.5节点的sentinel日志
1564:X 21 Oct 2022 15:07:29.478 # Sentinel ID is c31a742dd7b0485beff0463fcc0a15d17f31170b
1564:X 21 Oct 2022 15:07:29.478 # +monitor master mymaster 192.168.56.4 6379 quorum 2
1564:X 21 Oct 2022 15:07:29.480 * +slave slave 192.168.56.5:6379 192.168.56.5 6379 @ mymaster 192.168.56.4 6379
1564:X 21 Oct 2022 15:07:30.702 * +sentinel sentinel 0e8299513272360c51c2b0a27fecd7c3e47b2ac9 192.168.56.4 26379 @ mymaster 192.168.56.4 6379
1564:X 21 Oct 2022 15:12:01.086 * +sentinel sentinel 1a0cf759c9bcde9d06e29d99064f26eb11454a09 192.168.56.6 26379 @ mymaster 192.168.56.4 6379
# 192.168.56.6节点的sentinel日志
1618:X 21 Oct 2022 15:11:59.075 # Sentinel ID is 1a0cf759c9bcde9d06e29d99064f26eb11454a09
1618:X 21 Oct 2022 15:11:59.075 # +monitor master mymaster 192.168.56.4 6379 quorum 2
1618:X 21 Oct 2022 15:11:59.078 * +slave slave 192.168.56.5:6379 192.168.56.5 6379 @ mymaster 192.168.56.4 6379
1618:X 21 Oct 2022 15:11:59.742 * +sentinel sentinel 0e8299513272360c51c2b0a27fecd7c3e47b2ac9 192.168.56.4 26379 @ mymaster 192.168.56.4 6379
1618:X 21 Oct 2022 15:12:00.301 * +sentinel sentinel c31a742dd7b0485beff0463fcc0a15d17f31170b 192.168.56.5 26379 @ mymaster 192.168.56.4 6379

至此,一个拥有一个master节点,一个slave节点,3个sentinel节点的哨兵集群环境就组件完毕了。

分别登录到3个sentinel节点进行连接测试:

$ redis-cli -h 192.168.56.4 -p 26379
192.168.56.4:26379> ping
PONG $ redis-cli -h 192.168.56.5 -p 26379
192.168.56.5:26379> ping
PONG $ redis-cli -h 192.168.56.6 -p 26379
192.168.56.6:26379> ping
PONG

Sentinel故障转移测试

操作步骤:将master的Redis服务停掉,看看Redis Sentinel是如何操作的。

首先,先查看下目前master节点的信息:

$ redis-cli -h 192.168.56.4 -p 26379
192.168.56.4:26379> sentinel get-master-addr-by-name mymaster
1) "192.168.56.4"
2) "6379"

然后执行下面命令(强制Redis Server休眠120秒):

$ redis-cli -h 192.168.56.4 -p 6379 DEBUG sleep 120
OK

然后再查看下master节点的信息:

$ redis-cli -h 192.168.56.4 -p 26379
192.168.56.4:26379> sentinel get-master-addr-by-name mymaster
1) "192.168.56.5"
2) "6379"

发现IP已经变成了此前salve节点的,也就是说192.168.56.5变成了master,然后我们查看下当前master的信息:

$ redis-cli -h 192.168.56.5 -p 6379
192.168.56.5:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.56.4,port=6379,state=online,offset=198958,lag=1 # 此前的master节点现在变成了slave
master_failover_state:no-failover
master_replid:796b94f178162c912cadead8c84af2633812426a
master_replid2:021abd5cacf2b45ade959fdcb0e50012e108bf6a
master_repl_offset:199236
second_repl_offset:176659
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:199236

整个过程,可以查看Redis Sentinel的日志:

1648:X 21 Oct 2022 15:22:41.916 # +sdown master mymaster 192.168.56.4 6379
1648:X 21 Oct 2022 15:22:42.031 # +new-epoch 1
1648:X 21 Oct 2022 15:22:42.037 # +vote-for-leader c31a742dd7b0485beff0463fcc0a15d17f31170b 1
1648:X 21 Oct 2022 15:22:42.991 # +odown master mymaster 192.168.56.4 6379 #quorum 3/2
1648:X 21 Oct 2022 15:22:42.991 # Next failover delay: I will not start a failover before Fri Oct 21 15:28:42 2022
1648:X 21 Oct 2022 15:22:43.154 # +config-update-from sentinel c31a742dd7b0485beff0463fcc0a15d17f31170b 192.168.56.5 26379 @ mymaster 192.168.56.4 6379
1648:X 21 Oct 2022 15:22:43.155 # +switch-master mymaster 192.168.56.4 6379 192.168.56.5 6379
1648:X 21 Oct 2022 15:22:43.157 * +slave slave 192.168.56.4:6379 192.168.56.4 6379 @ mymaster 192.168.56.5 6379
1648:X 21 Oct 2022 15:23:13.218 # +sdown slave 192.168.56.4:6379 192.168.56.4 6379 @ mymaster 192.168.56.5 6379
1648:X 21 Oct 2022 15:24:11.612 # -sdown slave 192.168.56.4:6379 192.168.56.4 6379 @ mymaster 192.168.56.5 6379

【参考】

https://www.cnblogs.com/xishuai/p/redis-sentinel.html Redis Sentinel 高可用服务架构搭建

Redis搭建Sentinel实验环境的更多相关文章

  1. 《Exchange Server 2010 SP1/SP2管理实践》——第2章 搭建Exchange实验环境2.1 网络环境规划...

    本节书摘来自异步社区<Exchange Server 2010 SP1/SP2管理实践>一书中的第2章,第2.1节,作者: 王淑江 更多章节内容可以访问云栖社区"异步社区&quo ...

  2. 搭建 OpenStack 实验环境 - 每天5分钟玩转 OpenStack(16)

    在学习 OpenStack 各服务之前,让我们先搭建起一个实验环境. 毋庸置疑,一个看得到摸得着而且允许我们随便折腾的 OpenStack 能够提高我们的学习效率. 因为是我们自己学习用的实验环境,C ...

  3. 第2章 GNS3和PacketTracer网络模拟器(2)_搭建GNS3实验环境

    2. GNS3实验环境 2.1 教学实验1:配置路由器和VPCS (1)配置VPCS虚拟电脑的IP地址命令 //配置VPCS电脑的IP地址等信息 PC1> ? //查看可用的命令 PC1> ...

  4. 001——搭建OpenCV实验环境

    开发环境 VS 2017 15.7.6 OpenCV 3.4.1 搭建环境 设置环境变量 创建Win32 空项目 配置属性管理器 测试代码 #include<opencv2/opencv.hpp ...

  5. Docker+OpenvSwitch搭建VxLAN实验环境

    一.概述                                                    1.环境:我这里是2台linux机器(host1和host2),发行版是kali2.0, ...

  6. CentOS7使用DevStack快速搭建OpenStack实验环境

    安装环境:centos7系统下安装devstack 一.下载Ubuntu14或者Centos7安装(实体机或者虚拟机都可以),建议选择最小安装镜像即可. 二.安装devstack 文档地址 http: ...

  7. 实验一:JAVA实验环境搭建 ,JDK下载与安装及 Eclipse下载与安装

    一.搭建JAVA实验环境 1.JDK的下载 (1)打开 IE 浏览器,输入网址“http://www.oracle.com/index.html”,浏览 Oracle 官方主页.鼠标双击Downloa ...

  8. mininet(一)实验环境搭建

    mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 最近学习(https://github.com/mininet/openflow-tutor ...

  9. O016、搭建实验环境

    参考https://www.cnblogs.com/CloudMan6/p/5350536.html   在学习 OpenStack 各服务之前,需要先搭建一个实验环境.   一个看得到摸得着而且能让 ...

  10. 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)

    KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...

随机推荐

  1. [转帖]028.PGSQL-用户创建、表空间创建、数据库创建、schema创建、表创建、生成测试数据、指定搜索路径、

    https://www.cnblogs.com/star521/p/15054341.html  登录数据库 su postgres #注意这里postgers 前后都有空格 psql -U post ...

  2. [转帖]SSL Certificate Exporter

    https://github.com/ribbybibby/ssl_exporter Exports metrics for certificates collected from various s ...

  3. [转帖]Linux—编写shell脚本操作数据库执行sql

    Linux-编写shell脚本操作数据库执行sql Hughman关注IP属地: 北京 0.0762020.03.20 09:02:13字数 295阅读 1,036 修改数据库数据   在升级应用时, ...

  4. [转帖]cx_Oracle.DatabaseError: ORA-28040

    背景: python第三方库cx-Oracle连接Oracle数据库报错 ORA-28040 cx_Oracle.DatabaseError: ORA-28040: No matching authe ...

  5. [转帖]Nginx-https证书认证详解

    https://developer.aliyun.com/article/885650?spm=a2c6h.24874632.expert-profile.306.7c46cfe9h5DxWK 简介: ...

  6. 使用shell进行简单分析增量更新时间的方法

    使用shell进行简单分析增量更新时间的方法 思路 产品里面更新增量时耗时较久, 想着能够简单分析下哪些补丁更新时间久 哪些相同前缀的补丁更新的时间累积较久. 本来想通过全shell的方式进行处理 但 ...

  7. 在K8S中,Pod生命周期包含哪些?

    在Kubernetes(简称K8s)中,Pod的生命周期经历了一系列状态变化.以下是Pod可能处于的一些主要状态: Pending: 当创建一个Pod时,它首先会进入Pending状态.这个状态下,K ...

  8. Linux慢 进程kswapd0与events/0消耗大量CPU的问题 一次网站宕机的处理

    今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用.盯了有好十几分钟,主要消耗 CPU 的进程有两 ...

  9. 如何区分Unity国内版和国际版

    从这三个地方都可以判断使用的Unity是国内版本还是国际版,国内版的版本号后面会多出c1,而国际版则不会有c1结尾. 安装目录名 unity hub - 安装 - 查看当前安装的Unity各版本 un ...

  10. DevelopTool

    目录 01-PostMan常用玩法详解