Redis的主从复制(Master/Slave)
-
主从复制:主机数据更新后根据配置和策略,
自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主,可以进行读写分离、容灾恢复。 -
配置主从数据库:
-
配从(库)不配主(库)
-
修改配置文件:
- 拷贝三份
redis.conf
,分别为6379.conf
、6380.conf
、6381.conf
,并修改各配置文件的pidfile "/var/run/redis63**.pid"
、port 63**
、logfile "63**.log"
、dbfilename "dump63**.rdb"
的**为79、80、81。
- 拷贝三份
-
各redis服务器和客户端以不同端口启动
[root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-server /myredis/redis6379.conf [root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-cli -p 6379
-
-
常见组合:
- 一主二从:
- 一个Master两个Slave,Slave启动成功连接到master后可以共享Master的数据(复制原理);
- Master可以写数据读数据,Slave不可以写数据只能读数据;
- 可以通过
info replication
查看当前状态;
- Master挂了之后,各个Slave原地待命,仍然可以使用原数据
- Master重新开启之后还原为Master
- 主—从主—从
- Slaveof 新主库IP 新主库端口
- 上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力;
- 中途变更转向:会清除之前的数据,重新建立拷贝最新的;
- 自己做主库
- SLAVEOF no one
- 使当前数据库停止与其他数据库的同步,转成主数据库
- 一主二从:
-
复制原理:
- Slave启动成功连接到master后会发送一个sync命令;
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;
- 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中;
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步;
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行;
-
哨兵模式(sentinel)
- 自动将自己作为主库:能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库;
- 配置过程:
- 在
/myredis/
下创建sentinel.conf
文件; - 配置哨兵: sentinel monitor host6379 127.0.0.1 6379 1(host6379为哨兵名,可任意;1表示大于这个票数且票数最多的可以当Master)
- 启动哨兵:在
/usr/local/bin
下执行Redis-sentinel /myredis/sentinel.conf
- 当master挂了之后,投票选举:
- 在
- 一组sentinel能同时监控多个Master
- 复制延时问题:
由于所有的写操作都是先在Master上,再同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。