Redis 高可用之哨兵模式

摘要:
参考资源:https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ本文中有两个问题。1.虽然有三个哨兵容器正在运行,但实际上只有一个哨兵可以运行。2.从外部调试连接Redis获得的Monster地址是docker的虚拟IP地址(172.17.0.2:6379),无法从外部访问。但是,如果创建一个新的spring-boot项目
参考 :

https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ

 这篇文章有两个问题

1.虽然运行了3个sentinel容器,实际上只有一个sentinel运行 具体可以留意输出的最后一行

Redis 高可用之哨兵模式第1张

2.外部调试连接redis 获取到的monster地址是docker 的虚拟ip(172.17.0.2:6379)地址,外部不能访问,但是如果你把新建的springboot 项目和这些容器放到同一个主机的话是没有问题的

详细解决方案 查看

Redis 高可用之哨兵模式(二) 一、redis高可用解决方案
  1. redis主从

优点:1、高可靠性,主从实时备份,有效解决单节点数据丢失问题。

2、可做读写分离,从库分担读操作,缓解主库压力

缺点:主库异常,需要手动主从切换

2.redis哨兵模式

优点:1、有效解决主从模式主库异常手动主从切换的问题

缺点:1、运维复杂,哨兵选举期间,不能对外提供服务

其他解决方案优缺点,可以查看 高可用,本篇主要介绍哨兵解决方案

二、具体实现

windows上安装redis新版本好像已经不支持了,本文采用的是docker快速实现redis高可用实例的创建

具体环境参数:

操作系统:centos7

docker:18.09.3

1、拉取镜像,采用docker官方镜像

docker pull docker.io/redis

2、创建redis配置文件

mkdir  /data/redis/conf
cd /data/redis/conf
touch redis.conf
vi redis.conf

其中配置内容如下

logfile "redis.log"port 6379
dir /data
appendonly yes
appendfilename appendonly.aof
requirepass 123456

3、创建从库redis配置文件 文件名称命名为 redis_01.conf

其中内容如下:其中slaveof 的ip 是宿主的docker0网卡的ip 具体ip需要在主库容器运行起来后,通过docker inspect redis-6379 命令来查看ip地址

logfile "redis.log"port 6379
dir /data
appendonly yes
appendfilename appendonly.aof
slaveof 172.21.186.236 6379masterauth 123456requirepass 123456

4、运行容器

docker run --name redis-6379 -v /data/conf/redis.conf:/data/redis.conf -p 6379:6379  -d docker.io/redis redis-server /data/redis.conf

docker run --name redis-6380 -v /data/conf/redis_01.conf:/data/redis.conf -p 6380:6379  -d docker.io/redis redis-server /data/redis.conf

docker run --name redis-6381 -v /data/conf/redis_02.conf:/data/redis.conf -p 6381:6379  -d docker.io/redis redis-server /data/redis.conf

5、查看主库运行情况

[root@localhost conf]# docker exec -ti redis-6379 /bin/bash
root@9865d9442e67:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=714,lag=1
slave1:ip=172.17.0.4,port=6379,state=online,offset=714,lag=1
master_replid:6baa315b071196f7530bf2c9fdfb132785deeadb
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:714
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:714
127.0.0.1:6379>

可以看到已经有两个从库

6、创建sentinel.conf

touchsentinel.conf
vi sentinel.conf

其中sentinel.conf内容如下

logfile "sentinel.log"sentinel monitor mymaster 172.17.0.2 6379 1

7、创建sentinel容器

docker run --name redis-s-6379 -v /data/conf/sentinel.conf:/data/sentinel.conf -p 26379:26379 -d docker.io/redis redis-sentinel sentinel.conf
docker run --name redis-s-6380 -v /data/conf/sentinel.conf:/data/sentinel.conf -p 26380:26379 -d docker.io/redis redis-sentinel sentinel.conf
docker run --name redis-s-6381 -v /data/conf/sentinel.conf:/data/sentinel.conf -p 26381:26379 -d docker.io/redis redis-sentinel sentinel.conf

8、查看sentinel运行状态

[root@localhost conf]# docker exec -ti redis-s-6380 /bin/bash
root@430b54968068:/data# redis-cli -h 127.0.0.1 -p 26379
127.0.0.1:26379> infoSentinel
# Sentinel
sentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=1
127.0.0.1:26379>

9、停止主库

docker stop redis-6379

10、进入sentinel容器,查看日志

docker exec -ti redis-s-6379 /bin/bash
cat sentinel.log

Redis 高可用之哨兵模式第2张

红色划线部分可以看到成功切换主从

11、重新启动redis-6379 容器

docker start redis-6379

12、进入容器内部查看redis运行情况

docker exec -ti redis-6379 /bin/bash

Redis 高可用之哨兵模式第3张

可以看到已经成为从库

免责声明:文章转载自《Redis 高可用之哨兵模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【网络开发】多播参数设置mysql优化之N+1问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于docker环境搭建kafka集群(单机版)

1.Docker下查看是否有kafka的镜像 1 docker images |grep kafka 2.拉取kafka镜像(如果没有kafka的镜像) 2.1.拉取zookeeper镜像            在Linux下查看是否有zookeeper的镜像 1 docker images | grep zookeeper         ...

Docker学习笔记之为容器配置网络

0x00 概述 在互联网时代,网络已经成为绝大多数应用进行数据交换的主要通道,Docker 作为集群部署的利器,在网络支持上也下了许多功夫。功能丰富和强大,并不代表使用复杂,在 Docker 的封装下,我们依然可以通过命令和参数轻松的为容器制定不同的网络方案。在这一节中,我们就来了解 Docker 的网络部分。 0x01 容器网络 在之前介绍 Docker...

修改docker 容器的存储地址 & docker & container & wsl & win10

HowTo: Change Docker containers storage location with WSL2 on Windows 10 Once I started playing with Docker on Windows it quickly turned out that latest version heavily rely on WS...

Redis服务启动失败,提示:redis-server:command not found

今天我开始做主从复制的集群模式的测试,所以需要再装一个Linux操作系统,我在虚拟机里已经安装了一个Linux操作系统,Redis也已经配置好了。今天打算再安装一个Linux操作系统,Linux系统的安装过程很简单,就不多说了,如果大家想看,请查看我的另一篇文章《Redis进阶实践之一VMWare Pro虚拟机安装和Linux系统的安装》。 Linux操作...

docker安装Jenkins和构建python容器

准备工作:## 1.编写Dockerfile 定制版的镜像,以下注释需去掉尽量选择国内源,并更新下pip工具 RUN pip3 install --upgrade pipRUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-ho...

docker学习

Docker 介绍 docker是什么 操作系统级别的虚拟化,基于linux内核的namespace和cgroup docker 与虚拟机对比 启动秒级,虚拟机是分钟级别 磁盘几M,虚拟机G级别 隔离程度相比虚拟机较低 应用场景 打包程序发布 部署微服务 测试 持续集成 应用程序隔离,环境的一致性,迁移方便   安装配置 官网 www.docker.com...