zoukankan      html  css  js  c++  java
  • redis 主从及哨兵模式

    redis 主从复制相关

    #一般是主写从读,由主去主动同步数据到从
    从服务器配置

    vi redis.conf
    slaveof 192.168.11.128 6379
    masterauth 123456              #主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置

    配置主从复制方式二、redis-server --slaveof 192.168.152.128 6379 临时生效
    查看状态:info replication
    断开主从复制:在slave节点,执行6380:>slaveof no one
    断开后再变成主从复制:6380:> slaveof 192.168.152.128 6379
    数据较重要的节点,主从复制时使用密码验证: requirepass
    从节点建议用只读模式slave-read-only=yes, 若从节点修改数据,主从数据不一致
    传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis提供repl-disable-tcp-nodelay参数决定是否关闭TCP_NODELAY,默认为关闭
    参数关闭时:无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景,
    参数启用时:主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,主从的同步延迟40毫秒,适用于网络环境复杂或带宽紧张,如跨机房

    一主一从模式

    用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要),这样即保证了数据的安全性,也避免持久化对主节点的影响

    一主多从模式

    针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定
    树状一主多从:一主多从的缺点(主节点推送次数多压力大)可用些方案解决,主节点只推送一次数据到从节点B,再由从节点B推送到C,减轻主节点推送的压力

    数据同步

    redis 2.8版本以上使用psync命令完成同步,过程分“全量”与“部分”复制
    全量复制:一般用于初次复制场景(第一次建立SLAVE后全量)
    部分复制:网络出现问题,从节点再次连接主节点时,主节点补发缺少的数据,每次数据增量同步
    心跳:主从有长连接心跳,主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率
    主从的缺点
    a)主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主
    b)主从复制主节点的写能力单机,能力有限
    c)单机节点的存储能力也有限
    6.主从故障如何故障转移
    a)主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点;
    b)其它的节点成为新主节点的从节点,并从新节点复制数据;
    c)需要人工干预,无法实现高可用。

    redis-哨兵模式

    哨兵模式是主从基础上的增强版。依然存在主从角色,只是主挂了会自动把从切换为主。

    哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

    这里的哨兵有两个作用

    通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
    当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机
    然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

    用文字描述一下故障切换(failover)的过程

    假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。
    当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。
    切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

    Redis配置哨兵模式

    服务类型 是否是主服务器 IP地址 端口
    Redis    是    192.168.11.128    6379
    Redis 否 192.168.11.129 6379
    Redis 否 192.168.11.130 6379
    Sentinel - 192.168.11.128 26379
    Sentinel - 192.168.11.129 26379
    Sentinel - 192.168.11.130 26379
    首先配置Redis的主从服务器,修改redis.conf文件如下
    bind 0.0.0.0    # 使得Redis服务器可以跨网络访问
    requirepass "123456"    # 设置密码
    slaveof 192.168.11.128 6379    # 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
    masterauth 123456    # 主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
    上述内容主要是配置Redis服务器,从服务器比主服务器多一个slaveof的配置和密码。

    配置3个哨兵,每个哨兵的配置都是一样的。在Redis安装目录下有一个sentinel.conf文件,copy一份进行修改
    protected-mode no # 禁止保护模式
    sentinel monitor mymaster 192.168.11.128 6379 2 # 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,
    可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
    sentinel auth-pass mymaster 123456 # sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码

    启动流程:

    # 启动Redis服务器进程
    ./redis-server ../redis.conf
    # 启动哨兵进程
    ./redis-sentinel ../sentinel.conf

    注意启动的顺序。首先是主机(192.168.11.128)的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。

    应用程序连接哨兵模式方法

    sentinel:
    nodes: 192.168.43.234:26379,192.168.43.234:26380,192.168.43.234:26381
    master: mymaster
  • 相关阅读:
    javascript中事件
    pku 1836 Alignment
    pku 3086 Triangular Sums
    [转]asp格式化日期
    用数组作checkboxlist数据源
    (转)Membership、MembershipUser和Roles类 详解
    asp中判断 checkbox 是否选中
    使用 AddRange 方法将多个 ListItem 对象添加到集合
    My97DatePicker,一个兼容所有浏览器的日历选择脚本(相当经典)
    .Net下批量删除数据的存储过程问题(用动态SQL )
  • 原文地址:https://www.cnblogs.com/fanggege/p/13195443.html
Copyright © 2011-2022 走看看