Redis主从复制环境部署

文章目录

    • Redis主从复制:
      • 原理:
      • 全同步过程:
      • 增量同步过程:
      • 主从复制配置:
      • 关闭防火墙和Selinux(三台都要)
      • 修改bindIP:
        • node3
        • node2
        • master
      • 以138为主,140,141为从
        • 检查结果:
      • 改变主服务器:
        • 例如:

Redis主从复制:

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

原理:

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

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

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

Redis主从复制环境部署_第1张图片

全同步过程:

  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。

主从复制配置:

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

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

Redis主从复制环境部署_第2张图片

关闭防火墙和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是一个独立的服务器。

你可能感兴趣的:(SQL,redis,数据库,缓存)