Redis主从复制环境部署

Redis主从复制:

master以写为主,slave以读为主。

原理:

Redis一般是使用一个Master节点来进行写操作,而若干个Slave节点进行读操作,Master和Slave分别代表了一个个不同的 Redis Server 实例。

另外定期的数据备份操作也是单独选择一个Slave去完成,这样可以最大程度发挥Redis 的性能,为的是保证数据的弱一致性和最终一致性。

另外,Master和 Slave的数据不是一定要即时同步的,但是在一段时间后Master和 Slave的数据是趋于同步的,这就是最终一致性。

image-20230717133224775

全同步过程:

  1. Slave 发送Sync命令到Master。
  2. Master启动一个后台进程,将 Redis 中的数据快照保存到文件中。
  3. Master 将保存数据快照期间接收到的写命令缓存起来。
  4. Master完成写文件操作后,将该文件发送给Slave。
  5. 使用新的RDB或AOF文件替换掉旧的RDB或AOF文件。
  6. Master将这期间收集的增量写命令发送给Slave端。

增量同步过程:

  1. Master接收到用户的操作指令,判断是否需要传播到Slave。
  2. 将操作记录追加到AOF文件。
  3. 将操作传播到其他Slave:对齐主从库;往响应缓存写入指令。
  4. 将缓存中的数据发送给Slave。

主从复制配置:

准备三台虚拟机或三个实例

我这边准备了三个虚拟机:

image-20230717140737671

关闭防火墙和Selinux(三台都要)

[root@rhel7 ~]# systemctl stop firewalld.service 
[root@rhel7 ~]# setenforce 0

修改bindIP:

node3

image-20230717141520330

[root@redis3 ~]# redis-server /etc/redis/redis.conf
[root@redis3 ~]# redis-cli -h 192.168.110.141
192.168.110.141:6379> ping
PONG
node2

image-20230717141650411

[root@redis2 ~]# redis-server /etc/redis/redis.conf
[root@redis2 ~]# redis-cli -h 192.168.110.140
192.168.110.140:6379> ping
PONG
master

image-20230717141855589

[root@rhel7 ~]# redis-server /etc/redis/redis.conf 
[root@rhel7 ~]# redis-cli -h 192.168.110.138
192.168.110.138:6379> ping
PONG
192.168.110.138:6379> 

执行以下命令检查信息

192.168.110.138:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:19fcb46c603434fd1fc3ed7402d1d6452e49068b
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

以138为主,140,141为从

则需要在140及141上如下配置:

192.168.110.140:6379> SLAVEOF 192.168.110.138 6379
OK

192.168.110.141:6379> SLAVEOF 192.168.110.138 6379
OK
检查结果:
#查看角色
192.168.110.138:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.110.140,port=6379,state=online,offset=478,lag=0
slave1:ip=192.168.110.141,port=6379,state=online,offset=478,lag=0
master_replid:17fd54608d77ecf7eef93bff047b96bdc2edbeaf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:478
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:478

#在138上设置键
192.168.110.138:6379> set words 'i am master of 138'
OK
#140,141都拿到了该建
192.168.110.140:6379> keys *
1) "words"
192.168.110.141:6379> keys *
1) "words"
192.168.110.141:6379> get words
"i am master of 138"

注意:

从服务器只能读,若从服务器写入数据则会报错。

若从服务器宕机后需要再次执行slaveof命令才能变为从服务器。

改变主服务器:

slaveof no one
例如:
#在140上执行
192.168.110.140:6379> SLAVEOF no one
OK
192.168.110.140:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:16f6113a27fcc013d1cff83923802bc3213ea8ff
master_replid2:17fd54608d77ecf7eef93bff047b96bdc2edbeaf
master_repl_offset:1136
second_repl_offset:1137
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1136
#此时其他服务器还没有添加140为主,所以此时140是一个独立的服务器。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值