redis主从

单机瓶颈

1 虽然Redis可以实现单机的数据持久化,但是无论是RDB还是AOF,都解决不了单点宕机问题。

2 即一台单机Redis服务器本身出现系统故障,硬件故障等问题后,就会直接造成数据的丢失,

3 此外,单机的性能也是有极限的,因此需要使用另外的技术来解决单点故障和性能扩展的问题

主从复制原理

1 salve 向master发送sync命令

2 master启动后台存盘进程,并手机所有修改数据命令

3 master完成存盘后,传送整个数据文件到slave

4 slave接受数据文件,加载到内存中完成首次完全同步

5 后续有新数据产生时,master继续将新的数据命令传递给slave完成同步

主从复制架构特点

三种结构模式:
一主一从
一主多从
主从从

一个master可以有多个slave

一个slave只能有一个master

数据流向是单向的,master到slave

主从复制实现

一旦某个slave成为一个master的slave,redis slave服务会清空当前的redis服务器上的所有数据并将master的数据导入到自己的内存,但是如果只是断开同步关系后,则不会删除当前已经同步过的数据
redis slave 也要开始持久化并设置和master同样的连接密码,因为后期slave会有提升为master的可能,slave切换为master同步后会丢失之前的所有数据,而通过持久化可以恢复数据

当配置redis复制功能时,强烈建议打开主服务器的持久化功能,否则的话,由于延迟等问题,部署的服务应该要避免自动启动

参考案例:

导致主从服务器数据全部丢失

1.假设节点a为主服务器,并且关闭了持久化。并且节点b和节点c都从a节点复制数据

2.节点a崩溃,然后由自动拉起服务重启了节点a,由于节点a的持久化被关闭了,所以重启之后没有任何数据

3.节点b和节点c 将从a节点复制数据,但是a的数据是空的,于是就把自身保存的数据副本删除

在关闭主服务器的持久化,并且同时开启自动拉起进程的情况下,即使使用sentinel来实现redis高可用,也是非常危险的。因为主服务器可能拉起的非常快,以至于sentinel在配置心跳时间间隔内没有检测主服务器已被重启,然后还是会执行上面的数据丢失流程无论何时,数据安全都是极其重要的,所以应该禁止主服务器关闭持久化的同时自动启动

redis主从其中服务器不需要设置密码并且要关闭防火墙  /etc/selinux/conf要设置到disabled模式

在第一台服务器上第一步:在/etc/redis.conf中修改protected-mode no 以及bind  0.0.0.0

第二步:重启服务service redis restart

第三步:[root@localhost ~]# redis-cli

127.0.0.1:6379> slaveof 192.168.0.121 6379
OK

127.0.0.1:6379> keys *
(empty list or set)查看是否有数据

在第二台服务器上:

[root@localhost redis]# redis-cli -h 127.0.0.1 -p 6379 -a 1234
127.0.0.1:6379> keys *
1) "1"

复制第一台服务器检测端口telnet 192.168.0.121

 netstat -tnlp查看端口

在第一台服务器上slaveof 192.168.0.121 6379

注意关闭自动拉起服务和持久化

一主两从在第三台服务器的/etc/redis.cong中搜索slaveof添加 

slaveof 192.168.0.121 6379  修改bind 0.0.0.0

级联复制:在第三台服务器/etc/redis.conf中搜索120修改IP为第一台服务器的IP 在第一台服务器上关闭防火墙systemctl stop firewalld在第三台服务器上重启redis   登录redis  查看keys* 

slaveof no one 切断主从  检测是否切断主从info replication 

 

上一篇:Mariadb 主从配置教程


下一篇:主从-分库分表