概念:执行数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主。
主要用于读写分离、容灾恢复。
配从(库)不配主(库)
从库的配置:slaveof 主库ip 主库端口
每次与master断开之后,都需要重新连接,除非配置进redis.conf文件。
配置:
- 拷贝多个redis.conf文件,形成多个客户端
- 开启daemonize yes
- 修改端口
- 修改log名
- 修改dump.rdb的名称
修改这几个配置主要是为了区分开不同的客户端。
一、一台主机,两台从机
一个传给多个
1.info repllication:查看当前主机角色状态(master主机/slaver从机)
- slaveof ip port : 指定当前主机为ip port的从机,就会开始备份
从机只能读,不能写,主机才能写
可能遇到的一些问题:
1.主机挂掉之后,从机的状态?
主机宕机之后,从机还是slaver,连接状态变为down
2.主机重新连接之后从机的状态?
当主机重新连接后,一切恢复正常
3.从机挂了,重新启动之后该机器的身份,是主机还是从机?能否续接上?
从机挂了重新启动之后的身份是master,需要重新确定与主机的关系。(可以写进配置文件自动连接上ip port)
二、薪火相传
一个接着一个,作为上一个的从机,形成一个链
上一个slaver可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效的减轻master的写压力。
中途变更转向:会清楚之前的数据,重新建立拷贝最新的。
命令:slaveof 新主机ip 新主机端口
链中间的客户端身份还是slave
三、反客为主
使当前数据库停止与其他数据库的同步,转成主数据库。
命令:slaveof no one
复制原理
slave启动成功连接到master后会发送一个sync同步命令。
master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:master继续将新的所有收集到的修改命令一次传给slave,完成同步,但是只要式重新连接master,一次完全同步(全量复制)将被自动执行。
缺点:复制延时
首次是全量复制,之后是增量复制
哨兵模式
可以理解为自动的反客为主,主机挂了之后会在从机中投票选出一个作为新主机。
使用步骤:
- 在启动的redis.conf同级目录下新建sentinel.conf文件
- 配置sentinel.conf:sentinel monitor 被监控数据库名 ip port 1 :1 的意思是主机挂掉之后从机的票数多余1票就选出作为新主机。
- 启动哨兵:redis-sentinel sentinel.conf
当之前挂掉的主机重新启动之后,会变为从机,连接到哨兵选出来的新master上,作为该主机的从机。
持续更新~~