title: Redis哨兵集群搭建(Docker-Compose)
date: 2022-09-27 17:00:56
tags:
- Redis

代码地址:https://github.com/li-zheng-hao/redis-sentinel-docker-compose

部署方式

一主两从三哨兵:

  1. 1个主节点
  2. 2个从节点
  3. 3个哨兵节点

服务器配置

  • 系统:CentOS 7.9
  • IP:172.10.2.52
  • 服务器数量:1台

这里只是用一台服务器部署进行演示,后面会在备注中指明如何在多个服务器上分开部署

部署脚本

主从脚本

version: '3'
services:
master:
image: redis
container_name: redis-master
command: redis-server --requirepass lzh123456 --masterauth lzh123456
network_mode: host
slave1:
image: redis
container_name: redis-slave-1
network_mode: host
command: redis-server --slaveof 172.10.2.52 6379 --masterauth lzh123456 --requirepass lzh123456 --port 6380
slave2:
image: redis
container_name: redis-slave-2
network_mode: host
command: redis-server --slaveof 172.10.2.52 6379 --masterauth lzh123456 --requirepass lzh123456 --port 6381

其中几个注意点:

  1. network_mode使用的是host模式,所以不需要绑定端口
  2. 由于这个脚本是两个slave节点都和master在一个节点,因此需要在运行时配置端口

如果是要部署在三个不同的服务器上,需要更换为下面两个脚本

# master脚本
version: '3'
services:
master:
image: redis
container_name: redis-master
command: redis-server --requirepass lzh123456 --masterauth lzh123456
network_mode: host
# slave脚本
version: '3'
services:
slave:
image: redis
container_name: redis-slave
network_mode: host
command: redis-server --slaveof 172.10.2.52 6379 --masterauth lzh123456 --requirepass lzh123456

上面master脚本部署master节点,只需要部署一次,slave脚本部署slave节点,需要部署几个就在几个服务器上运行,同一台服务器上如果需要运行多个slave,那么还是得像第一步一样配置端口。

运行的脚本为:

docker-compose -f xxxx.yml up -d

上面没有挂载配置文件和数据文件,如果有需要的可以使用如下方式挂载:

volumes:
- ./config.conf:/etc/redis/redis.conf
- ./data:/data

如果有以下需求,建议手动挂载:

  1. 设置最大内存限制
  2. 设置数据存储策略(AOF或RDB,定时存储的频率),默认的是RDB,没有开启AOF
  3. 挂载数据,保存到宿主机上防止容器被删数据丢失

哨兵脚本

下面是部署三个哨兵的脚本

version: '3'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
command: redis-sentinel /usr/local/etc/redis/sentinel1.conf --port 26379
network_mode: host
volumes:
- ./conf/sentinel1:/usr/local/etc/redis
sentinel2:
image: redis
container_name: redis-sentinel-2
network_mode: host
command: redis-sentinel /usr/local/etc/redis/sentinel2.conf --port 26380
volumes:
- ./conf/sentinel2:/usr/local/etc/redis
sentinel3:
image: redis
network_mode: host
container_name: redis-sentinel-3
command: redis-sentinel /usr/local/etc/redis/sentinel3.conf --port 26381
volumes:
- ./conf/sentinel3:/usr/local/etc/redis

哨兵的配置文件:

port 26379
dir /tmp
sentinel monitor mymaster 172.10.2.52 6379 2
sentinel auth-pass mymaster lzh123456
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000
sentinel deny-scripts-reconfig yes

注意点:

  1. 同样都是部署在同一台服务器,因此需要对三个哨兵分别配置端口
  2. 配置脚本需要复制三份,因为哨兵进程会对这个文件写入一些配置,因此不能用同一份共享

如果要分成多个服务器进行部署,需要改写成下面这样:

version: '3'
services:
sentinel:
image: redis
container_name: redis-sentinel-1
command: redis-sentinel /usr/local/etc/redis/sentinel1.conf --port 26379
network_mode: host
volumes:
- ./conf/sentinel1:/usr/local/etc/redis

需要在几台服务器上运行就部署几遍,部署命令与部署主从节点相同

客户端连接

客户端我使用的是AnotherRedisDesktopManager,配置连接方式如下:

可以用这个工具查看slave节点的信息:

之后可以手动测试下线master或者slave节点测试是否能够正常切换

在.Net Core中连接的方式根据使用的库决定,我用的是FreeRedis,配置方式如下:

RedisClient redisClient = new RedisClient(
GlobalConfig.Instance.Redis.RedisConn,
GlobalConfig.Instance.Redis.SentinelAdders.ToArray(),
true //是否读写分离
);
serviceCollection.AddSingleton<IRedisClient>(redisClient);

配置信息:

 "Redis": {
"ServiceName": "mymaster",
"Password": "lzh123456",
"RedisConn": "mymaster,password=lzh123456",
"SentinelAdders": [
"172.10.2.52:26379",
"172.10.2.52:26380",
"172.10.2.52:26381"
],
"RedisCacheExpireSec": 300
},

如果是其它库,需要参考官方文档来配置

Redis哨兵集群搭建-Docker-Compose的更多相关文章

  1. redis哨兵集群搭建

    下载redis jar包redis-4.0.11.tar.gz放在/data/redis目录下 解压 命令:tar -zxvf redis-4.0.11.tar.gz 解压后如图所示 在/usr/lo ...

  2. redis哨兵集群、docker入门

    redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...

  3. Redis本地集群搭建(5版本以上)

    Redis本地集群搭建(5版本以上) 2019年11月3日10:05:48 步骤 1.下载安装Redis的安装包 2.复制5份,一共6份Redis的解压安装版,修改每个Redis节点的端口并开启节点 ...

  4. Linux - redis哨兵集群实例

    目录 Linux - redis哨兵集群实例 命令整理 配置流程 Linux - redis哨兵集群实例 命令整理 官网地址:http://redisdoc.com/ redis-cli info # ...

  5. helm部署Redis哨兵集群

    介绍 Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现.故障自动转移.配置中心和客户端通知. 如下图: Redis Sentinel 故障转移过程: 从这 ...

  6. 11.Redis 哨兵集群实现高可用

    作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...

  7. python连接redis哨兵集群

    一.redis集群模式有多种, 哨兵模式只是其中的一种实现方式, 其原理请自行谷歌或者百度 二.python 连接 redis 哨兵集群 1. 安装redis包 pip install redis 2 ...

  8. redis的集群搭建(很详细很详细)

    说在前面的话 之前有一节说了redis单机版的搭建和使用jedis管理redis单机版和集群版, 本节主要讲一下redis的集群搭建. 跳转到jedis管理redis的使用 认识redis集群 首先我 ...

  9. linux环境下redis安装(redis伪集群搭建)

    redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...

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

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

随机推荐

  1. 4.httprunner-参数化和数据驱动

    前言 参数化在config中使用parameters关键字 httprunner2.x 是在testsuite中实现参数化 httprunner3.x 是在testcase中的config实现参数化 ...

  2. 3.CBV视图之csrf补充

    CBV使用csrf装饰器关闭/开启 csrf验证,直接在函数上加装饰器无效的 #方法1 from django.views import View from django.views.decorato ...

  3. 快读《ASP.NET Core技术内幕与项目实战》EFCore2.5:集合查询原理揭秘(IQueryable和IEnumerable)

    本节内容,涉及4.6(P116-P130).主要NuGet包:如前述章节 一.LINQ和EFCore的集合查询扩展方法的区别 1.LINQ和EFCore中的集合查询扩展方法,虽然命名和使用完全一样,都 ...

  4. pytorch 环境配置

    一.下载Anaconda 二.添加清华镜像 # 添加清华镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anac ...

  5. POC、EXP、SRC概念厘清

    「POC」 POC可以看成是一段验证的代码,就像是一个证据,能够证明漏洞的真实性,能证明漏洞的存在即可.     https://zhuanlan.zhihu.com/p/26832890 「EXP」 ...

  6. 聊一聊对一个 C# 商业程序的反反调试

    一:背景 1.讲故事 前段时间有位朋友在微信上找到我,说他对一个商业的 C# 程序用 WinDbg 附加不上去,每次附加之后那个 C# 程序就自动退出了,问一下到底是怎么回事?是不是哪里搞错了,有经验 ...

  7. spalsh安装及简单使用

    selenium是浏览器测试自动化工具,很容易完成鼠标点击,翻页等动作,确定是一次只能加载一个页面,无法异步渲染页面,也就限制了selenium爬虫的抓取效率. splash可以实现异步渲染页面,可以 ...

  8. 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

    环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/ ...

  9. 出现The server time zone value ‘�й���׼ʱ��‘ is unrecognized的解决方法

    使用mybatis链接数据库时出现如下错误, The server time zone value '�й���׼ʱ��' is unrecognized or represents more tha ...

  10. onps栈移植说明(2)——编译器及os适配层移植

    2. 字节对齐及基础数据类型定义 协议栈源码(码云/github)port/include/port/datatype.h中根据目标系统架构(16位 or 32位)及所使用的编译器定义基础数据类型及字 ...