主从复制
Redis支持将数据同步到多台slave上,这种特性对提高读取性能非常有益
- master可以有多台slave
- 除了多个slave连到相同master外,slave也可以连接到其它slave形成图状结构
- 主从复制不会阻塞master,也就是说当一个或多个slave与master连接进行复制时,master可以继续处理客户端发来的请求,相反slave在初次同步数据时则会阻塞,不能处理客户端请求
- 主从复制可以用来提高系统的伸缩性,我们可以用多个slave专门负责客户端的读请求,可以做数据冗余
- 可以在master禁用数据持久化,只需要注释掉master配置文件redis.conf的save配置,然后只在slave配置持久化
- 准备三台服务器6380、6381、6383,因为是模拟,需要复制三份配置文件,并分别更改端口号,pid文件名字(windows版暂无),dump.rdb名字,Appendonly关掉
- 分别启动这三个服务,在windows版演示 redis-server ridis.windows6380.cof
- 分别连接这三台服务 redis-cli -p 6380
-
我们可以在三台服务上执行命令”info replication”,可以发现三台服务的角色都是master
- 我们可以使用“slaveof <ip> <port> ”设置主从关系,这三台服务可以设置成两种关系:并联or串联。slaveof 127.0.0.1 6381
- 我们先来设置并联(一主二仆),即6382和6383都是6381的slave
-
然后在master上写数据,再slave上取数据,结果是可以取到另外,在slave上测试写数据,结果是不可以的,slave上不允许写数据串联(薪火相传),去中心化,即6380是6381的slave,6381是6382的slave,操作上和刚才类似,这里就不演示了。假如,有100台slave的话,那么master就压力很大了,所以串联可以舒缓master的压力,但是也带来的更大的延时
综上,通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。
问题:
1)如果主机死掉了,默认情况下,主机重新启动,角色还是主机
2)如果从机死掉了,默认情况下,从机重新启动,角色变成没有独立主机了,需要重新配置,除非从机在redis.conf文件里配置了,否则从机不会重新连接主机
- 反客为主
- 在6380上执行“slaveof no one”
- 在6381上重新配置“slaveof 127.0.0.1 6380”
-
刚刚提到了,当master死机的时候,重写启动还是master,现在是希望当master死机的时候,让某一台从机变成主机,这里是,让6380变成主机,那么需要操作