Redis哨兵集群搭建-Docker-Compose
title: Redis哨兵集群搭建(Docker-Compose)
date: 2022-09-27 17:00:56
tags:
- Redis
代码地址:https://github.com/li-zheng-hao/redis-sentinel-docker-compose
部署方式
一主两从三哨兵:
- 1个主节点
- 2个从节点
- 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
其中几个注意点:
network_mode
使用的是host模式,所以不需要绑定端口- 由于这个脚本是两个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
如果有以下需求,建议手动挂载:
- 设置最大内存限制
- 设置数据存储策略(AOF或RDB,定时存储的频率),默认的是RDB,没有开启AOF
- 挂载数据,保存到宿主机上防止容器被删数据丢失
哨兵脚本
下面是部署三个哨兵的脚本
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
注意点:
- 同样都是部署在同一台服务器,因此需要对三个哨兵分别配置端口
- 配置脚本需要复制三份,因为哨兵进程会对这个文件写入一些配置,因此不能用同一份共享
如果要分成多个服务器进行部署,需要改写成下面这样:
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的更多相关文章
- redis哨兵集群搭建
下载redis jar包redis-4.0.11.tar.gz放在/data/redis目录下 解压 命令:tar -zxvf redis-4.0.11.tar.gz 解压后如图所示 在/usr/lo ...
- redis哨兵集群、docker入门
redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...
- Redis本地集群搭建(5版本以上)
Redis本地集群搭建(5版本以上) 2019年11月3日10:05:48 步骤 1.下载安装Redis的安装包 2.复制5份,一共6份Redis的解压安装版,修改每个Redis节点的端口并开启节点 ...
- Linux - redis哨兵集群实例
目录 Linux - redis哨兵集群实例 命令整理 配置流程 Linux - redis哨兵集群实例 命令整理 官网地址:http://redisdoc.com/ redis-cli info # ...
- helm部署Redis哨兵集群
介绍 Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现.故障自动转移.配置中心和客户端通知. 如下图: Redis Sentinel 故障转移过程: 从这 ...
- 11.Redis 哨兵集群实现高可用
作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...
- python连接redis哨兵集群
一.redis集群模式有多种, 哨兵模式只是其中的一种实现方式, 其原理请自行谷歌或者百度 二.python 连接 redis 哨兵集群 1. 安装redis包 pip install redis 2 ...
- redis的集群搭建(很详细很详细)
说在前面的话 之前有一节说了redis单机版的搭建和使用jedis管理redis单机版和集群版, 本节主要讲一下redis的集群搭建. 跳转到jedis管理redis的使用 认识redis集群 首先我 ...
- linux环境下redis安装(redis伪集群搭建)
redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...
- 单台服务器-利用docker搭建Redis哨兵集群模式
前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...
随机推荐
- 4.httprunner-参数化和数据驱动
前言 参数化在config中使用parameters关键字 httprunner2.x 是在testsuite中实现参数化 httprunner3.x 是在testcase中的config实现参数化 ...
- 3.CBV视图之csrf补充
CBV使用csrf装饰器关闭/开启 csrf验证,直接在函数上加装饰器无效的 #方法1 from django.views import View from django.views.decorato ...
- 快读《ASP.NET Core技术内幕与项目实战》EFCore2.5:集合查询原理揭秘(IQueryable和IEnumerable)
本节内容,涉及4.6(P116-P130).主要NuGet包:如前述章节 一.LINQ和EFCore的集合查询扩展方法的区别 1.LINQ和EFCore中的集合查询扩展方法,虽然命名和使用完全一样,都 ...
- pytorch 环境配置
一.下载Anaconda 二.添加清华镜像 # 添加清华镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anac ...
- POC、EXP、SRC概念厘清
「POC」 POC可以看成是一段验证的代码,就像是一个证据,能够证明漏洞的真实性,能证明漏洞的存在即可. https://zhuanlan.zhihu.com/p/26832890 「EXP」 ...
- 聊一聊对一个 C# 商业程序的反反调试
一:背景 1.讲故事 前段时间有位朋友在微信上找到我,说他对一个商业的 C# 程序用 WinDbg 附加不上去,每次附加之后那个 C# 程序就自动退出了,问一下到底是怎么回事?是不是哪里搞错了,有经验 ...
- spalsh安装及简单使用
selenium是浏览器测试自动化工具,很容易完成鼠标点击,翻页等动作,确定是一次只能加载一个页面,无法异步渲染页面,也就限制了selenium爬虫的抓取效率. splash可以实现异步渲染页面,可以 ...
- 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群
环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/ ...
- 出现The server time zone value ‘�й���ʱ��‘ is unrecognized的解决方法
使用mybatis链接数据库时出现如下错误, The server time zone value '�й���ʱ��' is unrecognized or represents more tha ...
- onps栈移植说明(2)——编译器及os适配层移植
2. 字节对齐及基础数据类型定义 协议栈源码(码云/github)port/include/port/datatype.h中根据目标系统架构(16位 or 32位)及所使用的编译器定义基础数据类型及字 ...