redis主从复制及哨兵模式配置

redis的主从复制

redis的主从复制是值主机更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为 主。一个master可以有多个slave。

通过主从复制可以实现:

  • 读写分离,性能扩展,降低主服务器的压力
  • 容灾,快速恢复,主机挂掉时,从机变为主机

**使用主从复制的原因:**避免单点故障。

单点故障:指由于redis服务器无法正常访问,导致redis存储的数据无法读取

配置了主从复制的redis,主机可以读数据,也可以写入数据,但是从机只能读数据,不能写数据。

1、配置主1从2

此处通过配置不同的端口号来区分主机和从机,实际应用是在不同的服务器上配置ip地址来实现。这里配置3台机器,主1从2。

角色端口
master(主6379
slave1(从)6380
slave2(从)6381

主从复制原理:

  • slave启动成功连接到master后,会给master发送数据同步消息(发送sync命令)
  • master接收到slave发来的数据同步消息后,把主服务器的数据进行持久化到rdb文件,同时会收集接收到的用于修改数据的命令,master将传rdb文件发送给你slave,完成一次完全同步
  • 全量复制:而slave服务在接收到master发来的rdb文件后,将其存盘并加载到内存
  • 增量复制:master继续将收集到的修改命令依次传给slave,完成同步 但是只要重新连接master,一次完全同步(全量复制)将会被自动执行

1.1、通过配置文件配置

  1. 创建工作目录

    通过命令创建目录,本次所有操作均在此目录中执行

    mkdir /opt/master-slave
    cd /opt/master-slave/
    
  2. 安装三台redis服务器在master-slave目录中,分别是6379,6380,6381(为了区分是哪台机器),安装过程见redis基本概念及环境配置,使用压缩包安装。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KMfHuZs-1652319870658)(images\7、redis的主从复制\image-20220429191008541.png)]

  3. 进入redis安装文件目录把redis安装文件里的redis.conf文件复制到master-slave目录

    cp redis.conf /opt/master-slave/
    
  4. 创建master(主机)的配置文件redis-6379.cof,内容如下

    # redis.conf是redis原配置文件,内部包含了很多默认的配置,这里使用include将其引用,相当于把redis.conf内容直接贴进来了
    include /opt/master-slave/redis.conf
    # 使用后台启动
    daemonize yes
    # 配置ip地址
    bind 192.168.170.131
    # 配置密码
    requirepass 123456
    dir /opt/master-slave/
    logfile /opt/master-slave/6379.log
    # 端口
    port 6379
    #rdb文件
    dbfilename dump_6379.rdb
    # pid文件
    pidfile /var/run/redis_6379.pid
    
  5. 创建slave1(从机)的配置文件redis-6380.conf,主要内容和master一致,只是多了从机的配置信息,内容如下

    include /opt/master-slave/redis.conf
    daemonize yes
    bind 192.168.170.131
    requirepass 123456
    dir /opt/master-slave/
    port 6380
    dbfilename dump_6380.rdb
    pidfile /var/run/redis_6380.pid
    logfile /opt/master-slave/6380.log
    
    # 用来指定主机:slaveof 主机ip 端口
    slaveof 192.168.170.131 6379
    # 主机的密码
    masterauth 123456
    
  6. 创建slave2(从机)的配置文件redis-6381.conf,内容如下

    include /opt/master-slave/redis.conf
    daemonize yes
    bind 192.168.170.131
    requirepass 123456
    dir /opt/master-slave/
    port 6381
    dbfilename dump_6381.rdb
    pidfile /var/run/redis_6381.pid
    logfile /opt/master-slave/6381.log
    
    # 用来指定主机:slaveof 主机ip 端口
    slaveof 192.168.170.131 6379
    # 主机的密码
    masterauth 123456
    
  7. 分别进入主从机的bin目录,后台启动主机和从机。

    # 启动主机
    ./redis-server /opt/master-slave/redis-6379.conf
    
    #启动slave1
    ./redis-server /opt/master-slave/redis-6380.conf
    #启动slave2
    ./redis-server /opt/master-slave/redis-6381.conf
    
  8. 查看是否启动成功,如果启动失败说明配置文件出错,查看配置文件配置即可

     ps -ef|grep redis
    
    image-20220429194616621

    显示如上信息则配置成功。

  9. 进入任意一个主机的bin目录,使用redis-cli连接上redis主机(master)

     ./redis-cli -h 192.168.170.131 -p 6379 -a 123456
    

    输入info Replication查看主机信息

    image-20220429195145692
  10. 存入数据进行验证,登录主机存入的数据在从机上会自动复制

1.2、通过命令配置主1从2

  1. 主从机的安装和上面通过配置文件配置一样,这里的配置文件里就不需要配置从机的slaveof属性而是通过命令完成主从配置。三个配置文件的信息只需要删除从机的下列配置即可

    # 用来指定主机:slaveof 主机ip 端口
    slaveof 192.168.170.131 6379
    # 主机的密码
    masterauth 123456
    
  2. 分别启动三台机器,同上述第7步。

  3. 分别登录两台从机(6380和6381),设置master的密码并指定主机

    # 登录从机
    redis-cli -h 192.168.200.129 -p 6380 -a 123456
    
    #设置主机密码,因为主机是有密码的,所以需要指定masterauth的密码才可以同步数据
    config set masterauth 123456
    #设置该机器为master的从机
    slaveof 192.168.170.131 6379
    

2、哨兵模式

反客为主的自动版,能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个 作为master,其他的slave会自动转向同步新的master,实现故障自动转义。

反客为主:当master挂掉之后,我们可以从slave中选择一个作为主机。登录从机执行下列命令即可

slaveof no one

此时slave1就变成主机了,然后再去其他slave上面执行 slaveof 命令将其挂在slave1上。

这种主备切换有个缺点:需要手动去执行命令去操作,不是太方便。

原理:sentinel会按照指定的频率给master发送ping请求,看看master是否还活着,若master在指定时间内未 正常响应sentinel发送的ping请求,sentinel则认为master挂掉了,但是这种情况存在误判的可能,比 如:可能master并没有挂,只是sentinel和master之间的网络不通导致,导致ping失败。 为了避免误判,通常会启动多个sentinel,一般是奇数个,比如3个,那么可以指定当有多个sentinel都 觉得master挂掉了,此时才断定master真的挂掉了,通常这个值设置为sentinel的一半,比如sentinel 的数量是3个,那么这个量就可以设置为2个。当多个sentinel经过判定,断定master确实挂掉了,接下来sentinel会进行故障转移:会从slave中投票选出一个服务器,将其升级为新的主服务器, 并让失效主服务器的其他从服务器slaveof指向新的主服务 器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以 使用新主服务器代替失效服务器。

2.1、配置1主2从3个哨兵

这里演示在同一个机子上配置,通过改端口号来实现1主2从3个哨兵的配置。节点配置信息:

角色端口
master6379
slave16380
slave16381
sentinel16382
sentinel26383
sentinel36384

这里的主机和从机可以使用上面配置好的主从机,直接配置哨兵即可。哨兵也是redis服务器,所以这里还需要安装三个redis,也安装在/opt/master-slave目录中即可。

  1. 配置sentinel1的配置文件:sentinel-6382:

    # 配置文件目录
    dir /opt/master-slave/
    # 日志文件位置
    logfile "./sentinel-26379.log"
    # pid文件
    pidfile /var/run/sentinel_26379.pid
    # 是否后台运行
    daemonize yes
    # 端口
    port 6382
    # 监控主服务器master的名字:mymaster,IP:192.168.170.131,port:6379,最后的数字2表示当Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
    sentinel monitor mymaster 192.168.170.131 6379 2
    # master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping不通master,则主观认为master不可用
    sentinel down-after-milliseconds mymaster 60000
    # 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
    sentinel failover-timeout mymaster 180000
    # 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理解为1是串行复制,大于1是并行复制
    sentinel parallel-syncs mymaster 1
    # 指定mymaster主的密码(没有就不指定)
    sentinel auth-pass mymaster 123456
    
  2. sentinel2和sentinel3与sentinel1的配置只有端口号不同,所以直接复制sentinel-6382后修改端口号即可

    # sentinel2的配置
    cp sentinel-6382.conf sentinel-6383.conf
    # sentinel3的配置
    cp sentinel-6382.conf sentinel-6384.conf
    

    使用vi命令分别进入sentinel-6383.confsentinel-6384.conf,修改port63836384

  3. 启动3个sentinel

    启动sentinel有两种方式

    • 方式1:./redis-server sentinel.conf --sentinel
    • 方式2:redis-sentinel sentinel.conf

    这里使用方式2来启动3个sentinel,分别进入到sentinel的bin目录,执行命令启动

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0gjqG0J-1652319870662)(images\7、redis的主从复制\image-20220429211621413.png)]

  4. 查看sentinel的信息,这里以sentinel1为例:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJMzyT3v-1652319870663)(images\7、redis的主从复制\image-20220429212050276.png)]

  5. 验证故障转移:在master中执行命令,停止master

    192.168.170.131:6379> shutdown
    

    等待两分钟,让系统完成故障转移。

    之后查看slave1的主从信息,可以看到,现在该从机已经成为了主机,但是有的时候是另一个从机变成主机。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxgoKZCQ-1652319870663)(images\7、redis的主从复制\image-20220429213840843.png)]

  6. 这时候如果旧的主机(6379)重新恢复工作,那么6379会成为一个从机。

2.2、springboot整合sentinel

导入架包之类的就不说了,只需要在application.yml中配置如下代码:

# redis sentinel主服务名,来源于:sentinel配置文件中sentinelmonitor后面跟的那个名称
spring.redis.sentinel.master=mymaster
# sentinel节点列表(host:port),多个之间用逗号隔开
spring.redis.sentinel.nodes=192.168.170.131:8082,192.168.170.131:8083,192.168.170.131:8084
# sentinel密码
#spring.redis.sentinel.password=
# 连接超时时间(毫秒)
spring.redis.timeout=60000
# Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
spring.redis.database=0

配置这些信息即可,其他用法和在不同项目中使用redis中springboot中使用一致。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值