血肝一天,C站最详细的Redis主从复制!!!


Redis主从复制与集群

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主结点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以为主,Slave 以为主。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的优缺点

  • 数据冗余:主从复制实现了数据的热备份,造成数据冗余。
  • 故障恢复:当主结点发生故障时,从结点可以顶替提供服务。
  • 负载均衡:当实现多主多从结构时,不管时读请求还是写请求都能实现负载均衡。
  • 高可用基石:主从复制是实现集群和负载均衡的基础。

主从复制原理

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

第二步:Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行

第三步:收集完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

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

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

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


Redis的主从复制实现方案

主从复制实现redis性能的提升有多种解决方案,

  • 一主一从,设置一台主结点和一台从节点实现读写分离,主机专门负责写操作,从机只负责读操作。
  • 一主多从,设置一台主结点和多台从节点,一台主结点负责写操作,多台从节点负责读操作。
  • 多主多从,设置多台主节点和多台从节点,多台主节点负责写操作,多台从节点负责读操作,服务具有高可用特性。

特别注意,主节点是可读可写的,但是从结点只读(也可手动修改设置)

一主一从实现方案

在一主一从方案中,只是简单的实现了读写分离,一旦主机或者从机发生宕机,都会导致主机或者从机的不可用。并且底层关于主从系结点的复制同步不需要我们考虑,我们只需要手动的更改配置即可实现。

主节点配置文件

# 命名为redis6379.conf
# 只展示需要修改的内容
port 6379							# 端口号
dbfilename dump6379.rdb				# 持久化文件名
pidfile /var/run/redis_6379.pid		# pid进程号管理
logfile "6379.log"					# log日志文件名

从节点配置文件

# 命名为redis6380.conf
# 只展示需要修改的内容
port 6380							# 端口号
dbfilename dump6380.rdb				# 持久化文件名	
pidfile /var/run/redis_6380.pid		# pid进程号管理
logfile "6380.log"					# log日志文件名
replicaof 127.0.0.1 6379			# 设置主节点ip及端口号

启动测试

# 启动主节点配置文件
[root@localhost myconf]# redis-server redis6379.conf

# 启动从节点配置文件
[root@localhost myconf]# redis-server redis6380.conf

# 查看进程信息
[root@localhost myconf]# ps -ef | grep redis
root      11155      1  0 11:20 ?        00:00:00 redis-server 127.0.0.1:6379
root      12675      1  5 11:22 ?        00:00:00 redis-server 127.0.0.1:6380
root      12721   1850  0 11:22 pts/0    00:00:00 grep --color=auto redis

# 客户端连接redis主节点服务器查看信息
[root@localhost myconf]# redis-cli -p 6379	# 指定服务器端口端口
127.0.0.1:6379> info replication			# 查看服务器信息
# Replication
role:master									# 角色为主节点
connected_slaves:1							# 从节点数量	
slave0:ip=127.0.0.1,port=6380,state=online,offset=770,lag=1	# 从节点信息
master_replid:0832d82a2a71124f33af0b67a81a7889245edf5f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:770
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:770

# 客户端连接redis从节点服务器查看信息
[root@localhost myconf]# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:slave							# 角色为从节点
master_host:127.0.0.1				# 绑定的主节点ip
master_port:6379					# 绑定的主节点端口
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:56
slave_priority:100
slave_read_only:1					# 从节点是否只读
connected_slaves:0
master_replid:0832d82a2a71124f33af0b67a81a7889245edf5f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

# 分别对主从结点进行测试
# 主节点
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"

# 从节点
127.0.0.1:6380> set name zhangsan
(error) READONLY You can't write against a read only replica.
127.0.0.1:6380> get name
"zhangsan"

一主多从实现方案

一主多从方案下,写专门由一个主节点负责,而读由两个从节点专门负责,这样的话,一个从节点的宕机不会影响我们正常业务的进行,实现一定程度上的高可用。但是主节点宕机,仍然影响程序的写操作。

主配置文件

# 命名为redis6379.conf
# 只展示需要修改的内容
port 6379							# 端口号
dbfilename dump6379.rdb				# 持久化文件名
pidfile /var/run/redis_6379.pid		# pid进程号管理
logfile "6379.log"					# log日志文件名

从结点一配置文件

# 命名为redis6380.conf
# 只展示需要修改的内容
port 6380
dbfilename dump6380.rdb
pidfile /var/run/redis_6380.pid
logfile "6380.log"
replicaof 127.0.0.1 6379

从节点二配置文件

# 命名为redis6380.conf
# 只展示需要修改的内容
port 6381
dbfilename dump6381.rdb
pidfile /var/run/redis_6381.pid
logfile "6381.log"
replicaof 127.0.0.1 6379

启动测试

[root@localhost myconf]# redis-server redis6379.conf 	# 启动主节点
[root@localhost myconf]# redis-server redis6380.conf 	# 启动从节点
[root@localhost myconf]# redis-server redis6381.conf	# 启动从节点
[root@localhost myconf]# redis-cli -p 6379				# 连接主节点
127.0.0.1:6379> info replication						# 查看主节点信息
# Replication
role:master
c
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值