Redis安装主从配置及aof使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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安装主从配置及aof使用的主要内容,如果未能解决你的问题,请参考以下文章

redis 主从配置实例注意事项及备份方式

NoSQL -- redis 安装 主从 配置详解 常用命令

Redis进阶学习06--分布式缓存--上

Redis单机,主从集群,哨兵集群,分片集群的搭建

Redis单机,主从集群,哨兵集群,分片集群的搭建

linux下如何安装配置redis及主从配置