zoukankan      html  css  js  c++  java
  • Redis 之 数据持久化、主从复制、哨兵、集群

    一、redis 数据持久化:

      1、rdb:配置文件增加 dbfilename ,和save

    port 6379
    daemonize yes
    dir /data/6379                   # 定义持久化文件存储位置
    pidfile /data/6379/redis.pid     # redis进程pid文件
    loglevel notice                  # 日志级别
    logfile "/data/6379/redis.log"   # redis日志log文件
    protected-mode yes               # 保护模式
    #bind 10.0.0.10  127.0.0.1       # redis绑定地址
    #requirepass redhat              # redis登录密码
    dbfilename redis6379.rdb # rdb持久化文件 save
    900 1 # rdb机制 每900秒 有1个修改记录 save 300 10 # 每300秒 10个修改记录 save 60 10000 # 每60秒内 10000修改记录

      2、aof:

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    requirepass redhat
    
    
    appendonly yes                   #开启aof持久化
    appendfsync everysec             #设置保存时间:always       总是修改类的操作
                                everysec 每秒做一次持久化
                                no 依赖系统自带的缓存大小机制

       选择一种持久化方式后,完成配置文件配置,重新启动redis,看目录下是否产生对应的持久化文件,.rdb文件或者  .aof文件

     如果文件被删除,数据会丢失

    二、redis 主从复制

       1、主的配置文件

    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    protected-mode no

      2、从的配置文件

    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    protected-mode no
    
    slaveof 127.0.0.1 6380  #指明主的地址

      注意:如果主 设置了密码 requirepass   那么 从库 再slaveof  下面要加一行申明主库的密码 masterauth  主库密码

      3、检查主从的状态

    redis-cli -p 6380  info replication

      或者

    127.0.0.1:6380> info replication

       4、如下图,则配置成功

     三、哨兵集群:Sentinel

      redis 不支持配置多主多从,所以一旦主挂了,那么将无法写入,这是就需要借助Sentinel 实现监控,一旦监控到主挂了,就会选举从库中的一台,作为主库。

    官网地址:http://redisdoc.com/
    
    redis-cli info #查看redis数据库信息
    
    redis-cli info replication #查看redis的复制授权信息
    redis-cli info sentinel   #查看redis的哨兵信息

    【注意:哨兵集群,也是建立再主从复制的基础之上的】

      1、创建sentinel 哨兵配置文件,vim  redis-sentinel-26000

    # Sentinel节点的端口
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"
    
    # sentinel announce-ip 127.0.0.1   # 宣告哨兵IP, 此配置只有当使用非127.0.0.1的IP配置哨兵无法成功时加上,同时redis三个服务端也需要同步修改IP
    
    # 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
    # 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    # mymaster是主节点的别名
    sentinel monitor mymaster 127.0.0.1 6379 2
    
    # 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
    sentinel down-after-milliseconds mymaster 30000
    
    # 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
    sentinel parallel-syncs mymaster 1
    
    # 故障转移超时时间为180000毫秒
    sentinel failover-timeout mymaster 180000
    
    daemonize yes

      2、启动哨兵

    redis-sentinel /data01/redis/redis-sentinel-26379.conf

      3、查看哨兵信息

    redis-sentinel -p 26000  info sentinel

      4、注意:

      如果主设置了密码,那么哨兵的配置文件要多一个认证配置

    sentinel auth-pass mymaster redis123

    四、cluster集群

       由于redis 不支持主主,数据量太大时建议使用cluster

      1、准备节点——即redis-server,配置配置文件

    port 7000
    daemonize yes
    dir "/opt/redis/data"
    logfile "/opt/redis/logs/7000.log"
    dbfilename "dump-7000.rdb"
    cluster-enabled yes   # 开启集群模式
    cluster-config-file nodes-7000.conf  # 集群内部的配置文件
    cluster-require-full-coverage no  # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no

      redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。

      每个节点仅仅是端口运行的不同!

       

       2、准备ruby 环境

        分配redis集群状态,以及槽位分配,互联网企业,豆瓣公司开源的一个工具

      1.   下载、编译、安装Ruby
      2.   安装rubygem redis
      3.   安装redis-trib.rb命令

        第一步,安装ruby(这些命令可以放入一个sh脚本文件里)

    # 下载ruby
    wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    
    # 安装ruby
    tar -xvf ruby-2.3.1.tar.gz
    cd ruby-2.3.1/
    ./configure --prefix=/opt/ruby/
    make && make install
    
    # 配置ruby的环境变量
    vim /etc/profile
    写入如下配置
    PATH=$PATH:/opt/ruby/bin
    
    # 准备一个ruby命令
    # 准备一个gem软件包管理命令
    # 拷贝ruby命令到path下/usr/local/ruby
    cp /opt/ruby/bin/ruby /usr/local/
    cp bin/gem /usr/local/bin

      安装ruby gem 包管理工具

    wget http://rubygems.org/downloads/redis-3.3.0.gem
    
    gem install -l redis-3.3.0.gem
    
    #查看gem有哪些包
    gem list -- check redis gem

      

      一键开启redis-cluster集群

    redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    或
    redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    
    --replicas  # 表示进行身份授权
    1  # 表示每个主节点,只有一个从节点
    
    # 集群会自动分配主从关系  70007001、7002为主服务器master 70037004、7005为从服务器slave
    复制代码

      查看集群状态

    redis-cli -p 7000 cluster info  
    
    redis-cli -p 7000 cluster nodes  #等同于查看nodes-7000.conf文件节点信息
    
    集群主节点状态
    redis-cli -p 7000 cluster nodes | grep master
    集群从节点状态
    redis-cli -p 7000 cluster nodes | grep slave

        安装完毕后,检查集群状态

    redis-cli -p 7000 cluster info

      测试写入集群数据,登录集群必须使用redis-cli -c -p 7000必须加上-c参数

    世间安得双全法,不负如来不负卿
  • 相关阅读:
    ACM训练计划
    动态规划 最长公共子序列LCS
    Floyd最短路
    邻接表拓扑排序
    数字三角形(数塔) DP入门
    hdu 5533 计算几何 判断是否为正方形
    威尔逊定理--HDU2973
    二分--POJ-3258
    01背包--hdu2639
    矩阵快速幂--51nod-1242斐波那契数列的第N项
  • 原文地址:https://www.cnblogs.com/shangguanruoling/p/11857962.html
Copyright © 2011-2022 走看看