• redis-主从复制、读写分离


    1、为什么要主从复制(一主多仆),读写分离:redis在作为缓存的时候,随着数据的不断增加,是有可能出现宕机的,这时候就出现了“单点故障”,解决方案就是进行主从复制,读写分离。

    原理图:Master是主,Slave是从,Master具有读写权限,Slave只有读权限(以下还会介绍redis分布式锁,即当Master死机之后,利用“sentinel监控”把Slave其中一个提升为Master,让系统继续执行,直至原Master重启后恢复)

     
     
    企业一般用redis都是”高可用“的,以下为原理图

       

    2、为了方便测试,把开启redis服务的四个关键文件统一放在单独的文件夹中 :redis-server、redis-benchmark、redis-cli和redis.conf(redis.conf在redis的文件根目录下,其余三个在根目录的/src目录下)

    # mkdir /usr/redis
    # cp redis-server  /usr/redis
    # cp redis-benchmark /usr/redis
    # cp redis-cli  /usr/redis
    # cp redis.conf  /usr/redis
    # cd /usr/redis

     3、在/usr/redis中把redis-conf进行Copy两次:redis1-conf、redis2-conf

    依次修改redis-conf(主)、redis1-conf(仆)、redis2-conf(仆).

    vi redis.conf
    vi redis1.conf
    vi redis2.conf
    

    (/'字符串'    可以进行快速Find 查找位置,键盘“N”可以Find Next 查找下一个)

    redis-conf  (daemonize no  (守护进程)改为  daemonize yes ):

    port 6379
    
    requirepass 123456

     daemonize yes
     

    redis1-conf  -->:

    port 6380
     
    slaveof 127.0.0.1 6379
     
    masterauth 123456
     
    requirepass 123456

    redis2-conf  -->:

    port 6381
     
    slaveof 127.0.0.1 6379
     
    masterauth 123456
     
    requirepass 123456

    4、保存之后运行相对应的服务和客户端

     注意:当使用 命令:/redis-server redis-conf ,提示redis-conf无效时,只要把redis-conf放在redis-server同一个目录下即可。

    服务:

    ./redis-server redis.conf
    
    
    ./redis-server redis1.conf
    
    
    ./redis-server redis2.conf

    主(Master):

    仆1(slave):

    仆2(slave):

    (slove是不具备写权限的,会提示:(error) READONLY You can't write against a read only slave.)

    可以看到主机执行写命令,从机能同步主机的值,主从复制,读写分离就实现了。

    但是万一主机挂了怎么办,这是个麻烦事情,所以redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,类似与zookeeper.

    5、一般“高可用”我们需要建立三个sentinel(哨兵)构成“sentinel集群”,即三个:sentinel.conf、sentinel1.conf、sentinel2.conf

    sentinel.conf:

     一般默认的就行,但是我们之前设置了认证密码,所以需要加一个命令(在对应的位置添加,直接看注释就知道在哪里添加了):

    sentinel auth-pass mymaster 123456

    之后Copy两份:sentinel1.conf、sentinel2.conf,改其端口号即可(我用的:26379、26479、26579)。

    6、分别启动三哨兵:

    ./redis-sentinel sentinel.conf
    
    ./redis-sentinel sentinel1.conf
    
    ./redis-sentinel sentinel2.conf

    接着启动三个服务:

    ./redis-server redis.conf
    
    ./redis-server redis1.conf
    
    ./redis-server redis2.conf

    查询线程情况:

    自此已经完成redis的状态:“三哨兵”、“一主”、“二从”

    7、测试下:

    我们kill其中一个主服务:

     (注意:sentinel是怎么进行主从切换的呢?就是以下这条命令:

        sentinel monitor mymaster 127.0.0.1 6379 2     最后面的2就是当两个以上的sentinel确定6379端口的“主服务”已经“主观下线”的时候,就把“从服务“自动切换成主服务

    其中的sentinel服务产生变化:

    自动把端口号6380的服务切换成主服务,当然sentinel会修改我们的配置文件:

    sentinel.conf、sentinel1.conf、sentinel2.conf--》(原来的mymaster 由6379 换为了 6380)

     此时切换已经完成,但是我们还需要启动之前的主redis,但是这个时候我们已经进行过插入、删除等操作,以前的主redis并没有记录这些,那么就需要将之前从redis的dump.rdb替换之前redis 的dump.rdb文件。

              首先进入redis-master 启动 ./redis-server redis.conf

        在新生成的主master操作(设置为主服务)

             

    127.0.0.1:6380> slaveof no one

    然后设置重启的6379服务为从服务,映射主服务:

    127.0.0.1:6379> slaveof 127.0.0.1 6380

    顺便把6381也重新指向6380为主服务,映射主服务

    127.0.0.1:6381> slaveof 127.0.0.1 6380

    如果还没有回到原来的状态,就关掉sentinel(哨兵)在设置。

    8、总结:

           1、”主从复制、读写分离、主从切换“的原理和步骤和集群

           2、扩展:企业一般使用redis都是使用”高可用“的,最基本的就是”三哨兵、二主、三从“,我们这边博文写的是”三哨兵、一主、三从“,自己加一个主服务就可以了

           3、”高可用”作用:防止“Master主服务宕机”、“sentinel监控宕机”,要知道,数据的丢失是致命的。

           4、redis的作用:Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。当然,redis也会自动把内存的数据保存到磁盘。

  • 相关阅读:
    java获取Mp3播放时长
    angular ajax的使用及controller与service分层
    mysql数据库不能远程访问的问题
    linux安装ant
    jquery中,使用append增加元素时,该元素的绑定监听事件失效
    类变量与实例变量
    ajax两张传输数据方式
    jquery的.html(),.text()和.val()方法
    如何在sublime text上快速访问html页面?
    java学习笔记之线程2wait和notifyAll
  • 原文地址:https://www.cnblogs.com/hzb462606/p/9113974.html
Copyright © 2020-2023  润新知