Redis学习-4-3 Redis主从复制

1.主从复制:

Redis提供的高可用的解决方案,通过主从复制可以实现

1>读写分离

2>故障处理:  可以在某一台服务器出现故障的时候可以由其它服务器代替它保证应用可持续稳定的运行;

1:3的主从的集群结构,4台redis提供相同的功能;

主redis:负责数据的写

从redis:只负责数据的读

主的写会同步到从服务器,提高每台服务器的效率;

当主挂掉的时候,从服务器的某一个升级为主服务器,剩下两台从连接到新的主服务器上,继续提供数据的读取;

master-slave

2.主从复制的实现:

两种方式:

1>./redis-server --slaveof来指定从服务器的信息,很少使用

2>修改配置文件:

(1)新建配置文件:copy原redis.conf拷贝三份,分别命名为redis6380.conf,redis6382.conf和redis6384.conf

(2)master: 6380 slave: 6382 6384(1024-65535都可以当作自定义的端口号来使用)

将以下内容复制到redis6380的文件中

#引入原配置文件,注意引入的路径问题
include /usr/local/redis-3.2.9/redis.conf
#表示后台启动
daemonize yes
#该redis指定的端口号
port 6380
#进程号
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb

redis-server  ../redis.conf &

从服务器中配置

include /usr/local/redis-3.2.9/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6382.pid
logfile 6380.log
dbfilename dump6382.rdb

slaveof 127.0.0.1 6380  -->当前6382是6380的从,指定主从关系

同理6384

把服务器启动起来,每个配置文件启动一个独立的redis

./redis-server ../redis6380.conf

./redis-server ../redis6382.conf

./redis-server ../redis6384.conf

查看进程 ps -ef | grep redis

./redis-cli -p 6380

info -->统计信息的 info cpu:显示cpu的信息  info Replication

./redis-cli -p 6382查看6382的信息 master_link_status:up  up表示master正在运行,down表示master已挂掉;

./redis-cli -p 6384 

info Replication 

验证读写分离:

在第一个窗口主中 set k1 v1 set k2 v2

在第二个窗口从中 keys *

然后set k3 v3 报错readonly

第三个窗口中同第二个窗口一致

3.故障处理的实现

1>冷处理方式:当redis出现故障的时候,人为的处理

命令 slaveof no one:将某一个服务器提升为master

slaveof 127.0.0.1 6381(将slave挂至一台新的服务器)

设置主服务器挂掉shut down

将6382升级为主

进入6382的窗口执行命令slaveof no one

info Replaction 查看role为master

然后在从服务器的redis窗口执行slaveof 127.0.0.1 6382

数据读的性能有所下降,因为读的服务器少了一台

如果6380修好,那么启动6380服务器 ./redis-server ../redis6380.conf

ps -ef | grep redis

./redis-cli -p 6380

info Replication 查看role是master,把6380挂在6382上

slaveof 127.0.0.1 6382

最大的弊端就是:处理问题有时间延迟,因为是人为操作,对读写性能有一定的影响

2>热处理方式:

哨兵系统:

哨兵也是redis,不做读写,只监控多个redis服务实例的运行情况,有三个主要任务:

监控:不断的检查主服务和从服务器是否按照预期正常工作;

提醒:被监控的redis出现问题时,通知管理员或其它应用程序;

自动故障转移:

哨兵系统的处理方式:

配置哨兵系统:

1>copy哨兵文件:

cp sentinel.conf sentinel26380.conf

cp sentinel.conf sentinel26382.conf

cp sentinel.conf sentinel26384.conf

2>修改配置文件信息:

sentinel monitor <name> <masterIP> <masterPort> <投票数>

例如修改port 26380

修改监控信息: sentinel monitor mymaster 127.0.0.1 6382[master] 2[投票数]

3>启动redis,启动哨兵监控3个redis的运行状态

./redis-sentinel ../sentinel26380.conf   不是后台启动,是前台启动方式

./redis-sentinel ../sentinel26382.conf

./redis-sentinel ../sentinel26384.conf

稍等哨兵的心跳机制,shutdown主6382,查看哨兵的打印信息,发现自动选举出新的master

 

启动6382的redis,发现哨兵将其作为新的从服务器挂在master上。

哨兵崩溃的话怎么办?需要人为关注一下哨兵和主从的运行状态。

从服务器自动升级为主,另一个从服务器挂在新的主服务器上

 

posted on 2018-09-10 16:35  companion  阅读(114)  评论(0编辑  收藏  举报