单台服务器-利用docker搭建Redis哨兵集群模式

前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了。

一:拉取redis镜像

 二:拉取redis.conf文件

放在自定义的目录下:wget -c http://download.redis.io/redis-stable/redis.conf

 三:启动三个redis容器,redis_1,redis_2,redis_3

 --name:自定义启动容器名称
 -v 主机redis.conf 和redis容器做映射
 -d 后台启动
 -p 端口映射 6379是redis端口 26379是哨兵端口
 redis:镜像名称
docker run --name redis_1 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 -p 26379:26379 redis

 

 四:测试三个单机redis

进入容器:

docker  exec  -it  容器id  /bin/bash

 docker exec -it 1e8c3a92a6f4 /bin/bash

执行redis-cli进入redis

 

 功能正常之后查看角色,因为现在刚创建出来都是单机的。输入:info  命令显示都是master

 

 五:手动设置主从关系

这里使用到的IP是容器里的IP,可以通过:docker inspect redis_1查看容器映射出来的ip。

我们这里把redis_1设置为主,redis_2,redis_3设置为从。

进入redis_2容器,打开redis-cli,输入 SLAVEOF IP  PORT

即可完成主机的绑定,再次执行INFO命令就可以看到角色发生了变化,且主机也显示了。

 

 

 

 redis_3也这样执行。

执行完我们进入redis_1中,执行INFO可以看到主从关系已经生效:

 

六:测试主从关系 

在redis_1中执行set命令可以正常set,get。

 

 我们去redis_2,redis_3中看下能否获取到。

redis_2正常获取

 

 这里需要注意的一点,SLVAE角色的redis只能读取不能set的。

 

 只有master才能读写。

redis_3也是这样的。

 

 redis主从复制集群的特点,读写分离。

七:在主从集群的基础上搭建哨兵模式

 进入三个redis容器,

1: 先更新在安装vim

apt-get update
apt-get install -y vim

在容器的根目录下创建sentinel.conf文件。vim sentinel.conf。写入以下配置:

port 26381 #哨兵端口号 一定要和启动命令映射第二个端口号一致  26379   26380  26381
daemonize yes  #后台启动
sentinel monitor master_redis 主节点ip 主节点端口 2     #这里的ip也是master容器映射出来的ip  端口是master映射到外面的端口 6379  最后的2表示 有2两个哨兵

2: 执行这个配置文件:redis-sentinel sentinel.conf

 查看运行的sentinel进程:

在容器里安装ps命令。

 apt-get install procps

安装成功之后  :ps -ef 看到sentinel进程已经启动了。

 三个容器的哨兵进程都启动后,可以看到

 

 可以测试下把master节点的redis停掉,过一会slave中的某个节点会担任master节点。

 

posted @   蒙恬括  阅读(522)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示