redis可靠性提升(主从复制)

在服务端开发有个很重要的话为“无备份,不存储,无监控,不服务”,redis既是一个服务,又承担着存储的功能。所以数据备份是使用redis时很重要的工作。当工作服务redis由于各种原因需要暂停服务的时候,可以将写操作切换到备服务器。从而使得主服务器暂停的时候业务不中断。这里来介绍下redis主从的配置及常用的操作方法。
1、主从配置:
其实redis的主从配置非常的简单。只需要在备服务配置文件上加上:

slaveof ip port

或者在备服务中直接执行:

slaveof ip port

其中ip、port分别为redis主服务的ip和port。一般在配置文件中还要注意redis的bind配置字段,redis主服务需要加上所有被服务的ip。否则无法正常复制。当redis备服务器配置好并启动的时候,需要在redis主服务器中看是否添加成功。

# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.6,port=16379,state=online,offset=42,lag=1
master_replid:2e25111aa69212d040d06f7fec54fcb579d7c142
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42

在redis主服务中使用info Replication,如果connected_slaves的值增加1且slave(X)中有出现redis备服务器的ip和port则说明已经添加成功。redis备服务中使用info Replication,配置成功后master_link_status对应为up即配置成功,结果如下:

# Replication
role:slave
master_host:172.17.0.4
master_port:26379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:10717
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2e25111aa69212d040d06f7fec54fcb579d7c142
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:10717
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:10717

2、异常处理方法
redis配置主从复制,其作用有两个:
1、在写少读多的情况时,备服务器分担读压力。
2、主备服务器其中一个暂停工作时,redis服务还可以对外提供服务。
这里所指的异常为有redis服务暂停工作时的处理方法。当备服务器停止工作时,如果有多个备服务器,只需要将业务读转移到其它备服务器即可。如果只有一个备服务器,将业务转移到主服务器即可。当redis主服务挂了的时候,处理方法如下:
1、从所有备redis服务选取一个作为新的redis主服务。其它redis备服务器将主服务器指向新的主服务器。操作如下:
准备作为主的redis服务器

slaveof NO ONE

然后写入的业务从暂停的主服务转到新的主服务。注意,必须在执行完slaveof NO ONE后在写,因为redis备服务器默认是只读的。
其它redis备服务器

slave of <new master ip> <new master port>

2、当最初的主服务器恢复的时候的处理:

在部署的时候,一般会选取各方面性能较好的服务器作为redis主服务。当主服务恢复正常的时候将“当前主服务器“环境保存下来,写业务暂停或者先缓存到另外一个地方,取其dump.rdb文件拷贝覆盖到原来主redis的根目录。然后启动redis主服务。最后所有的服务都要执行slave of 重新指向redis主服务。如果所有服务节点都是一致的,那么就直接让新的redis主服务为主,原来的redis主服务为备服务即可。

总结:redis主从复制,确实是可以提升redis服务可靠性。但是当redis主服务宕机的时候,并非是业务无损的。需要业务层做相应的适配。

你可能感兴趣的:(redis,nosql)