文章目录
1. 主从复制
1.1 主从复制的特点
redis的主从复制配置十分简单,它可以使从服务器是主服务器的完全拷贝,有以下几个特点:
- master可以拥有多个slave
- 多个slave除了可以连接同一个master外,还可以连接到其他slave
- 使用异步复制。主从复制不会阻塞master,向slave同步数据时,master可以继续处理client的请求
- 可以提高系统的扩展性,如使用多个从服务器来作为只读处理器(如繁重的排序操作可以放到从服务器去做),也可以简单的用来做数据冗余
1.2 如何配置主从服务器
- 配置slave服务器很简单,只需要在slave端的redis.conf文件中添加以下配置
slaveof <masterip> <masterport>
# 如果 master 需要密码认证,就在这里设置
masterauth <master-password>
另外你也可以调用SLAVEOF命令,主服务器就会开始与从服务器同步。
2. 然后可通过role命令(或者info命令)查看结果
(slave服务运行在6378端口,master服务运行在6379端口)
[root@VM_0_11_centos src]# ./redis-cli -h 127.0.0.1 -p 6378
127.0.0.1:6378> role
1) "slave"
2) "127.0.0.1"
3) (integer) 6379
4) "connected"
5) (integer) 15
此时可以在master设置key,在slave上即可get到该key值
1.3 Redis主从复制是如何工作的
如果你设置了一个从服务器,在连接时它发送了一个SYNC命令,不管它是第一次连接还是再次连接都没有关系。然后主服务器开始后台存储,并且开始缓存新连接进来的修改数据的命令。当后台存储完成后,主服务器把数据文件发送到从服务器,从服务器将其保存在磁盘上,然后加载到内存中。然后主服务器把刚才缓存的命令发送到从服务器。这是作为命令流来完成的,并且和Redis协议本身格式相同。
你可以通过telnet自己尝试一下。在Redis服务器工作时连接到Redis端口,发送SYNC命令,会看到一个批量的传输,并且主服务器接收的每一个命令都会通过telnet会话重新发送一遍。
当主从服务器之间的连接由于某些原因断开时,从服务器可以自动进行重连接。当有多个从服务器同时请求同步时,主服务器只进行一个后台存储。
当连接断开又重新连上之后,一般都会进行一个完整的重新同步,但是从Redis2.8开始,重新连接之后可以从中断处继续进行复制,而不必重新同步。
1.4 只读从服务器
从Redis 2.6开始,从服务器支持只读模式,并且是默认模式。向从服务器写入命令会报错误:
(error) READONLY You can't write against a read only slave.
这个行为是由Redis.conf文件中的slave-read-only 参数控制的,可以在运行中通过CONFIG SET来启用或者禁用。
只读的从服务器会拒绝所有写命令,所以对从服务器不会有误写操作。但这不表示可以把从服务器实例暴露在危险的网络环境下,因为像DEBUG或者CONFIG这样的管理命令还是可以运行的。不过你可以通过使用rename-command命令来为这些命令改名来增加安全性。
注意只读限制还可以被还原,使得从服务器还可以进行写操作。虽然当主从服务器进行重新同步或者从服务器重启后,这些写操作都会失效,还是有一些使用场景会想从服务器中写入临时数据的,但将来这个特性可能会被去掉。
1.5 注意
- 在做主从同步时ÿ