zoukankan      html  css  js  c++  java
  • redis的主从复制

    一、redis的五种数据类型:

    string是字符串类型,是redis最基本的数据类型。

    哈希类型hash,hash特别适合存储对象

    列表类型list,按照插入顺序排序

    集合类型set,不允许有重复数据

    有序集合类型zset,不允许有重复数据

    二、redis主从复制

    为了避免服务器停机导致数据库数据丢失,为了避免单点故障,我们需要将数据复制到多台服务器上,即使有一台出现问题,其他服务器继续可以服务。

    这就要求一台服务器数据更新后,自动将数据更新到其他服务器上,实现方式就是:redis的主从复制

    我们可以在多台服务器上部署redis,并在这几台服务器上指定主从关系,主服务器主要负责写,同时将写入的数据更新到从服务器上,这种模式叫做主从复制。

    即master/slave ,并且redis默认master写数据,slave用于读,slave不能写,写会出错。

    三、redis主从关系的实现

     由于只有一台主机,所以只能模拟一下redis的主从关系

    首先,将已经安装好的redis的配置文件redis.conf备份到redis6380.conf,redis6382.conf,redis6384.conf,同时清空配置文件的内容命令如下:

    cp redis.conf redis6380.conf
    > redis6380.conf
    cp redis.conf redis6382.conf
    > redis6382.conf
    cp redis.conf redis6384.conf
    > redis6384.conf

    然后:编辑redis6380.conf、redis6382.conf、redis6384.conf

    redis6380.conf,将以下内容放入,6380为主。6382,6384为从

    #include包含原配置文件的内容,具体配置文件路径根据实际情况修改
    include /usr/local/redis-3.2.9/redis.conf
    #daemonize yes 表示服务从后台启动,相当于./redis-server &中的&
    daemonize yes
    #port 6380 自定义的端口号
    port 6380
    #pidfile 自定义的文件,表示当前程序的pid,进程id
    pidfile /var/run/redis_6380.pid
    #logfile 日志文件名
    logfile /usr/local/redis-3.2.9/6380.log
    #dbfilename 持久化的rdb文件
    dbfilename dump6380.rdb

    redis6382.conf、

    #slave配置文件
    #include包含原配置文件的内容,具体配置文件路径根据实际情况修改
    include /usr/local/redis-3.2.9/redis.conf
    #daemonize yes 表示服务从后台启动,相当于./redis-server &中的&
    daemonize yes
    #port 6382 自定义的端口号
    port 6382
    #pidfile 自定义的文件,表示当前程序的pid,进程id
    pidfile /var/run/redis_6382.pid
    #logfile 日志文件名
    logfile /usr/local/redis-3.2.9/6382.log
    #dbfilename 持久化的rdb文件
    dbfilename dump6382.rdb
    #slaveof 表示当前redis是127.0.0.1端口6380这个Master的从,
    slaveof 127.0.0.1 6380
    #这里注意如配置文件配置了requirepass就需要加下面此项
    masterauth "redis_2018@"

    redis6384.conf

    #slave配置文件
    #include包含原配置文件的内容,具体配置文件路径根据实际情况修改
    include /usr/local/redis-3.2.9/redis.conf
    #daemonize yes 表示服务从后台启动,相当于./redis-server &中的&
    daemonize yes
    #port 6384 自定义的端口号
    port 6384
    #pidfile 自定义的文件,表示当前程序的pid,进程id
    pidfile /var/run/redis_6384.pid
    #logfile 日志文件名
    logfile /usr/local/redis-3.2.9/6384.log
    #dbfilename 持久化的rdb文件
    dbfilename dump6384.rdb
    #slaveof 表示当前redis是127.0.0.1端口6380这个Master的从,
    slaveof 127.0.0.1 6380
    masterauth "redis_2018@"

    接着:启动redis服务

    //查看是否有redis进程
    ps -ef|grep redis
    //在src路径下执行
    //主redis
    ./redis-server ../redis6380.conf
    //两个从redis
    ./redis-server ../redis6382.conf
    ./redis-server ../redis6384.conf

    登录redis内置客户端查看redis主从信息,redis服务所处的角色命令如下:

    ./redis-cli -p 6380 -a redis_2018@
    ping
    info replication

    四、redis主从节点读写数据

     主节点写入数据

    从节点读取数据:

    从节点不能写入数据

     五、容灾处理

    当Master服务故障时,需手动将slave中的一个提升为Master,剩下的slave重新挂载到新的Master上(冷处理:机器挂掉了再处理)

    命令如下:

    //将slave提升为Master
    slaveof no one 
    //将slave挂载到新的Master
    slaveof 127.0.0.1 6382

    模拟场景,将6380端口服务关掉,

    我们将6382设置为主节点Master

    6382成为了Master

    将6384挂载到6382

    将6380挂载到6382上

    总结:

    1.一个Master可以有多个slave

    2.slave下线,读请求的处理性能下降

    3.Master下线,写请求的处理性能下降

    4.当Master故障后,需要将其中一个slave使用slave no one命令提升为Master,其他的slave使用slaveof ip port 命令重新挂载到新的Master上,从新的Master上同步数据

    5.主从复制模式的障碍转移需要手动操作,要实现自动化处理,这就需要Sentinel哨兵,实现故障的自动转移

  • 相关阅读:
    如何判断轮廓是否为圆(算法更新)
    近期购置的CV&AI类图书梳理
    基于OpenCV实现“钢管计数”算法,基于Csharp编写界面,并实现算法融合
    大厂们的 redis 集群方案
    redis 突然大量逐出导致读写请求block
    Docker 1.13 管理命令
    玩转 Ceph 的正确姿势
    Docker 常用命令
    git常用命令
    从C++到GO
  • 原文地址:https://www.cnblogs.com/xiaotang5051729/p/9640712.html
Copyright © 2011-2022 走看看