架构图

  1. 哨兵的介绍

    sentinel , 中文是哨兵。

    哨兵是redis 集群架构中非常重要的一个组件,主要功能如下:

    (1)集群监控:负责监控reidis master 和slave 进程是否正常工作;

    (2)消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员;

    (3)故障转移:如果master node挂掉了,会自动转移到slave node上;

    (4)配置中心:如果故障转移发生了,通知client 客户端新的master 地址;

    哨兵本身也是分布式的作为一个哨兵集群去运行,互相协同工作;

    (1)故障转移时, 判断一个master node宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题;

    (2)即使部分哨兵节点挂了,哨兵集群还是能正常工作的,因为如果 一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就坑爹了;目前采用的是sentinel 2 版本,sentinel2 相对于 sentinel 1 来说,重写了很多代码,主要是让故障转移的机制和算法变得更加健壮和简单。
  2. 哨兵的核心知识

    (1)哨兵至少需要3个实例,来保证自己的健壮性;

    (2)哨兵+redis 主从的部署架构,是不会保证数据0丢失的,只能保证redis 集群的高可用性;

    (3)对于哨兵+redis主从这种负责的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练

部署

准备docker环境

hostnamectl set-hostname  l-gz-txy-lyy-uat-redis-master-001

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
systemctl enable docker

三台虚拟机

10.180.3.125:7000 主节点

10.180.3.181:7000 从节点

10.180.3.90:7000 从节点

主节点创建redis data和conf目录

mkdir -p /data/redis/7000
mkdir /data/redis/7000/conf
mkdir /data/redis/7000/data
cd /data/redis/7000/conf

修改redis.conf主要配置

cat > /data/redis/7000/conf/redis.conf <<EOF
port 7000
masterauth "YACEheyuan@123"
requirepass "YACEheyuan@123"
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
#logfile "/var/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-timeout 1
repl-disable-tcp-nodelay no
replica-priority 100
maxmemory 1024000kb
maxmemory-policy volatile-lru
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 512mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
EOF

配置sentinel


cat >/data/redis/7000/conf/sentinel.conf <<EOF
port 27000
daemonize yes
sentinel monitor mymaster 10.180.3.125 7000 1
sentinel auth-pass mymaster YACEheyuan@123
EOF

拷贝整个/data/redis目录到备节点

scp -r /data/redis root@10.180.3.181:/data/

主从节点都启动redis容器

cat >start.sh<<EOF
docker run -d -ti -p 7000:7000 -p 27000:27000 \
-v /data/redis/7000/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /data/redis/7000/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-v /data/redis/7000/data:/data \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
--privileged=true --restart always --name redis_7000 \
uhub.service.ucloud.cn/jackhe/redis-sentinel:latest redis-server /usr/local/etc/redis/redis.conf
EOF
chmod +x start.sh
sh start.sh

从节点进去容器,设置自己为从节点

docker exec -it  redis_7000  bash
redis-cli -h 127.0.0.1 -c -p 7000 -a YACEheyuan@123
SLAVEOF 10.180.3.125 7000

分别进去主从节点的容器,启动sentinel

redis-sentinel /usr/local/etc/redis/sentinel.conf

输入info查看是否设置成功

启动完成后,关闭主节点redis容器,等待30秒查看备节点是否切换为主节点

启动回主节点redis容器,查看主节点是否已经作为备节点连接上,同时启动sentinel

部署逻辑

docker 启动redis——》从节点声明为slave——》启动sentinel

验证可用性

  • 在master上set key
# Keyspace
127.0.0.1:7000> set a 1
OK
127.0.0.1:7000> get a
"1"
  • 在任意slave上get
# Keyspace
127.0.0.1:7000> get a
"1"
  • 脚本测试
from redis.sentinel import Sentinel
sentinel = Sentinel([('10.180.3.198', 27000)],
password='YACEheyuan@123',socket_timeout=0.5)
master = sentinel.discover_master("mymaster")
print(master)

压测

redis-benchmark -h 10.180.3.125 -p 27000 -a YACEheyuan@123 -c 100 -n 100000 -q

dokcer部署Redis哨兵模式的更多相关文章

  1. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...

  2. Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步

    Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.

  3. helm部署Redis哨兵集群

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

  4. Redis哨兵模式大key优化

    目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中.        涉及到的key如下: 0,hash,duser_record, ...

  5. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

  6. Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存

    本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...

  7. Redis 哨兵模式(Sentinel)

    上一篇我们介绍了 redis 主从节点之间的数据同步复制技术,通过一次全量复制和不间断的命令传播,可以达到主从节点数据同步备份的效果,一旦主节点宕机,我们可以选择一个工作正常的 slave 成为新的主 ...

  8. 搭建redis哨兵模式

    搭建redis哨兵模式,一主两从三哨兵   1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...

  9. Redis哨兵模式的配置

    绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...

随机推荐

  1. SQL Server中修改“用户自定义表类型”问题的分析与方法

    前言 SQL Server开发过程中,为了传入数据集类型的变量(比如接受C#中的DataTable类型变量),需要定义"用户自定义表类型",通过"用户自定义表类型&quo ...

  2. uniapp实现钉钉扫码登录

    由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登录第三方网站 - ...

  3. 度量驱动的DevOps实现

    目录 一.简介 二.度量是什么 三.实践 四.QA问答 一.简介 Wiki上讲:DevOps(Development和Operations的组合词)是一种重视"软件开发人员(Dev)&quo ...

  4. pipeline 步骤

    目录 一.简介 二.文件相关 删除当前目录 切换到目录 判断文件是否存在 判断是否为类Unix 返回当前目录 将内容写入文件 读取文件内容 二.制品相关 存取临时文件 三.命令相关 script sh ...

  5. centos配置 显示中文

    目录 一.简介 二.操作 一.简介 不显示中文,出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的. 二.操作 1.查看当前系统语言 登陆linux系统打开操作终端之后,输入 e ...

  6. C# 使用163的SMTP服务器发送邮件

    string Receiver, string Subject, string content: //163邮箱发送配置 client = new System.Net.Mail.SmtpClient ...

  7. Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现

    要说现在工程师最重要的能力,我觉得工程能力要排第一. 就算现在大厂面试经常要手撕算法,也是更偏向考查代码工程实现的能力,之前在群里看到这样的图片,就觉得很离谱. 算法与工程实现 在 Sentinel- ...

  8. CF984B Minesweeper 题解

    Content 有一个 \(n\times m\) 的扫雷地图,请判断这个地图是否合法,即对于所有格子,是否满足: 对应点的数字周围必须有对应数字个雷 空的地方周围没有雷 数据范围:\(1\leqsl ...

  9. AT2287 [ARC067B] Walk and Teleport 题解

    Content 一条直线上有 \(n\) 个城市,第 \(i\) 个城市的坐标为 \(x_i\).你在某一个城市内,每一次你可以按两种方式之一进行移动: 左右移动,每移动一个单位疲劳值增加 \(a\) ...

  10. RIP2与OSPFv2 动态路由协议区别

    OSPF五种报文解析 Hello:招呼信息 Route-ID:换回口地址/活动的物理接口最大值 Hello作用: 1. 发现邻居 2. 对一些数据的协商 3. 保持邻居的Keeplive状态.选举DR ...