先简单介绍一下redis replication的特点。 1.一个master可以有多个slave 2.Slave也可以有自己的slave,即级联 3.Master不受任何slave同步影响,但slave端在第一次执行同步时会阻塞读 4.多个slave可以分担读压力 5.可以用replication代替快照进程(saving),利用replication的实时同步来灾备数据 再来看看replication的实现原理。 只 要slave连接master,不管第一次连接master或者reconnect,slave都会发出一个SYNC命令。之后master在后台启动一 个快照进程(saving)来收集最近的修改数据集的所有命令。当saving结束时会将db file传输到slave,然后slave读到内存中,然后每次master将增量的把所有涉及db set修改的命令给到slave。(不管你配置的slave是否做了持久化,第一次SYNC后都会记录到磁盘的rdb上) ***注意***:由 于第一次slave连接master或者reconnect master时都会触发master做一个快照save(不管你有没有做本地持久化),将内存数据写入到磁盘(rdb文件),之后将文件传给slave, 注意slave会首先写入文件(rdb),之后再读入到内存中,如果写文件失败,slave的内存中将什么都没有(至少肯定没有master的数据),并 且master会不断的做快照,直到成功为止。 配置slave,很简单,在slave上执行: redis> slaveof testdb2.corp.alimama.com 6379 也可以写到slave的conf文件里,每次启动都会作为slave身份了,参数slaveof <masterip> <masterport>,即 slaveof testdb2.corp.alimama.com 6379 官方文档以及我们出的一些测试可以看出,redis的replication是非常快的,可以认为它是“实时”的。 如果我们要检查redis slave与master是否同步,可以做一些简单的操作: 在master上set一个key, redis> set test-key “test-sync” 然后去slave上get,检查是否可以读到, redis> get test-key "test-sync" 说明slave与master是一样的,可以支持灾备,最后删除这个key, redis> del test-key |
|