redis的主从复制
master以写为主,slave以读为主
是什么?
能干嘛?
怎么玩?
原则:
- 配从(库)不配主(库)
- 从库配置: slaveof 主库IP 主库端口
- 修改配置文件细节
- copy 多个redis.conf 文件
- 开启daemonize yes
- 修改PID文件名字
- 指定端口
- Log文件名字
- Dump.rdb名字
- 常用三招
- 一主二仆, 正常模式,利用slaveof IP port来指定为从机。
- 薪火相传,从机也可以接收其它从机的slaveof命令,从而形成A为主机,B slaveof A, 然后,C slaveof B。当A 写了数据,B会得到同步,同理,C也就会得到同步,这就构成了去中心化的方式。
- 反客为主,当主机挂掉后,从机默认会原地待命,这样性能不高,我们可以在其中的一个从机中,使用命令
slave no one
来停止与其它数据库的同步,转成主数据库,这样这个从机就反客为主了。
查看当前redis的复制身份,使用命令:info replication
默认情况下,我们启动redis-server后都是以master身份存在的,使用slaveof命令后就变成了slave身份,除非在配置文件中指定身份。
当主机挂掉后,所有从机待命,主机恢复后,一切照旧。
当从机挂掉后,重启从机,从机的身份会是master,还要再次使用 slaveof命令连接到主机后才会成为slave机。
复制原理
- Slave启动成功连接到master后会发送一个sync命令
- master接到命令启动后台的存盘进程一,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
- 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
4.增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。
哨兵模式(sentinel)
现在是最主要的模式,相当于是自动版的反客为主,它的规则是当master挂掉后,哨兵会从所有的从机中进行投票,找出票数最多的从机,把它做为新的master,其它的从机会自动同步到这台主机上。
操作步骤:
- 把结构调整到1主多从模式
- 新建一个 sentinel.conf 文件,并加入如下内容
1
sentinel monitor 自定义主机名 127.0.0.1 6379 1
其中,主机名随便命名,127.0.0.1 和 6379 是要哨兵监控主机地址和端口。1 代表哪个从机的票数多,就选哪个做为新的主机。
- 调用
redis-sentinel 命令启动哨兵
完成以上步骤后,如果被哨兵监控的主机挂起了,则哨兵会根据规则重新挑选出一个从机做为新的主机。以保证服务的稳定。
缺点:
复制的延迟,由于所有的写操作都是先在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。