Redis介绍之主从复制(五)

主从复制(Master/Slave)

1、是什么?

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制
Master以写为主,Slave以读为主

2、能干嘛?

​ 读写分离 、容灾恢复(减轻读写压力)

3、常用的主从方式

1)、一主二仆

含义:就是一个Master两个Slave
在这里插入图片描述
info replication:查看主从信息
信息如下:

role:master
connected_slaves:0
master_replid:f6baff9abfda12ca58048cfce4b0e2c1f4683da1
master_replid2:e8fe596d47d9d1d923d56d884b28128b78d2c1e0
master_repl_offset:0
second_repl_offset:1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

使用:
配从(库)不配主(库),默认大家都是主库master,在从库里面设置跟随的主库
(只要进行了主库配置,主库的所有东西都会被复制一份,而不是仅仅复制主库配置后的操作)

slaveof 主库ip 主库端口:配置从库
info replication:查看主从信息

注意点:
第一次slave1 和slave2切入点,是全量复制,之后是增量复制(不会复制一份之前已经复制 了)
主机可以写,但是从机不可以写,从机只能读
在这里插入图片描述
主机shutdow后,从机会处于待机状态,等主机回来后,主机新增记录从机可以顺利复制

从机shutdow后,每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件

从机复制到的数据,会被本机持久化。就算shutdown断开连接依然会有数据。

重新连接或者变更master,会清除之前的数据,重新建立拷贝最新的数据

2)、薪火相传

含义:就是上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力。
在这里插入图片描述
注意事项和一主二仆差不多,但注意中间一个虽然有slave是相对master,但是依然是slave的身份

3)、反客为主

slaveof no one:使当前数据库停止与其他数据库的同步,转成主数据库

复制原理

Slave启动成功连接到master后会发送一个sync命令;

Master接到命令启动后的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;

全量复制:而slave服务在数据库文件数据后,将其存盘并加载到内存中;

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步;

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

复制的缺点

​ 延时,由于所有的写操作都是在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使得这个问题更加严重。

Java中

Jedis jedis_master = new Jedis("主机地址1",端口号1);
Jedis jedis_slave = new Jedis("主机地址1",端口号2);
jedis_salve.slaveof("主机地址1",端口号1); //认人为主
jedis_master.set("key","value"); //主机写完,从机即可读到
jedis_slave.get("key"); //从机就可读到

猜你喜欢

转载自blog.csdn.net/weixin_42272869/article/details/112795029