9.Redis主从复制

主从复制

1)、主从复制概念

主机数据更新后根据配置和策略, 自动同步到备机的,master/slaver机制,Master以写为主,Slave以读为主。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1RwDHyWf-1642327417306)(image/image-20220112205957304.png)]

主要的功能

读写分离,性能扩展
容灾快速恢复

2)、主从复制搭建

需求:实现一主两从

1.redis.conf文件中,开启daemonize yes 后台启动

2.redis.conf文件中,Appendonly 关掉设置为no,即不要AOF的追加,只要RDB持久化

3.新建文件夹,在其中新建redis6379.conf文件、redis6389.conf文件、redis6399.conf文件

#切换目录
cd /usr/local

#新建文件夹
mkdir myredis

#将redis.conf拷贝至此文件夹中
cp /usr/local/bin/myconf/redis.conf redis.conf

#新建redis6379.conf文件、redis6389.conf文件、redis6399.conf文件
vim redis6379.conf

4.编写redis6379.conf配置文件

include /usr/local/myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
masterauth redis的密码

其他两个文件同理,只需要修改其pid进程号以及端口号,生成的rdb文件名

5.启动三台服务器

[root@iZuf6croidnppdd8ghjlguZ myredis]#redis-server redis6379.conf
[root@iZuf6croidnppdd8ghjlguZ myredis]#redis-server redis6389.conf
[root@iZuf6croidnppdd8ghjlguZ myredis]#redis-server redis6399.conf

[root@iZuf6croidnppdd8ghjlguZ myredis]# ps -ef|grep redis
root     28813     1  0 21:57 ?        00:00:00 redis-server 127.0.0.1:6379
root     29056     1  0 21:57 ?        00:00:00 redis-server 127.0.0.1:6389
root     29289     1  0 21:57 ?        00:00:00 redis-server 127.0.0.1:6399
root     29672 14607  0 21:58 pts/2    00:00:00 grep --color=auto redis
[root@iZuf6croidnppdd8ghjlguZ myredis]# 

6.分别连接三台服务器,并查看其主机运行情况

#登录进入redis-cli -p 端口号 -a 密码 
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6379 -a 139249
127.0.0.1:6379> ping
PONG

#info replication 查看其主机运行的情况
127.0.0.1:6379> info replication
# Replication
role:master   #主机
connected_slaves:0
master_replid:908d6caa946762a50ce49234da5c49528032e82f
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

7.显示一主两从

6379作为主机、6389 & 6399作为从机

旧版本命令:slaveof 主机IP 主机端口号

redis5以后命令: replicaof 主机IP 主机端口号

#设置从机 -->  在从机 6389 上输入:slaveof 主机IP 主机端口号
127.0.0.1:6389>  slaveof 127.0.0.1 6379
OK
127.0.0.1:6389> info replication
# Replication
role:slave   #从机
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:58f4e9ba01290a18eeca3621dd58f5e40eb1ab55
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
#设置从机 -->  在从机 6399 上输入:slaveof 主机IP 主机端口号
127.0.0.1:6399> slaveof 127.0.0.1 6379
OK
127.0.0.1:6399> 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:0
master_link_down_since_seconds:1641910423
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:65a350db5a23abb2ccb82c583268e7465bd92f3c
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
#主机 -->  在主机 6379 上传,查看其主机运行的情况
127.0.0.1:6379> info replication
# Replication
role:master   #主机
connected_slaves:2   #从机个数
slave0:ip=127.0.0.1,port=6399,state=online,offset=14,lag=3   #从机信息
slave1:ip=127.0.0.1,port=6389,state=online,offset=14,lag=2   #从机信息
master_replid:58f4e9ba01290a18eeca3621dd58f5e40eb1ab55
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

8.测试一主两从

#主机 6379
127.0.0.1:6379> set name zs
OK
127.0.0.1:6379> set age 10
OK
127.0.0.1:6379> get name
"zs"
127.0.0.1:6379> get age
"10"
127.0.0.1:6379> keys *
1) "name"
2) "age"


#从机 6389
127.0.0.1:6389> keys *
1) "age"
2) "name"

#从机 6399
127.0.0.1:6399> keys *
1) "age"
2) "name"
127.0.0.1:6399> set gender false
(error) READONLY You can't write against a read only replica.  

Master以写为主,Slave以读为主,读写分离。

3)、主从复制测试
情况1:一主两从

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qrzni3K2-1642327417313)(image/image-20220112205936606.png)]

主机挂掉,执行shutdown
从机info replication还是显示之前认定主机的信息

#主机 6379 关闭
127.0.0.1:6379> SHUTDOWN
not connected> exit
[root@iZuf6croidnppdd8ghjlguZ myredis]# 

#从机 6389 查看
127.0.0.1:6389> info replication
# Replication
role:slave    #从机
master_host:127.0.0.1  #主机IP
master_port:6379       #主机端口号
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:714
master_link_down_since_seconds:8
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:58f4e9ba01290a18eeca3621dd58f5e40eb1ab55
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:714
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:714


#主机 6379 连接
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6379.conf
24272:C 11 Jan 2022 22:46:09.108 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24272:C 11 Jan 2022 22:46:09.108 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=24272, just started
24272:C 11 Jan 2022 22:46:09.108 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6379 -a 139249
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> info replication
# Replication
role:master    #主机
connected_slaves:2  #从机数量
slave0:ip=127.0.0.1,port=6399,state=online,offset=28,lag=1  #从机信息
slave1:ip=127.0.0.1,port=6389,state=online,offset=28,lag=3  #从机信息
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

如果从机挂掉,执行shutdown
主机开始写数据,从机在开启的时候,恢复数据的时候是从主机从头开始追加的

#从机 6399 关闭
127.0.0.1:6399> SHUTDOWN
not connected> exit
[root@iZuf6croidnppdd8ghjlguZ myredis]# 

#主机 6379  新增数据
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6389,state=online,offset=140,lag=0
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:140
127.0.0.1:6379> set key1 aaa
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
3) "key1"

#从机 6399 修改配置文件
include /usr/local/myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
masterauth redis的密码
#新增配置主从信息
slaveof 127.0.0.1 6379
#保存并退出


#从机 6399 连接
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6399.conf
24732:C 11 Jan 2022 22:55:44.039 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24732:C 11 Jan 2022 22:55:44.039 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=24732, just started
24732:C 11 Jan 2022 22:55:44.039 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6399 -a 139249 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6399> ping
PONG
127.0.0.1:6399> info replication   #查看从机信息
# Replication
role:slave   #从机
master_host:127.0.0.1  #主机IP
master_port:6379       #主机PORT
master_link_status:up
master_last_io_seconds_ago:14
master_sync_in_progress:0
slave_repl_offset:265
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:265
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:127
repl_backlog_histlen:139
127.0.0.1:6399> keys *    #查看数据,发现后来主机新增数据也在其中
1) "name"
2) "age"
3) "key1"


#主机 6379 查看信息
127.0.0.1:6379> info replication
# Replication
role:master      #主机
connected_slaves:2   #从机个数
slave0:ip=127.0.0.1,port=6389,state=online,offset=321,lag=1   #从机信息
slave1:ip=127.0.0.1,port=6399,state=online,offset=321,lag=4   #从机信息
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:321
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:321

情况2:薪火相传

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJamfySt-1642327417316)(image/image-20220112205917814.png)]

上一个Slave可以是下一个Slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。

用 slaveof ,中途变更转向:会清除之前的数据,重新建立拷贝最新的数据;

风险是一旦某个slave宕机,后面的slave都没法备份;

主机挂了,从机还是从机,无法写数据了,此特点与一主二从特点相似;

#从机 6389 将从机6399设置为上一个Slave
127.0.0.1:6389> slaveof 127.0.0.1 6399
OK
127.0.0.1:6389> info replication
# Replication
role:slave    #从机
master_host:127.0.0.1  
master_port:6399
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:643
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:643
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:643

#主机  6379  查看信息
127.0.0.1:6379> info replication
# Replication
role:master    #主机
connected_slaves:1   #从机个数
slave0:ip=127.0.0.1,port=6399,state=online,offset=643,lag=2  #从机信息
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:657
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:657

#从机 6399 查看信息
127.0.0.1:6399> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:32
master_sync_in_progress:0
slave_repl_offset:685
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=127.0.0.1,port=6389,state=online,offset=685,lag=2
master_replid:acee72430258e295132eb39f6154e5c9d17ed9af
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:685
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:127
repl_backlog_histlen:559
#一旦从机6399挂掉,则从机6389无法完成数据复制
#6399
127.0.0.1:6399> SHUTDOWN
not connected> exit
[root@iZuf6croidnppdd8ghjlguZ myredis]# 

#主机6379   新增数据
127.0.0.1:6379> set key3 ccc
OK
127.0.0.1:6379> keys *
1) "age"
2) "key3"
3) "name"
4) "key2"
5) "key1"

#6389  无法查看到新增数据
127.0.0.1:6389> keys *
1) "age"
2) "key1"
3) "name"
4) "key2"
#从机 6399 再次连接
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6399.conf
9885:C 11 Jan 2022 23:20:47.041 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
9885:C 11 Jan 2022 23:20:47.041 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=9885, just started
9885:C 11 Jan 2022 23:20:47.041 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6399 -a 139249 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6399> keys *   #查看到主机最新数据
1) "name"
2) "age"
3) "key1"
4) "key2"
5) "key3"

#从机 6389 查看,能看到全部数据
127.0.0.1:6389> keys *
1) "age"
2) "key3"
3) "name"
4) "key1"
5) "key2"
情况3:反客为主

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NkghGnQM-1642327417318)(image/image-20220112205855079.png)]

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改
可以使用命令:slaveof no one 将从机变为主机

缺点:手动设置完成反客为主

#主机 6379 关闭
127.0.0.1:6379> SHUTDOWN
not connected> exit
[root@iZuf6croidnppdd8ghjlguZ myredis]# 

#从机6399  反客为主
127.0.0.1:6399> slaveof no one
OK
127.0.0.1:6399> info replication
# Replication
role:master   #主机
connected_slaves:1  #从机数量
slave0:ip=127.0.0.1,port=6389,state=online,offset=0,lag=2   #从机信息
master_replid:1f13d47bdbb9f86f81de3869428738805cd1bb94
master_replid2:e78f603b05ae5d6fe348bc7b2b92a4ec0697391a
master_repl_offset:861
second_repl_offset:862
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:760
repl_backlog_histlen:102
4)、主从复制原理
  • Slave从机启动成功连接到Master主机后,从机Slave会发送一个sync命令

  • Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步

    1. 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。(刚开始从机连接主机,主机一次给)
    2. 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步 (主机修改了数据会给予从机修改的数据同步,叫做增量复制)
  • 断开之后重新连接,只要是重新连接master,一次完全同步(全量复制) 将被自动执行,rdb的数据就会给从机

  • 主机负责写,从机负责读

5)、哨兵模式

主要是为了监控主机宕机之后,从机可以立马变为主机,和反客为主思想一样,但是不用手动设置;能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0JSK2nn-1642327417319)(image/1641717819193.png)]

恢复一主二从模式

恢复一主二从模式

#主机  6379
[root@iZuf6croidnppdd8ghjlguZ myredis]# ps -ef|grep redis
root     21068 28958  0 23:43 pts/0    00:00:00 grep --color=auto redis
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6379.conf
23281:C 11 Jan 2022 23:44:10.124 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
23281:C 11 Jan 2022 23:44:10.124 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=23281, just started
23281:C 11 Jan 2022 23:44:10.124 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6379 -a 139249
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> ping
PONG


#从机 6389 连接
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6389.conf
27294:C 11 Jan 2022 23:45:25.028 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
27294:C 11 Jan 2022 23:45:25.028 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=27294, just started
27294:C 11 Jan 2022 23:45:25.028 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6389 -a 139249
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6389> ping
PONG
127.0.0.1:6389> slaveof 127.0.0.1 6379  #设置6379为主机
OK
127.0.0.1:6389> info replication  #查看状态
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:30ab7f0ea1f12bfabf31a87e22d27a1170254afe
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0


#从机 6399 连接
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6399.conf
1084:C 11 Jan 2022 23:47:06.031 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1084:C 11 Jan 2022 23:47:06.031 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=1084, just started
1084:C 11 Jan 2022 23:47:06.031 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6399 -a 139249 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6399> ping
PONG
127.0.0.1:6399> info replication   #查看状态
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:12
master_sync_in_progress:0
slave_repl_offset:28
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:30ab7f0ea1f12bfabf31a87e22d27a1170254afe
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:0


#查看主机 6379 状态
127.0.0.1:6379> info replication
# Replication
role:master         #主机
connected_slaves:2  #从机数量
slave0:ip=127.0.0.1,port=6389,state=online,offset=56,lag=0  #从机信息
slave1:ip=127.0.0.1,port=6399,state=online,offset=56,lag=1  #从机信息
master_replid:30ab7f0ea1f12bfabf31a87e22d27a1170254afe
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
新建sentinel.conf文件

在目录myredis中新建一个文件sentinel.conf

其中mymaster为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量。

#查看当前目录
[root@iZuf6croidnppdd8ghjlguZ myredis]# pwd
/usr/local/myredis
#新建sentinel.conf文件
[root@iZuf6croidnppdd8ghjlguZ myredis]# vim sentinel.conf

#编写文件内容  sentinel哨兵,monitor监控,一个id为mymaster(别名),ip , 端口号 , 数量
sentinel monitor mymaster 127.0.0.1 6379 1
#设置连接redis的密码  sentinel哨兵 , auth-pass校验密码 , 一个id为mymaster(别名), 密码
sentinel auth-pass mymaster 139249
启动哨兵模式

启动时的信息

+monitor master mymaster 127.0.0.1 6379 quorum 1

  • +slave slave 127.0.0.1:6389 127.0.0.1 6389 @ mymaster 127.0.0.1 6379
  • +slave slave 127.0.0.1:6399 127.0.0.1 6399 @ mymaster 127.0.0.1 6379
#通过redis的bin目录下的redis-sentinel命令,启动哨兵模式
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-sentinel sentinel.conf 

测试

#主机 6379 关闭
127.0.0.1:6379> SHUTDOWN
not connected> exit
[root@iZuf6croidnppdd8ghjlguZ myredis]#

#此时哨兵输出信息  选举从机6399作为Master主机
# +selected-slave slave 127.0.0.1:6399 127.0.0.1 6399 @ mymaster 127.0.0.1 6379
* +failover-state-send-slaveof-noone slave 127.0.0.1:6399 127.0.0.1 6399 @ mymaster 127.0.0.1 6379
* +failover-state-wait-promotion slave 127.0.0.1:6399 127.0.0.1 6399 @ mymaster 127.0.0.1 6379
# +promoted-slave slave 127.0.0.1:6399 127.0.0.1 6399 @ mymaster 127.0.0.1 6379


#查看 6399 信息
127.0.0.1:6399> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6389,state=online,offset=20927,lag=4
master_replid:63ad8bdc01f001d33316f0485c3eb28646b44cff
master_replid2:0d5ca3a5c0f7b293c78e352d737d911e82c72af5
master_repl_offset:21060
second_repl_offset:6870
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:21060


#查看 6389 信息
127.0.0.1:6389> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6399
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:22922
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:63ad8bdc01f001d33316f0485c3eb28646b44cff
master_replid2:0d5ca3a5c0f7b293c78e352d737d911e82c72af5
master_repl_offset:22922
second_repl_offset:6870
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:22922
#此时再启动 6379服务 , 将成为从机
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-server redis6379.conf
8322:C 12 Jan 2022 00:32:41.221 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8322:C 12 Jan 2022 00:32:41.221 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=8322, just started
8322:C 12 Jan 2022 00:32:41.221 # Configuration loaded
[root@iZuf6croidnppdd8ghjlguZ myredis]# redis-cli -p 6379 -a 139249
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication  #查看信息
# Replication
role:slave   #从机
master_host:127.0.0.1   #主机IP
master_port:6399        #主机PORT
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:28958
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:63ad8bdc01f001d33316f0485c3eb28646b44cff
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28958
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:27473
repl_backlog_histlen:1486


#此时哨兵信息
# -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6399
* +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6399
故障恢复的判定规则

具体哪个从机会变成主机,其判定规则主要为:

顺序依次往下,优先级 》偏移量 》runid

  • 优先级在redis.conf中默认: replica-priority 100 ,值越小优先级越高
  • 偏移量是指获得原主机数据最全的,也就是数据越多,变主机的机会越大
  • 每个redis实例启动后都会随机生成一个40位的runid

新主登基
从服务里挑选一个,将其转成主服务
(选择规则为:1.选择优先级靠前 2.选择偏移量最大的 3.选择runid最小的从服务)

群仆俯首
挑选出新的主服务后,sentinel向原主服务的从服务发送slaveof 新主服务的命令,复制新Master

旧主俯首

当已经下线的服务重新上线时,sentinel会向其发送slaveof命令,让其成为新主的从

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhWNFckc-1642327417320)(image/image-20220112205608208.png)]

缺点

缺点就是复制会有延时

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

what's your name.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值