zoukankan      html  css  js  c++  java
  • Redis持久化存储(二)

    redis多实例介绍

    接上一篇redis、创建数据存放的目录

    vim redis.conf +187
    dir /application/data/

    重新启动

    mkdir /application/data/
    redis-cli shutdown
    redis-server /application/redis/conf/redis.conf &
    [root@redis01 conf]# redis-cli
    127.0.0.1:6379> auth zsq
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> set names sisi
    OK
    127.0.0.1:6379> get sisi
    (nil)
    127.0.0.1:6379> save
    [34960] 03 Dec 20:29:54.318 * DB saved on disk
    OK
    127.0.0.1:6379> quit
    [root@redis01 conf]# ll /application/data/
    总用量 4
    -rw-r--r-- 1 root root 32 12月  3 20:29 dump.rdb

    Redis AUTH命令是用来向服务器验证给定的密码。 如果密码与在配置文件中的口令相匹配,则服务器会返回OK状态码,并开始接受命令。否则,将返回一个错误,并且客户需要尝试新的密码。

    在配置文件中指定的密码

    requirepass zsq

    创建实例

    [root@redis01 conf]# mkdir /data/6380/data -p
    [root@redis01 conf]# mkdir /data/6381/data -p
    [root@redis01 conf]# cp redis.conf /data/6380/
    [root@redis01 conf]# cp redis.conf /data/6381/
    [root@redis01 conf]# cd /data/6380
    [root@redis01 6380]# ll
    总用量 36
    drwxr-xr-x 2 root root  4096 12月  3 20:35 data
    -rw-r--r-- 1 root root 31236 12月  3 20:35 redis.conf

    跟源文件对比,两个实例修改以下对应的几项

    [root@redis01 6380]# diff redis.conf /application/redis/conf/redis.conf 
    41c41
    < pidfile /data/6380/redis.pid
    ---
    > pidfile /var/run/redis.pid
    45c45
    < port 6380
    ---
    > port 6379
    187c187
    < dir /data/6380/data/
    ---
    > dir /application/data/
    449c449
    < appendonly yes  #开启这项是记录持久化日志
    ---
    > appendonly no   

    开启6380

    [root@redis01 6380]# redis-server /data/6380/redis.conf &
    [root@redis01 6380]# lsof -i :6380
    COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    redis-ser 35011 root    4u  IPv6 2604853      0t0  TCP *:6380 (LISTEN)
    redis-ser 35011 root    5u  IPv4 2604855      0t0  TCP *:6380 (LISTEN)

    测试

    [root@redis01 6380]# redis-cli -p 6380
    127.0.0.1:6380> auth zsq
    OK
    127.0.0.1:6380> set name oldgirl
    OK
    127.0.0.1:6380> get name
    "oldgirl"
    127.0.0.1:6380> save
    [35011] 03 Dec 20:51:25.324 * DB saved on disk
    OK
    127.0.0.1:6380> quit
    [root@redis01 6380]# ll data/
    总用量 8
    -rw-r--r-- 1 root root 109 12月  3 20:51 appendonly.aof  
    -rw-r--r-- 1 root root  34 12月  3 20:51 dump.rdb  #要save才有这个文件
    appendonly.aof 文件记录的操作记录
    [root@redis01 6380]# cat data/appendonly.aof 
    *2
    $6
    SELECT
    $1
    0
    *3
    $3
    Set

    开启6381

    redis-server /data/6381/redis.conf &
    [root@redis01 6380]# lsof -i :6381
    COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    redis-ser 35034 root    4u  IPv6 2609259      0t0  TCP *:6381 (LISTEN)
    redis-ser 35034 root    5u  IPv4 2609261      0t0  TCP *:6381 (LISTEN)

     redis复制

            复制

    Redis复制很简单易用,它通过配置允许slave Redis Servers或者Master Servers的复制品。接下来有几个关于redis复制的非常重要特性:

    一个Master可以有多个Slaves。

    Slaves能接受其他slave的链接,除了可以接受同一个master下面slaves的链接以外,还可以接受同一个结构图中的其他slaves的链接。

    redis复制是在master段是非阻塞的,这就意味着master在同一个或多个slave端执行同步的时候还可以接受查询。

    复制在slave端也是非阻塞的,假设你在redis.conf中配置redis这个功能,当slave在执行的新的同步时,它仍可以用旧的数据信息来提供查询,否则,你可以配置当redis slaves去master失去联系是,slave会给客户端发送一个错误。

    为了有多个slaves可以做只读查询,复制可以重复2次,甚至多次,具有可扩展性(例如:slaves对话与重复的排序操作,有多份数据冗余就相对简单了)。

    通过复制可以避免master全量写硬盘的消耗:只要配置 master 的配置文件redis.conf来“避免保存”(注释掉所有”save”命令),然后连接一个用来持久化数据的slave即可。但是这样要确保masters 不会自动重启(更多内容请阅读下段)

    redis复制是怎么进行工作

    如果设置了一个slave,不管是在第一次链接还是重新链接master的时候,slave会发送一个同步命令 sync,然后master开始后台保存,收集所有对修改数据的命令。当后台保存完成,master会将这个数据文件传送到slave,然后保存在磁盘,加载到内存中;master接着发送收集到的所有的修改数据的命令,这好比一个流命令,是redis协议本身来实现的。

    你可以自己通过远程登录来进行尝试,当服务器在做一些工作并发送同步命令的时候链接到redis端口,你将会看到大量的数据传输,然后收到的每个命令会显示在远程登录的会话中。

    当master和slave因一些故障当机时,slaves会自动的重链,如果master收到多个slave的同步请求,master会执行一个后台保存,以确保所有的slaves都是正常的。

    当master和slave能够维持链接,就会有一个完整的同步进行。

    redis主从同步实战

    开启两个实例,指定端口,有密码的指定密码

    cd /data/6380

    配置文件redis.conf搜索REPLICATION关键字

    slaveof 192.168.179.161 6379
    masterauth zsq

    重新启动

    redis-cli -p 6380 -a zsq shutdown

    启动的时候会有同步信息输出,如master的IP,端口等信息

    主库也有信息输出

    从库对主库也有个ping的操作过程,每隔10秒发送一个PING,确认是否OK

    monitor类似tcpdump,可以监控其操作

    在主库操作

    从库可以看到其输出信息

    查看从库的数据同步情况

    Slave的几个参数

    Slave是不能写数据的

    默认检测是10秒

    如果连不上的时候,主库是通过backlog来实现slave库的增量同步,以下参数是其大小

    Backlog的生成期,当主库和slave连接断开的时候,backlog在内存里多长时间释放

    优先级,给不同的slave优先级,主库宕机把哪个slave提升为主

    查看redis的状态信息

    同步状态信息

    CPU状态信息

    info是查看全部的状态 ,内存,客户端连接等等

    服务端master的信息,主从,cpu等

  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/w787815/p/6749682.html
Copyright © 2011-2022 走看看