Redis深入实践(一)使用docker构建Redis集群

在上篇文章介绍了Redis的基本使用https://blog.csdn.net/qq_37256896/article/details/86664097,在这里我们使用docker构建Redis,以及使用sentinel构建redis实现高可用监控。

 HA(High Available,高可用性群集)机集群系统简称,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。
         通常把正在执 行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,
         备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。

        Redis 一般以主/从方式部署(这里讨论的应用从实例主要用于备份,主实例提供读写)该方式要实现 HA 主要有如下几种方案:

        keepalived: 通过 keepalived 的虚拟 IP,提供主从的统一访问,在主出现问题时, 通过 keepalived 运行脚本将从提升为主,待主恢复后先同步后自动变为主,该方案的好处是主从切换后,应用程序不需要知道(因为访问的虚拟 IP 不变),坏处是引入 keepalived 增加部署复杂性,在有些情况下会导致数据丢失
        
        zookeeper: 通过 zookeeper 来监控主从实例, 维护最新有效的 IP, 应用通过 zookeeper 取得 IP,对 Redis 进行访问,该方案需要编写大量的监控代码
        
        sentinel: 通过 Sentinel 监控主从实例,自动进行故障恢复,该方案有个缺陷:因为主从实例地址( IP & PORT )是不同的,
                    当故障发生进行主从切换后,应用程序无法知道新地址,故在 Jedis2.2.2 中新增了对 Sentinel 的支持,
                    应用通过 redis.clients.jedis.JedisSentinelPool.getResource() 取得的 Jedis 实例会及时更新到新的主实例地址  做位缓存,session分离,应用排行榜。

介绍下使用sentinel:

Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis部署,在没有人为干预的情况下抵抗某些类型的故障。

RedisSentinel还提供其他辅助任务,如监视、通知,并充当客户端的配置提供者。

这是整个哨兵能力的宏观层面(即总体情况)列表:

  • 监控。Sentinel会不断检查您的主实例和从实例是否按预期工作。
  • 通知。Sentinel可以通过API通知另一个计算机程序System Administrator,其中一个受监控的Redis实例有问题。
  • 自动故障转移。如果主服务器不能按预期工作,Sentinel可以启动故障转移过程,其中从服务器升级为主服务器,其他附加的从服务器将重新配置为使用新的主服务器,并且使用Redis服务器的应用程序将在连接时使用的新地址告知。
  • 配置提供程序。Sentinel充当客户端服务发现的授权来源:客户端连接到Sentinel以请求负责给定服务的当前Redis主机的地址。如果发生故障转移,sentinels将报告新地址。

Redis Sentinel是一个分布式系统:

Sentinel本身设计为在多个Sentinel进程协作的配置中运行。多个sentinel进程协作的优势如下:

  • 当多个哨兵同意一个给定的主机不再可用时,就会执行故障检测。这降低了误报的可能性。
  • 即使不是所有的Sentinel进程都在工作,Sentinel也能工作,使系统能够抵御故障。毕竟,拥有一个故障转移系统本身就是一个单一的故障点是没有乐趣的。

Sentinel、Redis实例(主服务器和从服务器)以及连接到Sentinel和Redis的客户机的总和,也是一个具有特定属性的大型分布式系统。在本文件中,将逐步引入概念,从了解哨兵基本特性所需的基本信息开始,到更复杂的信息(可选),以了解哨兵的工作原理。

实战搭建redis集群:

在docker基础上搭建:在docker目录下创建redis目录和sentinel目录:

 创建redis文件夹:
           搭建一主两从环境创建docker-compose.yml
           version: '3.1'
            services:
            master:
                image: redis
                container_name: redis-master
                ports:
                - 6379:6379

            slave1:
                image: redis
                container_name: redis-slave-1
                ports:
                - 6380:6379
                command: redis-server --slaveof redis-master 6379

            slave2:
                image: redis
                container_name: redis-slave-2
                ports:
                - 6381:6379
                command: redis-server --slaveof redis-master 6379  
        启动redis:
                docker-compose up -d

使用 Sentinel 监控主从实例:

 创建sentinel文件在docker目录下:
                创建docker-compose.yml文件:
                version: '3.1'
                services:
                sentinel1:
                    image: redis
                    container_name: redis-sentinel-1
                    ports:
                    - 26379:26379
                    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
                    volumes:
                    #数据卷
                    - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf

                sentinel2:
                    image: redis
                    container_name: redis-sentinel-2
                    ports:
                    - 26380:26379
                    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
                    volumes:
                    - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf

                sentinel3:
                    image: redis
                    container_name: redis-sentinel-3
                    ports:
                    - 26381:26379
                    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
                    volumes:
                    - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf     
            修改Sentinel文件:分别为 sentinel1.conf,sentinel2.conf,sentinel3.conf,配置文件内容相同
            配置内容如下:
                port 26379
                dir /tmp
                # 自定义集群名,其中 127.0.0.1 为 redis-master 的 ip,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
                sentinel monitor mymaster 192.168.147.132 6379 2
                sentinel down-after-milliseconds mymaster 30000
                sentinel parallel-syncs mymaster 1
                sentinel failover-timeout mymaster 180000
                sentinel deny-scripts-reconfig yes
            启动集群:
                    docker-compose up -d

 启动集群:
                    docker-compose up -d

            查看集群是否生效:进入 Sentinel 容器,使用 Sentinel API 查看监控情况:
                docker exec -it redis-sentinel-1 /bin/bash
                redis-cli -p 26379
                sentinel master mymaster
                sentinel slaves mymaster
            生效后即可:

测试生效:进入容器查看主节点的信息即生效。接下来即可以实战了。这样redis集群就搭建成功了,是不是使用docker来搭建很简单呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值