哨兵+redis主从部署架构-docker部署

架构图

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

配置sentinel


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

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

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

主从节点都启动redis容器

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

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

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

Original: https://www.cnblogs.com/Dev0ps/p/15775244.html
Author: 落魄运维
Title: 哨兵+redis主从部署架构-docker部署

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529008/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL之变量

    mysql变量分类: 系统变量:系统自带的变量 状态变量:用于设置或保存系统的运行状态 用户自定义变量:用户自定义的变量 系统变量 使用@@标识一个系统变量,系统变量分为全局(gl…

    Linux 2023年6月7日
    0118
  • Vimrc 配置文件

    配置信息 在linux当中保存在 ~/.vimrc, windows 存放在 ~/_vimrc 如果是 nvim 就放在 AppData\Local\nvim\init.vim 配…

    Linux 2023年6月7日
    086
  • Linux与Windows文件同步

    本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限、时间、软硬链接。第一次同步时会复制全部内容,下次只传…

    Linux 2023年6月8日
    0135
  • C 中的字符数组

    在C语言中没有专门的字符串变量,字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。通常用一个 字符数组来存…

    Linux 2023年6月13日
    094
  • PYTORCH: 60分钟 | 训练一个分类器

    你已经知道怎样定义神经网络,计算损失和更新网络权重。现在你可能会想, 那么,数据呢? 通常,当你需要解决有关图像、文本或音频数据的问题,你可以使用python标准库加载数据并转换为…

    Linux 2023年6月16日
    0194
  • Linux系统编程 —线程同步概念

    同步概念 同步,指对在一个系统中所发生的事件之间进行协调,在时间上出现一致性与统一化的现象。 但是,对于不同行业,对于同步的理解略有不同。比如:设备同步,是指在两个设备之间规定一个…

    Linux 2023年6月14日
    096
  • redis之SDS

    SDS:的优点1.获取长度复杂度为O(1)2.避免strcat内存重分配(可能涉及系统调用), 通过[预分配策略]和[惰性空间释放]实现 3.以二进制存储,主要是安全设计,若存储的…

    Linux 2023年5月28日
    084
  • POJ1322Chocolate–概论DP

    每次从包装中取出一块巧克力并放在桌子上。如果桌子上有两个相同颜色的巧克力,则将这两个丢掉。如果包中有C种颜色的巧克力(颜色均匀分布),从包装中取出N个巧克力后,桌子上确实有M个巧克…

    Linux 2023年6月7日
    0118
  • wordpress固定链接+宝塔nginx配置伪静态访问URL

    一、站点设置 打开站点设置,选择伪静态,选择wordpress 二、wordpress设置 打开wordpress后台,选择 设置 —》固定链接 选择一个你喜欢的格式点…

    Linux 2023年6月14日
    0101
  • 在自己的项目中使用PCL

    在自己的项目中使用PCL项目设置:1、创建cpp文件,如pcd_write.cpp,文件内容如下例: #include find_package(PCL 1.3 REQUIRED …

    Linux 2023年5月27日
    080
  • null和空字符串对于查询where条件语句的影响

    在数据库中我们进行数据处理的过程中,对于null值或者空字符串的情况对于这种数据我们进行计算平均值以及查询过程中如何进行对于这类数据的处理呢? step1:建表:create ta…

    Linux 2023年6月14日
    097
  • Golang 实现 Redis(9): 使用GeoHash 搜索附近的人

    本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人。 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维…

    Linux 2023年5月28日
    0116
  • python_列表

    列表创建 列表类似数组,但是以一对方括号 []作为符号,同时支持-1到-n的下标访问。列表中包含的是元素值的引用 并且,列表中的元素可以不是同一类型的 列表的创建: listNew…

    Linux 2023年6月7日
    0147
  • JMeter压测出现“the target server failed to respond“的解决办法

    压测接口的时候,遇到了这个问题,在网上找到解决方案,试一下还挺管用,800并发没改前20%以上的报错率,改完800并发0.00%报错率。 感谢曲健老师的分享 解决方案如下: 修改执…

    Linux 2023年6月8日
    085
  • 真正的mybatis_redis二级缓存

    网上流传的代码缓存失效存在严重问题。 思路….以后再细说 目前的方案还不够完美,失效力度控制不够细。 主要代码 java;gutter:true; import jav…

    Linux 2023年5月28日
    0124
  • bash是什么?

    ​ –解释器,启动器 ​ –解释器: ​ 用户交互输入 如vim 文本文件输入 !/bin/bash *!/usr/bin/python bash/sh f…

    Linux 2023年5月27日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球