Redis的主从复制

Redis的主从复制

可实现功能

1.读写分离

2.容灾

实现

1.搭建一主多从

因为没有多个服务器,所以我们选择创建不同的redis服务来监听不同的端口

创建过程

1.引入redis配置文件

include /myredis/redis.conf

2.分配进程号

pidfile /var/run/redis_6379.pid

3.分配端口号

port 6379

4.持久化

dbfilename dump6379.rdb

启动多台服务器

redis-server /myredis/redis6380.conf

redis-server /myredis/redis6381.conf

redis-server /myredis/redis6379.conf

查看主机信息

redis-cli -p 6379

into replication

查看到的信息

# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:6e4db8b34705223bf21e95c4e8fed2b4100c8669
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

配置主从库

在从机上执行命令

slaveof:成为某个实例的从服务器

之后查看info replication后可以发现从服务器和主服务器中的内容发生了改变

# Replication
role:master
connected_slaves:1//标志从服务器的数量
slave0:ip=112.74.183.130,port=6380,state=online,offset=84,lag=0//从服务器的相关信息
master_failover_state:no-failover
master_replid:486e5cf748dc1e314b742cf15bb392f08338be9a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84

# Replication
role:slave//标志为从服务器
master_host:112.74.183.130//主服务器地址
master_port:6379//主服务器端口
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:84
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:486e5cf748dc1e314b742cf15bb392f08338be9a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84

测试

主服务器写,从服务器读

我们在主服务中写入数据,可以从=在从服务器中读取到,因为发生了读取操作

127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set a1 v1
OK
127.0.0.1:6379> keys *
1) "a1"
127.0.0.1:6379> get a1
"v1"
127.0.0.1:6379> 

127.0.0.1:6380> keys *
1) "a1"
127.0.0.1:6380> 

我们在实验下在从服务器中进行写操作可以吗

127.0.0.1:6380> set k1 va
(error) READONLY You can't write against a read only replica.
127.0.0.1:6380> 
结果是不可以的,因为从服务器只可以进行读操作

主从复制原理

1.从服务器连接主服务器后,从服务器向主服务器发送进行数据同步的消息

2.主服务器接受到数据同步的消息后,把主服务器中的数据进行持久化rdb文件,把rdb文件发送给从服务器,从服务器进行读取数据

每次主服务器进行写操作之后,和从服务器进行数据同步

缺点

复制延时

常用三招

一主二仆

注意:

当一台从服务器挂掉后,我重启他的服务,这台服务器会重新变为主服务器

当主服务器挂掉会发生什么

从服务器不会主动尚未成为主服务器,但是会发现主服务器挂掉,当主服务器重新启动后,还是主服务器

# Replication
role:slave
master_host:112.74.183.130
master_port:6379
master_link_status:down//标识主机已经挂掉
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1664
master_link_down_since_seconds:8
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:486e5cf748dc1e314b742cf15bb392f08338be9a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1664
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1664

薪火相传

从服务器还可以挂从服务器,特点于一主二仆相似

反客为主

主服务器后,从服务器成为主服务器

在要成为主机的从服务器中执行

slaveof no one 

缺点:需要手动完成

哨兵模式(反客为主自动版)

后台监控主机是否故障,如果故障根据投票数将从服务器升级为主服务器

使用步骤

1.先创建sentinel.conf文件。名字不能错

2.在sentinel.conf文件中写入命令:

sentinel monitor mymaster 127.0.0.1 6379 1
mymaster是给被监控的服务器名称 数字代表至少有多少个哨兵同意才能升级

3.启动哨兵

使用命令:

redis-sentinel sentinel.conf
          出现这个,代表启动成功
          _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.5 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 20264
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

20264:X 08 Aug 2021 15:29:53.886 # Sentinel ID is dbbf57d5657ee22daaaa87d5c04bbc5b4d689255
20264:X 08 Aug 2021 15:29:53.886 # +monitor master mymaster 127.0.0.1 6379 quorum 1
20264:X 08 Aug 2021 15:29:53.886 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
20264:X 08 Aug 2021 15:29:53.891 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379

当主机挂了,从机选举出主机

选举规则

1.优先级靠前的(redis.conf中slave-priority 100值越小,优先级越高)

2.选择偏移量大的(获得原主机数据最全的)

3.选择runid最小的从服务(每个redis实例启动都会随机生成一个40位的runid)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值