主从复制之复制原理

HeJin大约 2 分钟数据库技术Redis

默认情况下,毎台 Redis服务器都是主节点。一般情况下,只要配置从机就可以了。

认老大。一主(79)二从(80、81)。

如果Redis有设置密码。需要在从机的配置文件中添加主机密码。

masterauth ******

从机6380

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379		# 找谁当自己的老大
OK
127.0.0.1:6380> info replication
# Replication
role:slave				# 当前角色
master_host:127.0.0.1	# 主机的信息
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1609465822
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d947f2bda9ff69e14167bdcf68e7a1752599f6a7
master_replid2:0000000000000000000000000000000000000000
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

# 在主机中查看
127.0.0.1:6379> info replication
# Replication
role:master				# 当前角色
connected_slaves:1		# 已连接的从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=14,lag=0 # 从机信息
master_replid:ae8477e18ac231f90a0936698b8c3fb17e8cbbed
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

从机6381

127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6381> info replication
# Replication
role:slave				# 当前角色
master_host:127.0.0.1	# 主机信息
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:406
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:ae8477e18ac231f90a0936698b8c3fb17e8cbbed
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:406
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:393
repl_backlog_histlen:14

# 查看主机信息
127.0.0.1:6379> info replication
# Replication
role:master				# 当前角色
connected_slaves:2		# 已连接2个从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=448,lag=1		# 从机6380信息
slave1:ip=127.0.0.1,port=6381,state=online,offset=448,lag=1		# 从机6381信息
master_replid:ae8477e18ac231f90a0936698b8c3fb17e8cbbed
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:448
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:448

真实的主从配置应该在配置文件中配置,这样就是永久的。命令行修改时暂时的。

image-20210101100907802
image-20210101100907802

细节

主机可以设置值,从机不能写只能读。主机中的所有信息和数据,都会被从机保存。

主机可以写:

image-20210101101342917
image-20210101101342917

从机只能读不能写:

image-20210101101404648
image-20210101101404648

测试

主机断开连接,从机依旧连接到主机的。但是没有写操作了。主机如果回来了,从机依旧可以直接获取主机写的信息。

如果是使用命令行配置的主从,这个时候重启了,就会变为主机。只要变为了从机,数据立马就会从主机中获取值。

复制原理

  • Slave启动成功连接到 master后会发送一个sync同步命令。
  • Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令。在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。
  • 全量复制:而 slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
  • 增量复制:Master继续将新的所有收集到的修改命令依次传给save,完成同步。
  • 只要是重新连接 master,一次完全同步(全量复制)将被自动执行。数据一定可以在从机中看到。