HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    redis高可用集群(redis高可用集群搭建)

    发布时间:2023-04-13 14:14:41     稿源: 创意岭    阅读: 72        

    大家好!今天让创意岭的小编来大家介绍下关于redis高可用集群的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    redis高可用集群(redis高可用集群搭建)

    一、redis HA方案

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

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

    二、Redis哨兵集群

    Redis-Sentinel是redis官方推荐的高可用性解决方案,

    当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。

    而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,

    自动发现master宕机,进行自动切换slave > master

    每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

    如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

    如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

    当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线

    在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令

    当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次

    若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。

    若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

    主观下线和客观下线

    主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。

    客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.

    SDOWN适合于Master和Slave,只要一个 Sentinel 发现Master进入了ODOWN, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对下线的主服务器执行自动故障迁移操作。

    ODOWN只适用于Master,对于Slave的 Redis 实例,Sentinel 在将它们判断为下线前不需要进行协商, 所以Slave的 Sentinel 永远不会达到ODOWN。

    Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用:

    但是问题是:

    那么这个问题,redis-sentinel就可以解决了

    Redis的一个进程,但是不存储数据,只是监控redis

    本实验是在测试环境下,因此只准备一台linux服务器用作环境!!

    服务器环境,一台即可完成操作

    所有配置文件如下

    总体redis配置文件如下,6379为master,6380和6381为slave

    redis-6380.conf slave配置文件详解,6381端口的配置文件,仅仅和6380端口不一样

    在主节点上查看主从通信关系

    在从节点上查看主从关系(6380、6379)

    此时可以在master上写入数据,在slave上查看数据,此时主从复制配置完成

    redis-sentinel-26379.conf配置文件写入如下信息

    redis-sentinel-26380.conf和redis-sentinel-26381.conf的配置仅仅差异是port(端口)的不同。

    然后启动三个sentinel哨兵

    此时查看哨兵是否成功通信

    实例的思路

    首先查看三个Redis的进程状态

    第一个

    第二个

    第三个

    直接干掉master,然后等待其他两个节点是否能自动被哨兵sentienl,切换为master节点

    此时查看两个slave的状态

    然后会发现slave节点成为master节点!!

    三、linux 的环境搭建(二)--redis单机环境、生产环境、集群环境的搭建

    一、目录

    1、工具

    2、安装tcl

    3、安装单机版redis

    4、把redis设置为daemon进程,每次系统启动,redis进程一起启动

    5、安装redis cluster

    二、工具

    2.1、tcl8.6.1-src.tar.gz

    2.2、ruby-2.3.1.tar.gz

    2.3、redis-4.1.1.gem

    2.4、redis-3.2.8.tar.gz

    2.5、openssl-1.0.2r.tar.gz

    三、安装tcl(安装redis必须先要安装tcl)

    3.1、把tcl8.6.1-src.tar.gz通过WinSCP上传到虚拟机中的/usr/local目录下

    四、安装单机版redis

    4.1、把redis-3.2.8.tar.gz通过WinSCP上传到虚拟机中的/usr/local目录下

    4.2、依次运行如下命令:

    tar -zxvf redis-3.2.8.tar.gz 解压文件

    cd redis-3.2.8

    make && make test && make install

    五、把redis设置为daemon进程,每次系统启动,redis进程一起启动

    5.1、将redis的utils目录下的redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_6379,6379是我们希望这个redis实例监听的端口号

    5.2、修改redis_6379脚本的第6行的REDISPORT,设置为相同的端口号(默认就是6379)

    protected-mode no 取消保护模式,保护模式只能127.0.0.1访问

    daemonize yes 让redis以daemon进程运行

    pidfile /var/run/redis_6379.pid 设置redis的pid文件位置

    bind 192.168.3.110

    port 6379 设置redis的监听端口号

    dir /var/redis/6379 设置持久化文件的存储位置

    logfile /var/log/redis/6379.log 设置日志文件位置

    5.6、启动redis,依次执行:

    cd /etc/init.d,

    chmod 777 redis_6379,赋读写执行的权限(chmod -R 777 * 是递归把该目录下的所有文件和其子文件全部赋权限)

    ./redis_6379 start 启动

    5.7、确认redis进程是否启动,ps -ef | grep redis

    5.8、让redis跟随系统启动自动启动

    5.9、重启系统,不手动启动redis,直接连接redis,可以连接上,表示配置成功

    此时一个单机版的redis的生产环境已经搭建好了,每次服务器重启,redis都会自动的启动

    六、安装redis cluster

    (redis cluster集群,要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master都建议至少给一个slave,3个master,3个slave)

    6.1、前提,我在其它机器上启动了六个redis(安装步骤都如下)

    2.2、创建三个目录:

    mkdir -p /etc/redis-cluster 存放集群配置信息,自动生成配置

    mkdir -p /var/log/redis redis日志

    mkdir -p /var/redis/7001 存放redis的rdb文件和aof文件

    6.3、将redis的utils目录下的redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_7001,7001是我们希望这个redis实例监听的端口号,并修改redis_7001配置文件中的REDISPORT=7001

    6.4、修改/etc/redis/7001.conf中的部分配置为生产环境

    6.5、完成了一个redis环境的配置,依次再配置其余五个,分别为7002、7003、7004、7005、7006,每个启动脚本内,都修改对应的端口号

    6.6、启动6个redis实例

    6.7、创建集群(需要安装ruby、rubygems)

    上述命令在部分机器上是可以直接运行完成,成功安装的,但在部分机器上运行第三条命令时会提示ruby版本太低、openssl找不到的问题,下面依次解决这两个问题:

    6.8、再次运行gem install redis命令,报出两个错误

    6.9、再次运行gem install redis命令,报出一个错误

    6.10、再次运行gem install redis命令,报出一个错误

    6.11、再次运行gem install redis命令

    [root@ceshi01 local]# gem install redis

    Successfully installed redis-4.1.1

    Parsing documentation for redis-4.1.1

    Done installing documentation for redis after 1 seconds

    WARNING: Unable to pull data from ' https://rubygems.org/' : SSL_connect returned=1 errno=0 state=error: certificate verify failed ( https://api.rubygems.org/specs.4.8.gz )

    1 gem installed

    运行成功

    此时Redis安装好,此三个工具也安装好了,这时我们来做一个Redis集群测试,在一台服务器中创建了6个Redis实例,开启6个Redis服务

    redis-trib.rb create --replicas 1 192.168.3.104:7001 192.168.3.104:7002 192.168.3.105:7003 192.168.3.105:7004 192.168.3.106:7005 192.168.3.106:7006

    [root@eshop-cache02 init.d]# redis-trib.rb create --replicas 1 192.168.3.104:7001 192.168.3.104:7002 192.168.3.105:7003 192.168.3.105:7004 192.168.3.106:7005 192.168.3.106:7006

    此时一个redis集群环境就已经搭建好了,可以通过redis-trib.rb check 192.168.3.105:7003命令查看集群几点的信息

    [root@eshop-cache02 init.d]# redis-trib.rb check 192.168.3.105:7004

    redis cluster的优点:读写分离+高可用+多master

    读写分离:每个master都有一个slave

    高可用:master宕机,slave自动被切换过去

    多master:横向扩容支持更大数据量

    四、redis常见问题

    1. 缓存击穿

    缓存击穿是指一个请求要访问的数据,缓存中没有,但数据库中有的情况。这种情况一般都是缓存过期了。

    但是这时由于并发访问这个缓存的用户特别多,这是一个热点 key,这么多用户的请求同时过来,在缓存里面没有取到数据,所以又同时去访问数据库取数据,引起数据库流量激增,压力瞬间增大,直接崩溃给你看。

    所以一个数据有缓存,每次请求都从缓存中快速的返回了数据,但是某个时间点缓存失效了,某个请求在缓存中没有请求到数据,这时候我们就说这个请求就"击穿"了缓存。

    针对这个场景,对应的解决方案一般来说有三种。

    借助Redis setNX命令设置一个标志位就行。设置成功的放行,设置失败的就轮询等待。就是在更新缓存时加把锁

    后台开一个定时任务,专门主动更新过期数据

    比如程序中设置 why 这个热点 key 的时候,同时设置了过期时间为 10 分钟,那后台程序在第 8 分钟的时候,会去数据库查询数据并重新放到缓存中,同时再次设置缓存为 10 分钟。

    其实上面的后台续命思想的最终体现是也是永不过期。

    只是后台续命的思想,会主动更新缓存,适用于缓存会变的场景。会出现缓存不一致的情况,取决于你的业务场景能接受多长时间的缓存不一致。

    2. 缓存穿透

    缓存穿透是指一个请求要访问的数据,缓存和数据库中都没有,而用户短时间、高密度的发起这样的请求,每次都打到数据库服务上,给数据库造成了压力。一般来说这样的请求属于恶意请求。

    解决方案有两种:

    就是在数据库即使没有查询到数据,我们也把这次请求当做 key 缓存起来,value 可以是 NULL。下次同样请求就会命中这个 NULL,缓存层就处理了这个请求,不会对数据库产生压力。这样实现起来简单,开发成本很低。

    3. 缓存雪崩

    缓存雪崩是指缓存中大多数的数据在同一时间到达过期时间,而查询数据量巨大,这时候,又是缓存中没有,数据库中有的情况了。

    防止雪崩的方案简单来说就是错峰过期。

    在设置 key 过期时间的时候,在加上一个短的随机过期时间,这样就能避免大量缓存在同一时间过期,引起的缓存雪崩。

    如果发了雪崩,我们可以有服务降级、熔断、限流手段来拒绝一些请求,保证服务的正常。但是,这些对用户体验是有一定影响的。

    4. Redis 高可用架构

    Redis 高可用架构,大家基本上都能想到主从、哨兵、集群这三种模式。

    哨兵模式:

    它主要执行三种类型的任务:

    哨兵其实也是一个分布式系统,我们可以运行多个哨兵。

    然后这些哨兵之间需要相互通气,交流信息,通过投票来决定是否执行自动故障迁移,以及选择哪个从服务器作为新的主服务器。

    哨兵之间采用的协议是 gossip,是一种去中心化的协议,达成的是最终一致性。

    选举规则:

    以上就是关于redis高可用集群相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    Address怎么记忆(address记忆法)

    paper免费查重入口官网(paperfree免费查重入口官网)

    redis排行榜(redis排行榜实时更新)

    国内酱油品牌排行榜(中国酱油品牌排行榜前十名)

    成都眼科医院排行榜(成都眼科医院排名前三)