zoukankan      html  css  js  c++  java
  • Redis安装、主从配置及aof使用

    找了02,03,04三台机器,04做主,02做从,03做客户端。

    都使用jumbo install redis安装了Redis(server+client)。

    在 02 从的 ~/.jumbo/etc/redis.conf 里

    slaveof <masterip> 6379

    在04 主的 ~/.jumbo/etc/redis.conf 里

    appendonly yes

    appendfsync everysec

    主从都要改:

    daemonize yes

    logfile "/home/work/.jumbo/var/log/redis/redis.log"

    然后先启动主,再启动从,都使用

    redis-server (因为deamonize为true,所以不用&)

    报如下错误:

    7652:C 05 Oct 16:59:37.203 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf

    7652:M 05 Oct 16:59:37.207 # Creating Server TCP listening socket *:6379: unable to bind socket

    然后发现居然是因为没有指定配置文件:

     redis-server ~/.jumbo/etc/redis.conf 

    这样就可以了。

    然后跑到03上,用客户端访问:

    redis-cli  -h 10.117.146.16 -p 6379  

    发现:

    Could not connect to Redis at 10.117.146.16:6379: Connection refused
    Could not connect to Redis at 10.117.146.16:6379: Connection refused
    not connected>

    然后也发现从机一直报error log:

    36855:S 05 Oct 17:10:57.379 * Connecting to MASTER 10.117.146.16:6379
    36855:S 05 Oct 17:10:57.379 * MASTER <-> SLAVE sync started
    36855:S 05 Oct 17:10:57.379 # Error condition on socket for SYNC: Connection refused

    先把从Redis关了,用客户端:

    $ redis-cli
    127.0.0.1:6379> shutdown
    not connected>
    not connected> quit

    然后再看Redis配置文件 vi ~/.jumbo/etc/redis.conf

    有如下内容:

    ################################## NETWORK #####################################
    
    # By default, if no "bind" configuration directive is specified, Redis listens
    # for connections from all the network interfaces available on the server.
    # It is possible to listen to just one or multiple selected interfaces using
    # the "bind" configuration directive, followed by one or more IP addresses.
    #
    # Examples:
    #
    # bind 192.168.1.100 10.0.0.1
    # bind 127.0.0.1 ::1
    #
    # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
    # internet, binding to all the interfaces is dangerous and will expose the
    # instance to everybody on the internet. So by default we uncomment the
    # following bind directive, that will force Redis to listen only into
    # the IPv4 lookback interface address (this means Redis will be able to
    # accept connections only from clients running into the same computer it
    # is running).
    #
    # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
    # JUST COMMENT THE FOLLOWING LINE.
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    bind 127.0.0.1

    所以,注释掉最后一行。重新启动。

    然后又开始报这样的错:

    12487:M 05 Oct 17:16:46.170 # Creating Server TCP listening socket *:6379: unable to bind socket

    在redis.conf里面加上下面这行:

    # bind 127.0.0.1
    bind 0.0.0.0

    重新启动:redis-server ~/.jumbo/etc/redis.conf 

    然后 ps xu | grep redis 可以看到:

    work     23986  0.0  0.0 79428 2104 ?        Ssl  17:18   0:00 redis-server 0.0.0.0:6379 

    在03机器上可以访问:

    redis-cli -h 10.117.x.x -p 6379
    10.117.146.16:6379>

    然后可以看到aof文件位置在:

    $ ls -la ~/.jumbo/var/lib/redis/appendonly.aof
    -rw-r--r-- 1 work work 0 Oct 5 17:06 /home/work/.jumbo/var/lib/redis/appendonly.aof

    然后从Redis的日志有:

    25089:S 05 Oct 17:22:59.018 * MASTER <-> SLAVE sync started
    25089:S 05 Oct 17:22:59.018 * Non blocking connect for SYNC fired the event.
    25089:S 05 Oct 17:22:59.019 * Master replied to PING, replication can continue...
    25089:S 05 Oct 17:22:59.019 * Partial resynchronization not possible (no cached master)
    25089:S 05 Oct 17:22:59.019 * Full resync from master: 64377169e1e5fc029ad8e584e24947a53d4f8fa0:1
    25089:S 05 Oct 17:22:59.103 * MASTER <-> SLAVE sync: receiving 76 bytes from master
    25089:S 05 Oct 17:22:59.104 * MASTER <-> SLAVE sync: Flushing old data
    25089:S 05 Oct 17:22:59.104 * MASTER <-> SLAVE sync: Loading DB in memory
    25089:S 05 Oct 17:22:59.104 * MASTER <-> SLAVE sync: Finished with success

    主Redis的日志有:

    23986:M 05 Oct 17:22:59.020 * Slave 10.117.x.x:6379 asks for synchronization
    23986:M 05 Oct 17:22:59.020 * Full resync requested by slave 10.117.146.21:6379
    23986:M 05 Oct 17:22:59.020 * Starting BGSAVE for SYNC with target: disk
    23986:M 05 Oct 17:22:59.020 * Background saving started by pid 40323
    40323:C 05 Oct 17:22:59.076 * DB saved on disk
    40323:C 05 Oct 17:22:59.076 * RDB: 0 MB of memory used by copy-on-write
    23986:M 05 Oct 17:22:59.104 * Background saving terminated with success
    23986:M 05 Oct 17:22:59.104 * Synchronization with slave 10.117.x.x:6379 succeeded

    以下是先用客户端访问主,再访问从的结果:

    $ redis-cli -h 10.117.146.16 -p 6379
    10.117.146.16:6379> zadd page_rank 10 google.com
    (integer) 1
    10.117.146.16:6379> zadd page_rank 9 baidu.com 8 bing.com
    (integer) 2
    10.117.146.16:6379> zrange page_rank 0 -1 withscores
    1) "bing.com"
    2) "8"
    3) "baidu.com"
    4) "9"
    5) "google.com"
    6) "10"
    10.117.146.16:6379> zrange page_rank 0 -1
    1) "bing.com"
    2) "baidu.com"
    3) "google.com"
    10.117.146.16:6379> quit

    $ redis-cli -h 10.117.146.21 -p 6379 10.117.146.21:6379> zrange page_rank 0 -1 withscores 1) "bing.com" 2) "8" 3) "baidu.com" 4) "9" 5) "google.com" 6) "10" 10.117.146.21:6379> zrange page_rank 0 -1 1) "bing.com" 2) "baidu.com" 3) "google.com" 10.117.146.21:6379> quit

    而此时查看主和从的日志,都没有明显的日志,因为日志开在了notice级别:

    主:
    40323:C 05 Oct 17:22:59.076 * RDB: 0 MB of memory used by copy-on-write 23986:M 05 Oct 17:22:59.104 * Background saving terminated with success 23986:M 05 Oct 17:22:59.104 * Synchronization with slave 10.117.146.21:6379 succeeded
    从:
    25089:S 05 Oct 17:22:59.019 * Partial resynchronization not possible (no cached master) 25089:S 05 Oct 17:22:59.019 * Full resync from master: 64377169e1e5fc029ad8e584e24947a53d4f8fa0:1 25089:S 05 Oct 17:22:59.103 * MASTER <-> SLAVE sync: receiving 76 bytes from master 25089:S 05 Oct 17:22:59.104 * MASTER <-> SLAVE sync: Flushing old data 25089:S 05 Oct 17:22:59.104 * MASTER <-> SLAVE sync: Loading DB in memory 25089:S 05 Oct 17:22:59.104 * MASTER <-> SLAVE sync: Finished with success

    而aof文件,相比于刚才,已经有了增加:

    $ ls -la ~/.jumbo/var/lib/redis/appendonly.aof
    -rw-r--r--  1 work work 149 Oct  5 17:28 /home/work/.jumbo/var/lib/redis/appendonly.aof
    
    刚刚是:

    $ ls -la ~/.jumbo/var/lib/redis/appendonly.aof
    -rw-r--r-- 1 work work 0 Oct 5 17:06 /home/work/.jumbo/var/lib/redis/appendonly.aof

    然后通过客户端分别关掉两个server:

    $ redis-cli -h 10.117.146.21 -p 6379
    10.117.146.21:6379> SHUTDOWN save
    not connected> quit
    $ redis-cli -h 10.117.146.16 -p 6379
    10.117.146.16:6379> SHUTDOWN save
    not connected> 
    not connected> quit

    然后再次分别启动,来监测aof文件是否会自动加载。

    用客户端连接,发现数据都还在,如下所示:

    $ redis-cli -h 10.117.x.x -p 6379
    10.117.x.x:6379> zrange page_rank 0 -1 withscores
    1) "bing.com"
    2) "8"
    3) "baidu.com"
    4) "9"
    5) "google.com"
    6) "10"
    10.117.x.x:6379> 

    所以,aof文件是自动加载的。Redis的持久化是生效的。

    再说一下Redis的密码验证:

    现在安装的目录里配置文件位置:/home/work/.jumbo/etc/redis.conf

    在master上:
    # requirepass foobared
    requirepass [用户名]
    
    在slave上:
    # masterauth <master-password>
    masterauth [用户名]

    然后重启。重启方法见前文。

    之后访问的时候,会出现没有权限的情况,需要在命令前指定权限,或者在redis-cli参数里用 -a 加权限:

    $ redis-cli -h 10.117.146.16 -p 6379
    10.117.146.16:6379> keys *
    (error) NOAUTH Authentication required.
    10.117.146.16:6379> auth [用户名]
    OK
    10.117.146.16:6379> keys *
     1) "age"
     2) "testName"
     3) "newset"
     4) "k2"
     5) "myhash"
     6) "page_rank"
     7) "myset"
     8) "k1"
     9) "myzset"
    10) "myset2"
    11) "k5"
    12) "mylist"
    13) "k3"
    10.117.146.16:6379> quit
    
    $ redis-cli -h 10.117.146.16 -p 6379 -a [用户名]
    10.117.146.16:6379> keys *
     1) "age"
     2) "testName"
     3) "newset"
     4) "k2"
     5) "myhash"
     6) "page_rank"
     7) "myset"
     8) "k1"
     9) "myzset"
    10) "myset2"
    11) "k5"
    12) "mylist"
    13) "k3"
    10.117.146.16:6379> quit
    
    $ redis-cli -h 10.117.146.16 -p 6379
    10.117.146.16:6379> keys *
    (error) NOAUTH Authentication required.
    10.117.146.16:6379> auth abc
    (error) ERR invalid password
  • 相关阅读:
    学习笔记Jmail收发邮件
    ModalPopup
    学习笔记:UpdatePanel控件
    转AjaxControlToolkit的安装与使用详解
    转linq中的Single()、First()、Take(1) LINQ 标准的查询操作符 排序 orderby、thenby、Take
    转Global.asax文件
    转<%%>、<%=%>、<%$%>、<%@%>的区别
    C++文件包含处理—#include
    GISer学习之道(转载)
    OSG中的示例程序简介
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5932571.html
Copyright © 2011-2022 走看看