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
  • 相关阅读:
    2016"百度之星"
    codeforces 55 div2 C.Title 模拟
    codeforces 98 div2 C.History 水题
    codeforces 97 div2 C.Replacement 水题
    codeforces 200 div2 C. Rational Resistance 思路题
    bzoj 2226 LCMSum 欧拉函数
    hdu 1163 九余数定理
    51nod 1225 余数的和 数学
    bzoj 2818 gcd 线性欧拉函数
    Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5932571.html
Copyright © 2011-2022 走看看