本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Redis系列之六------Redis的复制(Master/Slave)
2) 配置哨兵,填写内容%C2%A0%E9%85%8D%E7%BD%AE%E5%93%A8%E5%85%B5%2C%E5%A1%AB%E5%86%99%E5%86%85%E5%AE%B9)
Redis系列之六------Redis的复制(Master/Slave)
一、Redis 的复制是什么?
行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
二、Redis 复制的案例
1、配置准备环境
1)拷贝多个redis.conf文件
开启daemonize yes 修改pid 文件名字 指定端口为6379
修改log文件位置
修改 dump.rdb名字
提示:按照上面的修改内容分别修改 redis6380.conf 和 redis6381.conf 文件内容。将上述修改中的6379改成6380或6381
开启服务
2、一主二仆
将6380和6381端口的服务器复制6379端口的内容。
6379服务器中 使用 info replication 命令查看slave ,可以看到有6380和6381两台服务作为slave
主从复制的演示
三个端口都使用 keys * 查看数据,发现没有一条数据,现在6379端口的服务器写入一条数据,然后在6380和6381端口中可以看到这条数据,这就是主从复制。
下面我们考虑这些问题!
1 slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的123是否也可以复制
先将6381端口的服务器关掉,然后将6379的数据清空,插入k1 ,k2 k3 数据,这时候6381端口的服务器如加入“仆人”的身份,6379端口插入k4数据,6381端口查看时,6379的所有数据都存在
2 从机是否可以写?set可否?
从机不可以写!
3 主机shutdown后情况如何?从机是上位还是原地待命
主机shutdown后,从机是原地待命,等待主机回来工作。
4 主机又回来了后,主机新增记录,从机还能否顺利复制?
主机回来后新增记录,从机可以顺利复制数据。
5 其中一台从机down后情况如何?依照原有它能跟上大部队吗?
从机shutdown后,重新启动服务器后,它是作为一个主机的,并不会跟上原来的部队,你需要重新加入6379的“仆人”,加入后查询数据又已经备份了主机的数据。
3、薪火相传
定义: 上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力
服务器中途变更转向:会清除之前的数据,重新建立拷贝最新的
演示:
我们可以看到当6381作为6380的从机,6380又作为6379的从机,这就是薪火相传。6380是6379的从机,也是6381的主机,这样就减缓6379主机服务器的压力。
4、反客为主
我们恢复成原来一主二仆的环境
现在主机shutdown
从机6381输入命令 SLAVEOF no one 使当前数据库停止与其他数据库的同步,转成主数据库
从机6380加入6381主机。
三、复制原理
- slave启动成功连接到master后会发送一个sync命令
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
- 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
四、哨兵模式(sentinel)
定义:在反客为主中,需要我们动手将从机变成主机,然后再将其他从机加入,这很不方便,哨兵模式是反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
1、演示
1)建立sentinel.conf
自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错
2) 配置哨兵,填写内容
在文件sentinel.conf 中填写: sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
提示: 上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机
3)启动哨兵
使用 redis-sentinel /myredis/sentinel.conf 命令启动哨兵。 上述目录依照各自的实际情况配置,可能目录不同
一主二仆模式
4)主机挂了
哨兵在选择投票选择主机
最后选出来的主机是6380。6381加入6380的从机。
问题: 如果之前的6379重启回来,会不会双master冲突?
6379重启回来后,会作为6380的从机继续工作,不会产生双master冲突。
注意: 一组sentinel可以同时监控多个Master
五、复制的缺点
复制延时:由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。