Redis集群与高可用的三种模式:
- Redis主从复制
- Redis哨兵(Sentinel)
- Redis Cluster
Redis 主从复制
和MySQL主从模式类似,可以实现跨主机的远程备份。APP连接到LB集群虚拟IP,由LB调度用户请求到后端Redis服务器来提供服务。
当master出现故障后,可以提升一个slave变成新的master.
slave需要设置和master相同的连接密码,master需要开启数据持久化防止数据丢失。
创建主节点:10.0.0.7
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | 
 
 10.0.0.7:6379> INFO REPLICATION
 
 role:master
 connected_slaves:0
 master_failover_state:no-failover
 master_replid:66f0a0d55d211ac362470f1a95d3f8a8d49d16a1
 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
 
 | 
使用安装脚本编译安装redis服务器,做为slave端:10.0.0.11  10.0.0.9
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | 
 10.0.0.11:6379> REPLICAOF 10.0.0.7 6379
 OK
 
 10.0.0.11:6379> CONFIG SET masterauth 12345678
 OK
 
 10.0.0.11:6379> INFO REPLICATION
 
 role:slave
 master_host:10.0.0.7
 master_port:6379
 master_link_status:up
 master_last_io_seconds_ago:3
 master_sync_in_progress:0
 slave_read_repl_offset:196
 slave_repl_offset:196
 slave_priority:100
 slave_read_only:1
 replica_announced:1
 connected_slaves:0
 master_failover_state:no-failover
 master_replid:f86f616f8fd0c06157d2bf4b67e3c6cbb6b9ca74
 master_replid2:0000000000000000000000000000000000000000
 master_repl_offset:196
 second_repl_offset:-1
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:1
 repl_backlog_histlen:196
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | 10.0.0.9:6379> REPLICAOF 10.0.0.7 6379
 OK
 10.0.0.9:6379> CONFIG SET masterauth 12345678
 OK
 10.0.0.9:6379> INFO REPLICATION
 
 role:slave
 master_host:10.0.0.7
 master_port:6379
 master_link_status:up
 master_last_io_seconds_ago:10
 master_sync_in_progress:0
 slave_read_repl_offset:532
 slave_repl_offset:532
 slave_priority:100
 slave_read_only:1
 replica_announced:1
 connected_slaves:0
 master_failover_state:no-failover
 master_replid:f86f616f8fd0c06157d2bf4b67e3c6cbb6b9ca74
 master_replid2:0000000000000000000000000000000000000000
 master_repl_offset:532
 second_repl_offset:-1
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:519
 repl_backlog_histlen:14
 
 | 
查看master端状态
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 
 | 10.0.0.7:6379> INFO REPLICATION
 role:master
 connected_slaves:2
 slave0:ip=10.0.0.11,port=6379,state=online,offset=574,lag=1
 slave1:ip=10.0.0.9,port=6379,state=online,offset=588,lag=0
 master_failover_state:no-failover
 master_replid:f86f616f8fd0c06157d2bf4b67e3c6cbb6b9ca74
 master_replid2:0000000000000000000000000000000000000000
 master_repl_offset:588
 second_repl_offset:-1
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:1
 repl_backlog_histlen:588
 10.0.0.7:6379> INFO REPLICATION
 
 role:master
 connected_slaves:2
 slave0:ip=10.0.0.11,port=6379,state=online,offset=588,lag=1
 slave1:ip=10.0.0.9,port=6379,state=online,offset=588,lag=0
 master_failover_state:no-failover
 master_replid:f86f616f8fd0c06157d2bf4b67e3c6cbb6b9ca74
 master_replid2:0000000000000000000000000000000000000000
 master_repl_offset:588
 second_repl_offset:-1
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:1
 repl_backlog_histlen:588
 
 | 
修改slave配置文件
| 12
 3
 
 | [root@rocky9 ~]replicaof 10.0.0.7 6379
 masterauth 12345678
 
 | 
删除主从同步
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | 10.0.0.9:6379> REPLICAOF NO ONEOK
 10.0.0.9:6379> INFO REPLICATION
 
 role:master
 connected_slaves:0
 master_failover_state:no-failover
 master_replid:f842a5a9130f9156260f5ceee8be657d06024e8c
 master_replid2:f86f616f8fd0c06157d2bf4b67e3c6cbb6b9ca74
 master_repl_offset:782
 second_repl_offset:783
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:519
 repl_backlog_histlen:264
 
 | 
故障恢复
1、slave节点故障时,将client指向其它slave节点即可,然后修复故障slave节点
2、master节点故障时,需将其中一个slave提升为master,并将其它slave指向新的master
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | 
 10.0.0.9:6379> REPLICAOF NO ONE
 OK
 
 10.0.0.9:6379> INFO REPLICATION
 
 role:master
 connected_slaves:0
 master_failover_state:no-failover
 master_replid:f842a5a9130f9156260f5ceee8be657d06024e8c
 master_replid2:f86f616f8fd0c06157d2bf4b67e3c6cbb6b9ca74
 master_repl_offset:782
 second_repl_offset:783
 repl_backlog_active:1
 repl_backlog_size:1048576
 repl_backlog_first_byte_offset:519
 repl_backlog_histlen:264
 
 | 
| 12
 3
 4
 5
 6
 
 | 10.0.0.11:6379> REPLICAOF 10.0.0.9 6379
 OK
 
 10.0.0.11:6379> CONFIG SET masterauth 12345678
 OK
 
 | 
主从复制的缺陷
- master 和 slave 无法自动切换,无法实现故障转移
- 只有一个master主节点支持写入,业务量大时容易达到性能瓶颈