7_Redis 主从复制和哨兵机制

1.是什么

        主机数据更新后根据配置和策略,自动同步到备机的master/slaver 机制,Master以写为主,Slave以读为主

2.能干什么

       1.读写分离

        2.容灾恢复

3.怎么玩

       1.配从(库)不配主(库)
       2.从库配置:slaveof  主库ip  主库端口
            每次与master断开之后,都需要重新连接,除非配置redis.conf文件
            info replication 查看当前redis 角色
            
        3.修改配置文件细节操作
            1.拷贝多个redis.conf文件
                cp /myredis/redis.conf redis6379.conf
                cp /myredis/redis.conf redis6380.conf
                cp /myredis/redis.conf redis6381.conf
                
                vim redis6379.conf
                    
            2.开启daemonize yes
            
            3.pid 文件名
                修改
                pidfile /var/run/redis.pid
                为
                pidfile /var/run/redis6379.pid
                
            4. 指定端口

                6379
                
            5.log文件名字
                修改
                logfile ""
                为
                logfile "6379.log"
                
            6.Dump.rdb名字
               修改
                dbfilename dump.rdb
                为
                dbfilename dump6379.rdb    
                
                修改6380,6381 重复上一步骤 将数字换成对应的6380和6381
                
                从机上要配置对应的主机(拜老大)
               从机分别执行    slaveof 127.0.0.1 6379

               或者 

                    在redis.conf 配置中 slaveof  master 的ip 空格 port 

               主机上有的数据,都拷贝到从机上

4.常用三招
           4.1.一主二仆(缺点主机压力大)
                1.1 主机挂了,从机还是从机,主机还原了,从机不需要配置依旧可以连主机
                1.2 从机挂了,要重新配置,连接主机 slaveof 127.0.0.1 6379 

           一主一从
              用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要)
    
         一主多从(线上不允许这么做:最多1-2个节点)
                针对“读”较多的场景,“读”有多个从节点来分担,但节点越多,主节点同步到多节点的次数越多,影响带宽,也加重主节点的稳定
            

           4.2.薪火相传 (缺点有延时)
                上一个slave可以是下一个slave的master,slave同样可以接收其他
                slaves的连接和同步请求,那么该slave作为了连接中下一个的master,可以
                有效减轻master的写压力
                中途变更转向:会清除之前的数据,重新建立拷贝最新的
                Slaveof新主库ip新主库端口
                
                将81的master 改成80
                slaveof 127.0.0.1 6380  
                继续主从复制
        
            4.3.反客为主 
                是当前数据库停止与其他数据库的同步,转成主数据库
                1.主机挂掉
                一个从机执行 --> slaveof no one --> 手动使当前的机器变为主机
                其他从机重新配置主机 ip 和端口号-->slaveof 127.0.0.1 6380

              传输延时:主从一般部署在不同机器上,复制时存在网络延时问题
                              redis提供repl-disable-tcp-nodely参数决定是否关闭TCP_NODELAY默认关闭
    
               参数关闭时
                      无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景,
               参数启用时
                      主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,
                      主从的同步延时40毫秒,适用于网络环境复杂或带宽紧张,如跨机房
                 

          同步原理
                    执行完slave master port 后
                    与主节点连接,同步主节点的数据 info replication 查看主从及同步信息
        
                     配置完 slaveof 127.0.0.1 6379 
                     slave 6380启动
            
                     1.保存主节点信息
                     2.主从建立socket连接
                     3.发送ping命令
                     4.权限验证
                     5.同步数据集
                     6.命令持续复制
            
                      master:6379


            4.4 哨兵模式
                反客为主的自动版,能够后台监控主机是否故障
                如果后台故障了根据投票数自动将从库转换为主库
    
                1.调整机构
                2.自定义的/myredis目录下新建sentinel.conf文件,名字不能错
                    touch sentinel.conf
                    
                    配置哨兵,填写内容 sentinel monitor 被监控数据库名字(自己起名字)127.0.0.1 6379 1
                    sentinel monitor host6379 127.0.0.1 6379 1  得票数多余1票的称为主机
                    
                    上面最后一个数字1,表示主机挂掉后slave投票看谁接替成为主机,得票数多少后成为主机
                
                3.启动哨兵
                    redis-sentinel    /myredis/sentinel.conf
                    上述目录依照各自的实际情况配置,可能目录不同
                    
                4.正常主从演示
                    原有master挂掉
                    投票新选
                    重新主从继续开工info replication 查查看
                    问题:如果之前的master重新回来,会不会双master冲突?
                        主机回来了,然后被哨兵巡逻到,变成slave,80还是主机的不会变角色
                
                5. 一组sentinel能同时监控多个Master  类似于spring.xml配置多个bean 
                
                复制缺点 -- 复制延迟
                    由于所有的写操作都是现在master上操作,然后同步更新到slave上,所以从master同步到slave
                    机器有一定的延迟,当系统和繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使
                    这个问题更加严重
    
                复制原理
                    Slave 启动成功连接到master后会发送一个sync命令Master接到命令启动后台的进程,同时收集
                所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,
                以完成一次完全同步
                
                全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,
                增量复制: Master 继续将新的所有收集到的修改命令一次传递给slave,完成同步,但是只要是重新
                          连接master,一次完全同步,
                (全量复制)将被自动执行

         

    一、什么是高可用
        1.它与被认为是不间断操作的容错技术有所不同,是目前企业防止核心系统因故障而无法
          工作的最有效保护手段
        
        2.高可用一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上不影响客户体验
        
        
    哨兵机制
        哨兵有三个定时任务完成对各节点的发现和监控
        1.每隔10秒发送一次info  当有新节点的加入检测到新节点
        2.每隔2秒发一次publish/subscribe  发布和订阅
        3.每隔1秒发一次ping        
          
         当主机节点6379 挂掉了,主机换成6380 ,然后主节点6380同步到6381从节点数据过程是由哨兵监控
        完成的,哨兵之间也会推选出领袖。         
        
    领导者哨兵选举流程
        A.哨兵3发现主观下线
        B.发送is-masterdown-by-addr,征求其它哨兵判断
        C.其它哨兵1同意
        D.其它哨兵2同意
        E.哨兵3称为领导者,负责故障处理
    
        故障转移流程A
        A.由Sentinel节点定期监控发现主节点是否出现故障,Sentinel回向master发送心跳PING来确认master
          是否存活,如果master在“一定时间范围”,内不回应PONG或者是回复了一个错误消息,那么这个sentinel
          会主观地(单方面)认为这个master已经不可用了。
    
        故障转移流程B
        B.当主节点出现故障,此时假设3个Sentienl节点共同选举了Sentinel3节点为领导者sentinel,负载处理
        主节点的故障转移
        
        故障转移流程C
        C.由Sentinel3领导者节点故障转移,过程和主从复制一样,但是自动执行
        1.slave-1执行,slaveof no one 解除从节点身份,变成新master
        2.slave-2变成新master的从节点 slaveof new master
        3.同样,若原主节点恢复也变成新主节点的从节点
        4.通知应用程序新主节点的地址
        
         故障转移详细流程
         1.sentinel有一份从节点列表
         2.过滤掉不健康的节点,没有回复哨兵ping消息
         3.选择slave-priority优先级最高的从节点
          3.1是,选择完毕
          3.2否,继续选择,选择复制最完整的节点--选择完毕
         
        哨兵的安装部署
        之前的redis6379.conf的配置不变,作为主节点,并且复制出两个配置文件,redis6380.co
        redis6381.conf 这两个配置文件启动后的redis作为6379节点的从节点

        注意:redis6380.conf和redis6381.conf加上 slaveof 127.0.0.1 6379
              修改requirepass 12345678,注释掉bind 127.0.0.1 加上masterauth 12345678
              
        redis sentienl哨兵机制配置(也是3个节点)
                /usr/local/bin/conf/sentienl_26379.conf
                /usr/local/bin/conf/sentienl_26380.conf
                /usr/local/bin/conf/sentienl_26381.conf
        
        将三个文件的端口改为26379、26380、26381
        然后:sentienl monitor mymaster 127.0.0.6379 2  //监听主节点 6379
              sentinel auth-pass mymaster 12345678      //连接主节点是的密码
              
        三个配置出端口外,其他一样
                启动sentienl服务
                        ./redis-sentinel conf/sentinel_26379.conf &
                        ./redis-sentinel conf/sentinel_26380.conf &
                        ./redis-sentienl conf/sentienl_26381.conf
                    
                测试:kill -9 6379 的redis 服务

        看日志是分配6380,还是6381作为主节点,当6379服务在启动时,已变成从节点
        
        如果6380升级为主节点:进入6380> info replication 可以看到role:master 
        打开sentinel_26379.conf等三个配置,sentinel monitor mymaster 127.0.0.1 6380 2
                外部应用连接sentinel时,sentinel.conf的protected-mode no 改为no 
                ./redis-cli -p 26380 shutdown  //关闭
            
        
        RedisSentinel如何监控2个reids主节点?
            在原配置上加一句:sentinel monitor mymasterB 192.168.1.112. 6379  2
            
        
        部署建议
        a.sentinel 节点应部署在多台物理机(线上环境)
        b.至少三个且奇数个sentinel节点
        c.3个sentinel 可同时监控一个主节点或多个主节点,当监听N个主节点较多时,如果
          sentienl出现异常,会对多个主节点有影响,同时还会造成sentinel节点产生过多的
          网络连接,一般线上建议还是,3个sentinel监听一个主节点
          
         哨兵的API
         命令:reids-cli -p 6379  // 进入哨兵的命令模式,使用redis-cli进入
         
         sentinel master 或sentinel master mymaster 
         sentinel slaves mymaster 
         sentinel sentinels mymaster //查sentinel节点集合(不包含当前26379)
         sentinel failover mymaster //对主节点强制故障转移,没和其它节点协商
         
         ./redis-cli -p 26380 shutdown //关闭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值